| #include <common.h> |
| #include <command.h> |
| #include <net.h> |
| #include <jffs2/load_kernel.h> |
| #include <common.h> |
| #include <asm/arch/hardware.h> |
| #include <i2c.h> |
| #include <asm/arch/uart.h> |
| #include <asm/arch/lsp_crpm.h> |
| #include "errno.h" |
| |
| //#if CONFIG_HARDWARE_TEST |
| #if 0 |
| |
| #define TPS65912_I2C_SLAVE_ADDR0 (0x2D) |
| |
| #define TPS65912_REG_ADDR_GPIO3 0x43 |
| #define TPS65912_REG_ADDR_GPIO4 0x44 |
| #define TPS65912_REG_ADDR_GPIO5 0x45 |
| #define GPIO_ODEN_LSH 5 |
| #define GPIO_CFG_LSH 2 |
| #define GPIO_LED_ONOFF_LSH 0 |
| #define GPIO_BIT_SET 1 |
| |
| #if 1 |
| #define TPS65912_BITFVAL(var, lsh) ( (var) << (lsh) ) |
| #define TPS65912_BITFMASK(wid, lsh) ( ((1U << (wid)) - 1) << (lsh) ) |
| #define TPS65912_BITFEXT(var, wid, lsh) ((var & TPS65912_BITFMASK(wid, lsh)) >> (lsh)) |
| |
| #define PMIC_ALL_BITS 0xFF |
| #endif |
| |
| int zDrvPmic_SetRegister(uchar slv_addr, uchar reg_addr, uchar data, uchar mask) |
| { |
| int ret = 0; |
| uchar content =0; |
| |
| // If it is not updating the whole register (8 bits), we need to read |
| // the register first. Then we set the bits and write it back. |
| if ((mask & PMIC_ALL_BITS) ^ PMIC_ALL_BITS) /* 0xFF=0b 1111 1111, mask xx11xxx , */ |
| { |
| ret = i2c_read(0, slv_addr, reg_addr, 8, &content, 1); |
| if (ret != 0) |
| { |
| return ret; |
| } |
| content &= ~mask; |
| content |= data & mask; |
| } |
| else |
| { |
| content = data; |
| } |
| |
| ret = i2c_write(0, slv_addr, reg_addr, 8, &content, 1); |
| if (ret != 0) |
| { |
| return ret; |
| } |
| |
| return ret; |
| } |
| |
| |
| int tcled_init(void) |
| { |
| int ret = 0; |
| uchar slv_addr=0, reg_addr=0, reg_val=0, mask=0; |
| |
| #if 1 /* set led as GPIO */ |
| /* GPIO_3 */ |
| /* ODEN - 1 */ |
| slv_addr = TPS65912_I2C_SLAVE_ADDR0; |
| reg_addr = TPS65912_REG_ADDR_GPIO3; |
| |
| reg_val = TPS65912_BITFVAL(1, GPIO_ODEN_LSH ); /* µÚÒ»¸ö²ÎÊý val = 1;¸ÃλÖÃ1 */ |
| mask = TPS65912_BITFMASK(GPIO_BIT_SET, GPIO_ODEN_LSH); |
| ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask); |
| /* CFG - 1 */ |
| reg_val = TPS65912_BITFVAL(1, GPIO_CFG_LSH); |
| mask = TPS65912_BITFMASK(GPIO_BIT_SET, GPIO_CFG_LSH); |
| ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask); |
| |
| |
| /* GPIO_4 */ |
| /* ODEN - 1 */ |
| slv_addr = TPS65912_I2C_SLAVE_ADDR0; |
| reg_addr = TPS65912_REG_ADDR_GPIO4; |
| |
| reg_val = TPS65912_BITFVAL(1, GPIO_ODEN_LSH ); |
| mask = TPS65912_BITFMASK(GPIO_BIT_SET, GPIO_ODEN_LSH); |
| ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask); |
| /* CFG - 1 */ |
| reg_val = TPS65912_BITFVAL(1, GPIO_CFG_LSH ); |
| mask = TPS65912_BITFMASK(GPIO_BIT_SET, GPIO_CFG_LSH); |
| ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask); |
| |
| |
| /* GPIO_5 */ |
| /* ODEN - 1 */ |
| slv_addr = TPS65912_I2C_SLAVE_ADDR0; |
| reg_addr = TPS65912_REG_ADDR_GPIO5; |
| |
| reg_val = TPS65912_BITFVAL(1, GPIO_ODEN_LSH ); |
| mask = TPS65912_BITFMASK(GPIO_BIT_SET, GPIO_ODEN_LSH); |
| ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask); |
| /* CFG - 1 */ |
| reg_val = TPS65912_BITFVAL(1, GPIO_CFG_LSH); |
| mask = TPS65912_BITFMASK(GPIO_BIT_SET, GPIO_CFG_LSH); |
| ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask); |
| #endif |
| |
| /* set the leds initial status */ |
| /* CLOSE LEDA - RED */ |
| slv_addr = TPS65912_I2C_SLAVE_ADDR0; |
| reg_addr = TPS65912_REG_ADDR_GPIO3; |
| reg_val = TPS65912_BITFVAL(1, GPIO_LED_ONOFF_LSH); |
| mask = TPS65912_BITFMASK(GPIO_BIT_SET, GPIO_LED_ONOFF_LSH); |
| ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask); |
| |
| /* CLOSE LEDB - GREEN */ |
| slv_addr = TPS65912_I2C_SLAVE_ADDR0; |
| reg_addr = TPS65912_REG_ADDR_GPIO4; |
| reg_val = TPS65912_BITFVAL(1, GPIO_LED_ONOFF_LSH); |
| mask = TPS65912_BITFMASK(GPIO_BIT_SET, GPIO_LED_ONOFF_LSH); |
| ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask); |
| |
| /* CLOSE LEDC - BLUE */ |
| slv_addr = TPS65912_I2C_SLAVE_ADDR0; |
| reg_addr = TPS65912_REG_ADDR_GPIO5; |
| reg_val = TPS65912_BITFVAL(1, GPIO_LED_ONOFF_LSH); |
| mask = TPS65912_BITFMASK(GPIO_BIT_SET, GPIO_LED_ONOFF_LSH); |
| ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask); |
| |
| return ret; |
| |
| } |
| |
| int tcled_on(int led_red, int led_green, int led_blue) |
| { |
| int ret = 0; |
| uchar slv_addr=0, reg_addr=0, reg_val=0, mask=0; |
| uchar statusA = 0; |
| uchar statusB = 0; |
| uchar statusC = 0; |
| |
| slv_addr = TPS65912_I2C_SLAVE_ADDR0; |
| |
| statusA = led_red ? 0 : 1; /* led_red=1,±íʾ¿ª£¬ÔòGPIOÉèÖÃΪ0 */ |
| statusB = led_green ? 0 : 1; |
| statusC = led_blue ? 0 : 1; |
| |
| /* LEDA µÄ²Ù×÷ */ |
| slv_addr = TPS65912_I2C_SLAVE_ADDR0; |
| reg_addr = TPS65912_REG_ADDR_GPIO3; |
| reg_val = TPS65912_BITFVAL(statusA, 0); |
| mask = TPS65912_BITFMASK(1, 0); |
| ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask); |
| |
| /* LEDB µÄ²Ù×÷ */ |
| slv_addr = TPS65912_I2C_SLAVE_ADDR0; |
| reg_addr = TPS65912_REG_ADDR_GPIO4; |
| reg_val = TPS65912_BITFVAL(statusB, 0); /* statusB=0:¿ª£¬ =1,¹Ø */ |
| mask = TPS65912_BITFMASK(1, 0); |
| ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask); |
| |
| /* LEDC µÄ²Ù×÷ */ |
| slv_addr = TPS65912_I2C_SLAVE_ADDR0; |
| reg_addr = TPS65912_REG_ADDR_GPIO5; |
| reg_val = TPS65912_BITFVAL(statusB, 0); /* statusB=0:¿ª£¬ =1,¹Ø */ |
| mask = TPS65912_BITFMASK(1, 0); |
| ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask); |
| } |
| |
| void leds_on(void) |
| { |
| tcled_on(1, 0, 0); |
| tcled_on(0, 1, 0); |
| tcled_on(1, 0, 1); |
| udelay(1000000); |
| tcled_on(1, 1, 0); |
| tcled_on(1, 0, 1); |
| tcled_on(0, 1, 1); |
| udelay(1000000); |
| tcled_on(1, 1, 1); |
| tcled_on(0, 0, 0); |
| } |
| |
| |
| int do_test_tcled(void) |
| { |
| tcled_init(); |
| |
| uint8_t i = 10; |
| while( i-- ) |
| { |
| leds_on(); |
| } |
| return 0; |
| } |
| |
| U_BOOT_CMD( |
| test_tcled, CONFIG_SYS_MAXARGS, 0, do_test_tcled, |
| "test_TCled: test_tcled ", |
| "" |
| ); |
| |
| #endif |
| |
| |