| #include <common.h> | 
 | #include <config.h> | 
 | #include <command.h> | 
 | #include <amlogic/aml_irblaster.h> | 
 |  | 
 | static int do_ir_open(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | 
 | { | 
 | 	struct aml_irblaster_drv_s *drv; | 
 |  | 
 | 	drv = aml_irblaster_get_driver(); | 
 | 	if (drv) | 
 | 		return drv->open(); | 
 | 	return CMD_RET_USAGE; | 
 | } | 
 |  | 
 | static int do_ir_close(cmd_tbl_t *cmdtp, int flag, int argc,char *const argv[]) | 
 | { | 
 | 	struct aml_irblaster_drv_s *drv; | 
 |  | 
 | 	drv = aml_irblaster_get_driver(); | 
 | 	if (drv) | 
 | 		return drv->close(); | 
 | 	return CMD_RET_USAGE; | 
 | } | 
 |  | 
 | static int do_ir_test(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | 
 | { | 
 | 	struct aml_irblaster_drv_s *drv; | 
 | 	unsigned int times; | 
 |  | 
 | 	if (argc != 2) | 
 | 		return CMD_RET_USAGE; | 
 | 	times = simple_strtoul(argv[1], NULL, 10); | 
 | 	drv = aml_irblaster_get_driver(); | 
 | 	if (drv) { | 
 | 		if (!drv->openflag) { | 
 | 			printf("please first irblaster open\n"); | 
 | 			return 0; | 
 | 		} | 
 | 		return drv->test(times); | 
 | 	} | 
 | 	return CMD_RET_USAGE; | 
 | } | 
 |  | 
 | static int do_ir_send(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | 
 | { | 
 | 	struct aml_irblaster_drv_s *drv; | 
 | 	unsigned int value; | 
 |  | 
 | 	if (argc != 2) | 
 | 		return CMD_RET_USAGE; | 
 | 	drv = aml_irblaster_get_driver(); | 
 | 	if (drv) { | 
 | 		if (!drv->openflag) { | 
 | 			printf("please first irblaster open\n"); | 
 | 			return 0; | 
 | 		} | 
 | 		value =simple_strtoul(argv[1], NULL, 10); | 
 | 		return drv->send(value); | 
 | 	} | 
 | 	return CMD_RET_USAGE; | 
 | } | 
 |  | 
 | static int do_ir_set(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | 
 | { | 
 | 	struct aml_irblaster_drv_s *drv; | 
 | 	int value; | 
 |  | 
 | 	if (argc != 3) | 
 | 		return CMD_RET_USAGE; | 
 | 	drv = aml_irblaster_get_driver(); | 
 | 	if (!strcmp(argv[1], "protocol")) { | 
 | 		return drv->setprotocol(argv[2]); | 
 | 	} else if(!strcmp(argv[1], "frequency")) { | 
 | 		value = simple_strtoul(argv[2], NULL, 10); | 
 | 		return drv->setfrequency(value); | 
 | 	} else | 
 | 		return CMD_RET_USAGE; | 
 | 	return CMD_RET_SUCCESS; | 
 | } | 
 |  | 
 | static int do_ir_get(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | 
 | { | 
 | 	struct aml_irblaster_drv_s *drv; | 
 | 	int value; | 
 | 	const char *str; | 
 |  | 
 | 	if (argc != 2) | 
 | 		return CMD_RET_USAGE; | 
 | 	drv = aml_irblaster_get_driver(); | 
 | 	if (!strcmp(argv[1], "protocol")) { | 
 | 		str = drv->getprocotol(); | 
 | 		printf("procotol=%s\n", str); | 
 | 	} else if(!strcmp(argv[1], "frequency")) { | 
 | 		value = drv->getfrequency(); | 
 | 		printf("frequency=%d\n", value); | 
 | 	} else if (!strcmp(argv[1], "windows")) { | 
 | 		drv->print_windows(); | 
 | 	}else | 
 | 		return CMD_RET_USAGE; | 
 | 	return CMD_RET_SUCCESS; | 
 | } | 
 |  | 
 | static int do_ir_reg(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | 
 | { | 
 | 	struct aml_irblaster_drv_s *drv; | 
 | 	unsigned int value; | 
 | 	volatile unsigned int *addr; | 
 |  | 
 | 	if (argc != 4) | 
 | 		return CMD_RET_USAGE; | 
 | 	drv = aml_irblaster_get_driver(); | 
 | 	if (!strcmp(argv[1], "write")) { | 
 | 		addr = (volatile unsigned int *)simple_strtoul(argv[2], NULL, 10); | 
 | 		value = simple_strtoul(argv[3], NULL, 10); | 
 | 		drv->write_reg((volatile unsigned int *)addr, value); | 
 | 	} else if(!strcmp(argv[1], "read")) { | 
 | 		addr = (volatile unsigned int *)simple_strtoul(argv[2], NULL, 10); | 
 | 		value = simple_strtoul(argv[3], NULL, 10); | 
 | 		drv->read_reg((volatile unsigned int *)addr, value); | 
 | 		printf("read reg\n"); | 
 | 	} else | 
 | 		return CMD_RET_USAGE; | 
 | 	return CMD_RET_SUCCESS; | 
 | } | 
 |  | 
 |  | 
 | static cmd_tbl_t cmd_ir_sub[] = { | 
 | 	U_BOOT_CMD_MKENT(open, 1, 1, do_ir_open, "", ""), | 
 | 	U_BOOT_CMD_MKENT(close, 1, 1, do_ir_close, "", ""), | 
 | 	U_BOOT_CMD_MKENT(test, 2, 1, do_ir_test, "", ""), | 
 | 	U_BOOT_CMD_MKENT(send, 2, 1, do_ir_send, "", ""), | 
 | 	U_BOOT_CMD_MKENT(set, 3, 1, do_ir_set, "", ""), | 
 | 	U_BOOT_CMD_MKENT(get, 2, 1, do_ir_get, "", ""), | 
 | 	U_BOOT_CMD_MKENT(reg, 4, 1, do_ir_reg, "", ""), | 
 | }; | 
 |  | 
 | static int do_irblaster (cmd_tbl_t *cmdtp, int flag, int argc, | 
 | 	char *const argv[]) | 
 | { | 
 | 	cmd_tbl_t *c; | 
 |  | 
 | 	if (argc < 2) | 
 | 		return CMD_RET_USAGE; | 
 | 	/* Strip off leading 'irblaster' command argument */ | 
 | 	argc--; | 
 | 	argv++; | 
 | 	c = find_cmd_tbl(argv[0], &cmd_ir_sub[0], ARRAY_SIZE(cmd_ir_sub)); | 
 | 	if (c) | 
 | 		return c->cmd(cmdtp, flag, argc, argv); | 
 | 	return CMD_RET_USAGE; | 
 | } | 
 |  | 
 | U_BOOT_CMD(irblaster, 5, 1, do_irblaster, | 
 | 	   "blaster ir signal", | 
 | 	   "send [data]\n" | 
 | 	   "    - blaster data\n" | 
 | 	   "irblaster test [times]\n" | 
 | 	   "    - test will loop blaster data and can't return\n" | 
 | 	   "irblaster open\n" | 
 | 	   "    - open irblaster sub-system\n" | 
 | 	   "irblaster close\n" | 
 | 	   "    - close irblaster sub-system\n" | 
 | 	   "irblaster set <frequency | protocol> [value]\n" | 
 | 	   "    - set irblaster <frequency | protocol> value\n" | 
 | 	   "irblaster get <frequency | protocol | windows>\n" | 
 | 	   "    - get irblaster <frequency(20000<freq<60000) | protocol | windows>" | 
 | 	   " value\n" | 
 | 	   "irblaster reg <write | read> [addr] [value | length]\n" | 
 | 	   ); |