Lines Matching refs:lp
79 static int lp855x_write_byte(struct lp855x *lp, u8 reg, u8 data)
81 return i2c_smbus_write_byte_data(lp->client, reg, data);
84 static int lp855x_update_bit(struct lp855x *lp, u8 reg, u8 mask, u8 data)
89 ret = i2c_smbus_read_byte_data(lp->client, reg);
91 dev_err(lp->dev, "failed to read 0x%.2x\n", reg);
99 return lp855x_write_byte(lp, reg, tmp);
102 static bool lp855x_is_valid_rom_area(struct lp855x *lp, u8 addr)
106 switch (lp->chip_id) {
133 static int lp8557_bl_off(struct lp855x *lp)
136 return lp855x_update_bit(lp, LP8557_BL_CMD, LP8557_BL_MASK,
140 static int lp8557_bl_on(struct lp855x *lp)
143 return lp855x_update_bit(lp, LP8557_BL_CMD, LP8557_BL_MASK,
169 static int lp855x_configure(struct lp855x *lp)
173 struct lp855x_platform_data *pd = lp->pdata;
175 if (lp->cfg->pre_init_device) {
176 ret = lp->cfg->pre_init_device(lp);
178 dev_err(lp->dev, "pre init device err: %d\n", ret);
184 ret = lp855x_write_byte(lp, lp->cfg->reg_brightness, val);
189 ret = lp855x_write_byte(lp, lp->cfg->reg_devicectrl, val);
197 if (!lp855x_is_valid_rom_area(lp, addr))
200 ret = lp855x_write_byte(lp, addr, val);
206 if (lp->cfg->post_init_device) {
207 ret = lp->cfg->post_init_device(lp);
209 dev_err(lp->dev, "post init device err: %d\n", ret);
220 static int lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br)
224 if (lp->needs_pwm_init) {
225 pwm_init_state(lp->pwm, &state);
227 if (lp->pdata->period_ns > 0)
228 state.period = lp->pdata->period_ns;
229 lp->needs_pwm_init = false;
231 pwm_get_state(lp->pwm, &state);
237 return pwm_apply_state(lp->pwm, &state);
242 struct lp855x *lp = bl_get_data(bl);
248 if (lp->mode == PWM_BASED)
249 return lp855x_pwm_ctrl(lp, brightness,
251 else if (lp->mode == REGISTER_BASED)
252 return lp855x_write_byte(lp, lp->cfg->reg_brightness,
262 static int lp855x_backlight_register(struct lp855x *lp)
266 struct lp855x_platform_data *pdata = lp->pdata;
278 bl = devm_backlight_device_register(lp->dev, name, lp->dev, lp,
283 lp->bl = bl;
291 struct lp855x *lp = dev_get_drvdata(dev);
293 return scnprintf(buf, PAGE_SIZE, "%s\n", lp->chipname);
299 struct lp855x *lp = dev_get_drvdata(dev);
302 if (lp->mode == PWM_BASED)
304 else if (lp->mode == REGISTER_BASED)
324 static int lp855x_parse_dt(struct lp855x *lp)
326 struct device *dev = lp->dev;
328 struct lp855x_platform_data *pdata = lp->pdata;
366 static int lp855x_parse_dt(struct lp855x *lp)
372 static int lp855x_parse_acpi(struct lp855x *lp)
381 ret = i2c_smbus_read_byte_data(lp->client, lp->cfg->reg_brightness);
385 lp->pdata->initial_brightness = ret;
387 ret = i2c_smbus_read_byte_data(lp->client, lp->cfg->reg_devicectrl);
391 lp->pdata->device_control = ret;
400 struct lp855x *lp;
406 lp = devm_kzalloc(dev, sizeof(struct lp855x), GFP_KERNEL);
407 if (!lp)
410 lp->client = cl;
411 lp->dev = dev;
412 lp->pdata = dev_get_platdata(dev);
415 lp->chipname = id->name;
416 lp->chip_id = id->driver_data;
422 lp->chipname = acpi_id->id;
423 lp->chip_id = acpi_id->driver_data;
426 switch (lp->chip_id) {
432 lp->cfg = &lp855x_dev_cfg;
436 lp->cfg = &lp8557_dev_cfg;
442 if (!lp->pdata) {
443 lp->pdata = devm_kzalloc(dev, sizeof(*lp->pdata), GFP_KERNEL);
444 if (!lp->pdata)
448 ret = lp855x_parse_dt(lp);
452 ret = lp855x_parse_acpi(lp);
458 lp->supply = devm_regulator_get(dev, "power");
459 if (IS_ERR(lp->supply)) {
460 if (PTR_ERR(lp->supply) == -EPROBE_DEFER)
462 lp->supply = NULL;
465 lp->enable = devm_regulator_get_optional(dev, "enable");
466 if (IS_ERR(lp->enable)) {
467 ret = PTR_ERR(lp->enable);
469 lp->enable = NULL;
474 lp->pwm = devm_pwm_get(lp->dev, lp->chipname);
475 if (IS_ERR(lp->pwm)) {
476 ret = PTR_ERR(lp->pwm);
478 lp->pwm = NULL;
482 lp->needs_pwm_init = false;
483 lp->mode = REGISTER_BASED;
486 lp->needs_pwm_init = true;
487 lp->mode = PWM_BASED;
491 if (lp->supply) {
492 ret = regulator_enable(lp->supply);
499 if (lp->enable) {
500 ret = regulator_enable(lp->enable);
513 i2c_set_clientdata(cl, lp);
515 ret = lp855x_configure(lp);
521 ret = lp855x_backlight_register(lp);
533 backlight_update_status(lp->bl);
538 if (lp->enable)
539 regulator_disable(lp->enable);
541 if (lp->supply)
542 regulator_disable(lp->supply);
549 struct lp855x *lp = i2c_get_clientdata(cl);
551 lp->bl->props.brightness = 0;
552 backlight_update_status(lp->bl);
553 if (lp->enable)
554 regulator_disable(lp->enable);
555 if (lp->supply)
556 regulator_disable(lp->supply);
557 sysfs_remove_group(&lp->dev->kobj, &lp855x_attr_group);