static int adp5520_bl_setup(struct backlight_device *bl) { struct adp5520_bl *data = bl_get_data(bl); struct device *master = data->master; struct adp5520_backlight_platfrom_data *pdata = data->pdata; int ret = 0; ret |= adp5520_write(master, DAYLIGHT_MAX, pdata->l1_daylight_max); ret |= adp5520_write(master, DAYLIGHT_DIM, pdata->l1_daylight_dim); if (pdata->en_ambl_sens) { data->cached_daylight_max = pdata->l1_daylight_max; ret |= adp5520_write(master, OFFICE_MAX, pdata->l2_office_max); ret |= adp5520_write(master, OFFICE_DIM, pdata->l2_office_dim); ret |= adp5520_write(master, DARK_MAX, pdata->l3_dark_max); ret |= adp5520_write(master, DARK_DIM, pdata->l3_dark_dim); ret |= adp5520_write(master, L2_TRIP, pdata->l2_trip); ret |= adp5520_write(master, L2_HYS, pdata->l2_hyst); ret |= adp5520_write(master, L3_TRIP, pdata->l3_trip); ret |= adp5520_write(master, L3_HYS, pdata->l3_hyst); ret |= adp5520_write(master, ALS_CMPR_CFG, ALS_CMPR_CFG_VAL(pdata->abml_filt, L3_EN)); } ret |= adp5520_write(master, BL_CONTROL, BL_CTRL_VAL(pdata->fade_led_law, pdata->en_ambl_sens); ret |= adp5520_write(master, BL_FADE, FADE_VAL(pdata->fade_in, pdata->fade_out)); ret |= adp5520_set_bits(master, MODE_STATUS, BL_EN | DIM_EN); return ret; }
static int adp8860_bl_setup(struct backlight_device *bl) { struct adp8860_bl *data = bl_get_data(bl); struct i2c_client *client = data->client; struct adp8860_backlight_platform_data *pdata = data->pdata; int ret = 0; ret |= adp8860_write(client, ADP8860_BLSEN, ~pdata->bl_led_assign); ret |= adp8860_write(client, ADP8860_BLMX1, pdata->l1_daylight_max); ret |= adp8860_write(client, ADP8860_BLDM1, pdata->l1_daylight_dim); if (data->en_ambl_sens) { data->cached_daylight_max = pdata->l1_daylight_max; ret |= adp8860_write(client, ADP8860_BLMX2, pdata->l2_office_max); ret |= adp8860_write(client, ADP8860_BLDM2, pdata->l2_office_dim); ret |= adp8860_write(client, ADP8860_BLMX3, pdata->l3_dark_max); ret |= adp8860_write(client, ADP8860_BLDM3, pdata->l3_dark_dim); ret |= adp8860_write(client, ADP8860_L2_TRP, pdata->l2_trip); ret |= adp8860_write(client, ADP8860_L2_HYS, pdata->l2_hyst); ret |= adp8860_write(client, ADP8860_L3_TRP, pdata->l3_trip); ret |= adp8860_write(client, ADP8860_L3_HYS, pdata->l3_hyst); ret |= adp8860_write(client, ADP8860_CCFG, L2_EN | L3_EN | ALS_CCFG_VAL(pdata->abml_filt)); } ret |= adp8860_write(client, ADP8860_CFGR, BL_CFGR_VAL(pdata->bl_fade_law, 0)); ret |= adp8860_write(client, ADP8860_BLFR, FADE_VAL(pdata->bl_fade_in, pdata->bl_fade_out)); ret |= adp8860_set_bits(client, ADP8860_MDCR, BLEN | DIM_EN | NSTBY | (data->gdwn_dis ? GDWN_DIS : 0)); return ret; }
static int __devinit adp8860_led_probe(struct i2c_client *client) { struct adp8860_backlight_platform_data *pdata = client->dev.platform_data; struct adp8860_bl *data = i2c_get_clientdata(client); struct adp8860_led *led, *led_dat; struct led_info *cur_led; int ret, i; led = kzalloc(sizeof(*led) * pdata->num_leds, GFP_KERNEL); if (led == NULL) { dev_err(&client->dev, "failed to alloc memory\n"); return -ENOMEM; } ret = adp8860_write(client, ADP8860_ISCFR, pdata->led_fade_law); ret = adp8860_write(client, ADP8860_ISCT1, (pdata->led_on_time & 0x3) << 6); ret |= adp8860_write(client, ADP8860_ISCF, FADE_VAL(pdata->led_fade_in, pdata->led_fade_out)); if (ret) { dev_err(&client->dev, "failed to write\n"); goto err_free; } for (i = 0; i < pdata->num_leds; ++i) { cur_led = &pdata->leds[i]; led_dat = &led[i]; led_dat->id = cur_led->flags & ADP8860_FLAG_LED_MASK; if (led_dat->id > 7 || led_dat->id < 1) { dev_err(&client->dev, "Invalid LED ID %d\n", led_dat->id); goto err; } if (pdata->bl_led_assign & (1 << (led_dat->id - 1))) { dev_err(&client->dev, "LED %d used by Backlight\n", led_dat->id); goto err; } led_dat->cdev.name = cur_led->name; led_dat->cdev.default_trigger = cur_led->default_trigger; led_dat->cdev.brightness_set = adp8860_led_set; led_dat->cdev.brightness = LED_OFF; led_dat->flags = cur_led->flags >> FLAG_OFFT_SHIFT; led_dat->client = client; led_dat->new_brightness = LED_OFF; INIT_WORK(&led_dat->work, adp8860_led_work); ret = led_classdev_register(&client->dev, &led_dat->cdev); if (ret) { dev_err(&client->dev, "failed to register LED %d\n", led_dat->id); goto err; } ret = adp8860_led_setup(led_dat); if (ret) { dev_err(&client->dev, "failed to write\n"); i++; goto err; } } data->led = led; return 0; err: for (i = i - 1; i >= 0; --i) { led_classdev_unregister(&led[i].cdev); cancel_work_sync(&led[i].work); } err_free: kfree(led); return ret; }
static int adp8870_bl_setup(struct backlight_device *bl) { struct adp8870_bl *data = bl_get_data(bl); struct i2c_client *client = data->client; struct adp8870_backlight_platform_data *pdata = data->pdata; int ret = 0; ret = adp8870_write(client, ADP8870_BLSEL, ~pdata->bl_led_assign); if (ret) return ret; ret = adp8870_write(client, ADP8870_PWMLED, pdata->pwm_assign); if (ret) return ret; ret = adp8870_write(client, ADP8870_BLMX1, pdata->l1_daylight_max); if (ret) return ret; ret = adp8870_write(client, ADP8870_BLDM1, pdata->l1_daylight_dim); if (ret) return ret; if (pdata->en_ambl_sens) { data->cached_daylight_max = pdata->l1_daylight_max; ret = adp8870_write(client, ADP8870_BLMX2, pdata->l2_bright_max); if (ret) return ret; ret = adp8870_write(client, ADP8870_BLDM2, pdata->l2_bright_dim); if (ret) return ret; ret = adp8870_write(client, ADP8870_BLMX3, pdata->l3_office_max); if (ret) return ret; ret = adp8870_write(client, ADP8870_BLDM3, pdata->l3_office_dim); if (ret) return ret; ret = adp8870_write(client, ADP8870_BLMX4, pdata->l4_indoor_max); if (ret) return ret; ret = adp8870_write(client, ADP8870_BLDM4, pdata->l4_indor_dim); if (ret) return ret; ret = adp8870_write(client, ADP8870_BLMX5, pdata->l5_dark_max); if (ret) return ret; ret = adp8870_write(client, ADP8870_BLDM5, pdata->l5_dark_dim); if (ret) return ret; ret = adp8870_write(client, ADP8870_L2TRP, pdata->l2_trip); if (ret) return ret; ret = adp8870_write(client, ADP8870_L2HYS, pdata->l2_hyst); if (ret) return ret; ret = adp8870_write(client, ADP8870_L3TRP, pdata->l3_trip); if (ret) return ret; ret = adp8870_write(client, ADP8870_L3HYS, pdata->l3_hyst); if (ret) return ret; ret = adp8870_write(client, ADP8870_L4TRP, pdata->l4_trip); if (ret) return ret; ret = adp8870_write(client, ADP8870_L4HYS, pdata->l4_hyst); if (ret) return ret; ret = adp8870_write(client, ADP8870_L5TRP, pdata->l5_trip); if (ret) return ret; ret = adp8870_write(client, ADP8870_L5HYS, pdata->l5_hyst); if (ret) return ret; ret = adp8870_write(client, ADP8870_ALS1_EN, L5_EN | L4_EN | L3_EN | L2_EN); if (ret) return ret; ret = adp8870_write(client, ADP8870_CMP_CTL, ALS_CMPR_CFG_VAL(pdata->abml_filt)); if (ret) return ret; } ret = adp8870_write(client, ADP8870_CFGR, BL_CFGR_VAL(pdata->bl_fade_law, 0)); if (ret) return ret; ret = adp8870_write(client, ADP8870_BLFR, FADE_VAL(pdata->bl_fade_in, pdata->bl_fade_out)); if (ret) return ret; /* * ADP8870 Rev0 requires GDWN_DIS bit set */ ret = adp8870_set_bits(client, ADP8870_MDCR, BLEN | DIM_EN | NSTBY | (data->revid == 0 ? GDWN_DIS : 0)); return ret; }
led = kzalloc(sizeof(*led) * pdata->num_leds, GFP_KERNEL); if (led == NULL) { dev_err(&client->dev, "failed to alloc memory\n"); return -ENOMEM; } ret ); return -ENOMEM; } ret = adp8860_write(client, ADP8860_ISCFR, pdata->led_fade_law); ret = adp8860_write(client, ADP8860_ISCT1, (pdata->led_on_time & 0x3) << 6); ret |= adp8860_write(client, ADP8860_ISCF, FADE_VAL(pdata->led_fade_in, pdata->led_fade_out)); if (ret) { dev_err(&client->dev, "failed to write\n"); return ret; } for (i = 0; i < pdata->num_leds; ++i) { cur_led = &pdata->leds[i]; led_dat = &led[i]; led_dat->id = cur_led->flags & ADP8860_FLAG_LED_MASK; if (led_dat->id > 7 || led_dat->id < 1) { dev_err(&client->dev, "Invalid LED ID %d\n", led_dat->id);