leds-lp55xx: use lp55xx common init function - post int
LP5521/5523 chip configuration is replaced with lp55xx common function, lp55xx_post_init_device(). Name change: lp5521/5523_configure() to lp5521/5523_post_init_device() These are called in init function. Register access function Argument type is changed from 'i2c_client' to 'lp55xx_chip'. Use exported R/W functions of lp55xx common driver. Temporary variables in lp5521/5523_init_device() These functions will be removed but temporary variables are needed for blocking build warnings - incompatible pointer. Signed-off-by: Milo(Woogyom) Kim <milo.kim@ti.com> Signed-off-by: Bryan Wu <cooloney@gmail.com>
This commit is contained in:
parent
e3a700d8aa
commit
ffbdccdbba
4 changed files with 42 additions and 22 deletions
|
@ -238,11 +238,9 @@ static int lp5521_set_led_current(struct lp5521_chip *chip, int led, u8 curr)
|
||||||
curr);
|
curr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lp5521_configure(struct i2c_client *client)
|
static int lp5521_post_init_device(struct lp55xx_chip *chip)
|
||||||
{
|
{
|
||||||
struct lp5521_chip *chip = i2c_get_clientdata(client);
|
|
||||||
int ret;
|
int ret;
|
||||||
u8 cfg;
|
|
||||||
u8 val;
|
u8 val;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -251,13 +249,13 @@ static int lp5521_configure(struct i2c_client *client)
|
||||||
* otherwise further access to the R G B channels in the
|
* otherwise further access to the R G B channels in the
|
||||||
* LP5521_REG_ENABLE register will not have any effect - strange!
|
* LP5521_REG_ENABLE register will not have any effect - strange!
|
||||||
*/
|
*/
|
||||||
ret = lp5521_read(client, LP5521_REG_R_CURRENT, &val);
|
ret = lp55xx_read(chip, LP5521_REG_R_CURRENT, &val);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&client->dev, "error in resetting chip\n");
|
dev_err(&chip->cl->dev, "error in resetting chip\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
if (val != LP5521_REG_R_CURR_DEFAULT) {
|
if (val != LP5521_REG_R_CURR_DEFAULT) {
|
||||||
dev_err(&client->dev,
|
dev_err(&chip->cl->dev,
|
||||||
"unexpected data in register (expected 0x%x got 0x%x)\n",
|
"unexpected data in register (expected 0x%x got 0x%x)\n",
|
||||||
LP5521_REG_R_CURR_DEFAULT, val);
|
LP5521_REG_R_CURR_DEFAULT, val);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
@ -266,22 +264,21 @@ static int lp5521_configure(struct i2c_client *client)
|
||||||
usleep_range(10000, 20000);
|
usleep_range(10000, 20000);
|
||||||
|
|
||||||
/* Set all PWMs to direct control mode */
|
/* Set all PWMs to direct control mode */
|
||||||
ret = lp5521_write(client, LP5521_REG_OP_MODE, LP5521_CMD_DIRECT);
|
ret = lp55xx_write(chip, LP5521_REG_OP_MODE, LP5521_CMD_DIRECT);
|
||||||
|
|
||||||
cfg = chip->pdata->update_config ?
|
val = chip->pdata->update_config ?
|
||||||
: (LP5521_PWRSAVE_EN | LP5521_CP_MODE_AUTO | LP5521_R_TO_BATT);
|
: (LP5521_PWRSAVE_EN | LP5521_CP_MODE_AUTO | LP5521_R_TO_BATT);
|
||||||
ret = lp5521_write(client, LP5521_REG_CONFIG, cfg);
|
ret = lp55xx_write(chip, LP5521_REG_CONFIG, val);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
/* Initialize all channels PWM to zero -> leds off */
|
/* Initialize all channels PWM to zero -> leds off */
|
||||||
lp5521_write(client, LP5521_REG_R_PWM, 0);
|
lp55xx_write(chip, LP5521_REG_R_PWM, 0);
|
||||||
lp5521_write(client, LP5521_REG_G_PWM, 0);
|
lp55xx_write(chip, LP5521_REG_G_PWM, 0);
|
||||||
lp5521_write(client, LP5521_REG_B_PWM, 0);
|
lp55xx_write(chip, LP5521_REG_B_PWM, 0);
|
||||||
|
|
||||||
/* Set engines are set to run state when OP_MODE enables engines */
|
/* Set engines are set to run state when OP_MODE enables engines */
|
||||||
ret = lp5521_write(client, LP5521_REG_ENABLE,
|
ret = lp55xx_write(chip, LP5521_REG_ENABLE, LP5521_ENABLE_RUN_PROGRAM);
|
||||||
LP5521_ENABLE_RUN_PROGRAM);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -696,9 +693,10 @@ static void lp5521_deinit_device(struct lp5521_chip *chip);
|
||||||
static int lp5521_init_device(struct lp5521_chip *chip)
|
static int lp5521_init_device(struct lp5521_chip *chip)
|
||||||
{
|
{
|
||||||
struct i2c_client *client = chip->client;
|
struct i2c_client *client = chip->client;
|
||||||
|
struct lp55xx_chip *temp;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = lp5521_configure(client);
|
ret = lp5521_post_init_device(temp);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(&client->dev, "error configuring chip\n");
|
dev_err(&client->dev, "error configuring chip\n");
|
||||||
goto err_config;
|
goto err_config;
|
||||||
|
@ -828,6 +826,7 @@ static struct lp55xx_device_config lp5521_cfg = {
|
||||||
.addr = LP5521_REG_ENABLE,
|
.addr = LP5521_REG_ENABLE,
|
||||||
.val = LP5521_ENABLE_DEFAULT,
|
.val = LP5521_ENABLE_DEFAULT,
|
||||||
},
|
},
|
||||||
|
.post_init_device = lp5521_post_init_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int lp5521_probe(struct i2c_client *client,
|
static int lp5521_probe(struct i2c_client *client,
|
||||||
|
|
|
@ -181,18 +181,18 @@ static int lp5523_read(struct i2c_client *client, u8 reg, u8 *buf)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lp5523_configure(struct i2c_client *client)
|
static int lp5523_post_init_device(struct lp55xx_chip *chip)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret;
|
||||||
|
|
||||||
ret = lp5523_write(client, LP5523_REG_ENABLE, LP5523_ENABLE);
|
ret = lp55xx_write(chip, LP5523_REG_ENABLE, LP5523_ENABLE);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
/* Chip startup time is 500 us, 1 - 2 ms gives some margin */
|
/* Chip startup time is 500 us, 1 - 2 ms gives some margin */
|
||||||
usleep_range(1000, 2000);
|
usleep_range(1000, 2000);
|
||||||
|
|
||||||
ret = lp5523_write(client, LP5523_REG_CONFIG,
|
ret = lp55xx_write(chip, LP5523_REG_CONFIG,
|
||||||
LP5523_AUTO_INC | LP5523_PWR_SAVE |
|
LP5523_AUTO_INC | LP5523_PWR_SAVE |
|
||||||
LP5523_CP_AUTO | LP5523_AUTO_CLK |
|
LP5523_CP_AUTO | LP5523_AUTO_CLK |
|
||||||
LP5523_PWM_PWR_SAVE);
|
LP5523_PWM_PWR_SAVE);
|
||||||
|
@ -200,11 +200,11 @@ static int lp5523_configure(struct i2c_client *client)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
/* turn on all leds */
|
/* turn on all leds */
|
||||||
ret = lp5523_write(client, LP5523_REG_ENABLE_LEDS_MSB, 0x01);
|
ret = lp55xx_write(chip, LP5523_REG_ENABLE_LEDS_MSB, 0x01);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
return lp5523_write(client, LP5523_REG_ENABLE_LEDS_LSB, 0xff);
|
return lp55xx_write(chip, LP5523_REG_ENABLE_LEDS_LSB, 0xff);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lp5523_set_engine_mode(struct lp5523_engine *engine, u8 mode)
|
static int lp5523_set_engine_mode(struct lp5523_engine *engine, u8 mode)
|
||||||
|
@ -888,9 +888,10 @@ static void lp5523_deinit_device(struct lp5523_chip *chip);
|
||||||
static int lp5523_init_device(struct lp5523_chip *chip)
|
static int lp5523_init_device(struct lp5523_chip *chip)
|
||||||
{
|
{
|
||||||
struct i2c_client *client = chip->client;
|
struct i2c_client *client = chip->client;
|
||||||
|
struct lp55xx_chip *temp;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = lp5523_configure(client);
|
ret = lp5523_post_init_device(temp);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(&client->dev, "error configuring chip\n");
|
dev_err(&client->dev, "error configuring chip\n");
|
||||||
goto err_config;
|
goto err_config;
|
||||||
|
@ -923,6 +924,7 @@ static struct lp55xx_device_config lp5523_cfg = {
|
||||||
.addr = LP5523_REG_ENABLE,
|
.addr = LP5523_REG_ENABLE,
|
||||||
.val = LP5523_ENABLE,
|
.val = LP5523_ENABLE,
|
||||||
},
|
},
|
||||||
|
.post_init_device = lp5523_post_init_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int lp5523_probe(struct i2c_client *client,
|
static int lp5523_probe(struct i2c_client *client,
|
||||||
|
|
|
@ -53,6 +53,16 @@ static int lp55xx_detect_device(struct lp55xx_chip *chip)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lp55xx_post_init_device(struct lp55xx_chip *chip)
|
||||||
|
{
|
||||||
|
struct lp55xx_device_config *cfg = chip->cfg;
|
||||||
|
|
||||||
|
if (!cfg->post_init_device)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return cfg->post_init_device(chip);
|
||||||
|
}
|
||||||
|
|
||||||
int lp55xx_write(struct lp55xx_chip *chip, u8 reg, u8 val)
|
int lp55xx_write(struct lp55xx_chip *chip, u8 reg, u8 val)
|
||||||
{
|
{
|
||||||
return i2c_smbus_write_byte_data(chip->cl, reg, val);
|
return i2c_smbus_write_byte_data(chip->cl, reg, val);
|
||||||
|
@ -132,6 +142,11 @@ int lp55xx_init_device(struct lp55xx_chip *chip)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* chip specific initialization */
|
||||||
|
ret = lp55xx_post_init_device(chip);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,10 +32,14 @@ struct lp55xx_reg {
|
||||||
* struct lp55xx_device_config
|
* struct lp55xx_device_config
|
||||||
* @reset : Chip specific reset command
|
* @reset : Chip specific reset command
|
||||||
* @enable : Chip specific enable command
|
* @enable : Chip specific enable command
|
||||||
|
* @post_init_device : Chip specific initialization code
|
||||||
*/
|
*/
|
||||||
struct lp55xx_device_config {
|
struct lp55xx_device_config {
|
||||||
const struct lp55xx_reg reset;
|
const struct lp55xx_reg reset;
|
||||||
const struct lp55xx_reg enable;
|
const struct lp55xx_reg enable;
|
||||||
|
|
||||||
|
/* define if the device has specific initialization process */
|
||||||
|
int (*post_init_device) (struct lp55xx_chip *chip);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue