blob: 11a3d9b2c2a876dc22df1e3b203d27de8003c5eb [file] [log] [blame]
#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