Skip to content

Commit

Permalink
Merge tag 'backlight-for-linus-4.3' of git://git.kernel.org/pub/scm/l…
Browse files Browse the repository at this point in the history
…inux/kernel/git/lee/backlight

Pull backlight updates from Lee Jones:
 - Stop using LP855X Platform Data to control regulators
 - Move PWM8941 WLED driver into Backlight
 - Remove invalid use of IS_ERR_VALUE() macro
 - Remove duplicate check for NULL data before unregistering
 - Export I2C Device ID structure

* tag 'backlight-for-linus-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight:
  backlight: tosa: Export I2C module alias information
  backlight: lp8788_bl: Delete a check before backlight_device_unregister()
  backlight: sky81452: Remove unneeded use of IS_ERR_VALUE() macro
  backlight: pm8941-wled: Move PM8941 WLED driver to backlight
  backlight: lp855x: Use private data for regulator control
  • Loading branch information
torvalds committed Sep 4, 2015
2 parents 8bd8fd0 + 13d20b3 commit 670c039
Show file tree
Hide file tree
Showing 11 changed files with 62 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@ Required properties:
- reg: slave address

Optional properties:
- label: The label for this led
See Documentation/devicetree/bindings/leds/common.txt
- linux,default-trigger: Default trigger assigned to the LED
See Documentation/devicetree/bindings/leds/common.txt
- label: The name of the backlight device
- qcom,cs-out: bool; enable current sink output
- qcom,cabc: bool; enable content adaptive backlight control
- qcom,ext-gen: bool; use externally generated modulator signal to dim
Expand Down
8 changes: 0 additions & 8 deletions drivers/leds/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -594,14 +594,6 @@ config LEDS_VERSATILE
This option enabled support for the LEDs on the ARM Versatile
and RealView boards. Say Y to enabled these.

config LEDS_PM8941_WLED
tristate "LED support for the Qualcomm PM8941 WLED block"
depends on LEDS_CLASS
select REGMAP
help
This option enables support for the 'White' LED block
on Qualcomm PM8941 PMICs.

comment "LED Triggers"
source "drivers/leds/trigger/Kconfig"

Expand Down
1 change: 0 additions & 1 deletion drivers/leds/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ obj-$(CONFIG_LEDS_BLINKM) += leds-blinkm.o
obj-$(CONFIG_LEDS_SYSCON) += leds-syscon.o
obj-$(CONFIG_LEDS_VERSATILE) += leds-versatile.o
obj-$(CONFIG_LEDS_MENF21BMC) += leds-menf21bmc.o
obj-$(CONFIG_LEDS_PM8941_WLED) += leds-pm8941-wled.o
obj-$(CONFIG_LEDS_KTD2692) += leds-ktd2692.o
obj-$(CONFIG_LEDS_POWERNV) += leds-powernv.o

Expand Down
7 changes: 7 additions & 0 deletions drivers/video/backlight/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,13 @@ config BACKLIGHT_TOSA
If you have an Sharp SL-6000 Zaurus say Y to enable a driver
for its backlight

config BACKLIGHT_PM8941_WLED
tristate "Qualcomm PM8941 WLED Driver"
select REGMAP
help
If you have the Qualcomm PM8941, say Y to enable a driver for the
WLED block.

config BACKLIGHT_SAHARA
tristate "Tabletkiosk Sahara Touch-iT Backlight Driver"
depends on X86
Expand Down
1 change: 1 addition & 0 deletions drivers/video/backlight/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ obj-$(CONFIG_BACKLIGHT_OMAP1) += omap1_bl.o
obj-$(CONFIG_BACKLIGHT_OT200) += ot200_bl.o
obj-$(CONFIG_BACKLIGHT_PANDORA) += pandora_bl.o
obj-$(CONFIG_BACKLIGHT_PCF50633) += pcf50633-backlight.o
obj-$(CONFIG_BACKLIGHT_PM8941_WLED) += pm8941-wled.o
obj-$(CONFIG_BACKLIGHT_PWM) += pwm_bl.o
obj-$(CONFIG_BACKLIGHT_SAHARA) += kb3886_bl.o
obj-$(CONFIG_BACKLIGHT_SKY81452) += sky81452-backlight.o
Expand Down
23 changes: 12 additions & 11 deletions drivers/video/backlight/lp855x_bl.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ struct lp855x {
struct device *dev;
struct lp855x_platform_data *pdata;
struct pwm_device *pwm;
struct regulator *supply; /* regulator for VDD input */
};

static int lp855x_write_byte(struct lp855x *lp, u8 reg, u8 data)
Expand Down Expand Up @@ -378,13 +379,6 @@ static int lp855x_parse_dt(struct lp855x *lp)
pdata->rom_data = &rom[0];
}

pdata->supply = devm_regulator_get(dev, "power");
if (IS_ERR(pdata->supply)) {
if (PTR_ERR(pdata->supply) == -EPROBE_DEFER)
return -EPROBE_DEFER;
pdata->supply = NULL;
}

lp->pdata = pdata;

return 0;
Expand Down Expand Up @@ -425,8 +419,15 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
else
lp->mode = REGISTER_BASED;

if (lp->pdata->supply) {
ret = regulator_enable(lp->pdata->supply);
lp->supply = devm_regulator_get(lp->dev, "power");
if (IS_ERR(lp->supply)) {
if (PTR_ERR(lp->supply) == -EPROBE_DEFER)
return -EPROBE_DEFER;
lp->supply = NULL;
}

if (lp->supply) {
ret = regulator_enable(lp->supply);
if (ret < 0) {
dev_err(&cl->dev, "failed to enable supply: %d\n", ret);
return ret;
Expand Down Expand Up @@ -464,8 +465,8 @@ static int lp855x_remove(struct i2c_client *cl)

lp->bl->props.brightness = 0;
backlight_update_status(lp->bl);
if (lp->pdata->supply)
regulator_disable(lp->pdata->supply);
if (lp->supply)
regulator_disable(lp->supply);
sysfs_remove_group(&lp->dev->kobj, &lp855x_attr_group);

return 0;
Expand Down
3 changes: 1 addition & 2 deletions drivers/video/backlight/lp8788_bl.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,8 +221,7 @@ static void lp8788_backlight_unregister(struct lp8788_bl *bl)
{
struct backlight_device *bl_dev = bl->bl_dev;

if (bl_dev)
backlight_device_unregister(bl_dev);
backlight_device_unregister(bl_dev);
}

static ssize_t lp8788_get_bl_ctl_mode(struct device *dev,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
*/

#include <linux/kernel.h>
#include <linux/leds.h>
#include <linux/backlight.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_device.h>
Expand Down Expand Up @@ -76,30 +76,29 @@ struct pm8941_wled_config {
};

struct pm8941_wled {
const char *name;
struct regmap *regmap;
u16 addr;

struct led_classdev cdev;

struct pm8941_wled_config cfg;
};

static int pm8941_wled_set(struct led_classdev *cdev,
enum led_brightness value)
static int pm8941_wled_update_status(struct backlight_device *bl)
{
struct pm8941_wled *wled;
struct pm8941_wled *wled = bl_get_data(bl);
u16 val = bl->props.brightness;
u8 ctrl = 0;
u16 val;
int rc;
int i;

wled = container_of(cdev, struct pm8941_wled, cdev);
if (bl->props.power != FB_BLANK_UNBLANK ||
bl->props.fb_blank != FB_BLANK_UNBLANK ||
bl->props.state & BL_CORE_FBBLANK)
val = 0;

if (value != 0)
if (val != 0)
ctrl = PM8941_WLED_REG_MOD_EN_BIT;

val = value * PM8941_WLED_REG_VAL_MAX / LED_FULL;

rc = regmap_update_bits(wled->regmap,
wled->addr + PM8941_WLED_REG_MOD_EN,
PM8941_WLED_REG_MOD_EN_MASK, ctrl);
Expand Down Expand Up @@ -128,16 +127,6 @@ static int pm8941_wled_set(struct led_classdev *cdev,
return rc;
}

static void pm8941_wled_set_brightness(struct led_classdev *cdev,
enum led_brightness value)
{
if (pm8941_wled_set(cdev, value)) {
dev_err(cdev->dev, "Unable to set brightness\n");
return;
}
cdev->brightness = value;
}

static int pm8941_wled_setup(struct pm8941_wled *wled)
{
int rc;
Expand Down Expand Up @@ -336,12 +325,9 @@ static int pm8941_wled_configure(struct pm8941_wled *wled, struct device *dev)
}
wled->addr = val;

rc = of_property_read_string(dev->of_node, "label", &wled->cdev.name);
rc = of_property_read_string(dev->of_node, "label", &wled->name);
if (rc)
wled->cdev.name = dev->of_node->name;

wled->cdev.default_trigger = of_get_property(dev->of_node,
"linux,default-trigger", NULL);
wled->name = dev->of_node->name;

*cfg = pm8941_wled_config_defaults;
for (i = 0; i < ARRAY_SIZE(u32_opts); ++i) {
Expand Down Expand Up @@ -377,8 +363,14 @@ static int pm8941_wled_configure(struct pm8941_wled *wled, struct device *dev)
return 0;
}

static const struct backlight_ops pm8941_wled_ops = {
.update_status = pm8941_wled_update_status,
};

static int pm8941_wled_probe(struct platform_device *pdev)
{
struct backlight_properties props;
struct backlight_device *bl;
struct pm8941_wled *wled;
struct regmap *regmap;
int rc;
Expand All @@ -403,13 +395,14 @@ static int pm8941_wled_probe(struct platform_device *pdev)
if (rc)
return rc;

wled->cdev.brightness_set = pm8941_wled_set_brightness;

rc = devm_led_classdev_register(&pdev->dev, &wled->cdev);
if (rc)
return rc;

platform_set_drvdata(pdev, wled);
memset(&props, 0, sizeof(struct backlight_properties));
props.type = BACKLIGHT_RAW;
props.max_brightness = PM8941_WLED_REG_VAL_MAX;
bl = devm_backlight_device_register(&pdev->dev, wled->name,
&pdev->dev, wled,
&pm8941_wled_ops, &props);
if (IS_ERR(bl))
return PTR_ERR(bl);

return 0;
};
Expand All @@ -432,4 +425,3 @@ module_platform_driver(pm8941_wled_driver);

MODULE_DESCRIPTION("pm8941 wled driver");
MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:pm8941-wled");
26 changes: 13 additions & 13 deletions drivers/video/backlight/sky81452-backlight.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ static int sky81452_bl_update_status(struct backlight_device *bd)

if (brightness > 0) {
ret = regmap_write(regmap, SKY81452_REG0, brightness - 1);
if (IS_ERR_VALUE(ret))
if (ret < 0)
return ret;

return regmap_update_bits(regmap, SKY81452_REG1, SKY81452_EN,
Expand All @@ -87,12 +87,12 @@ static ssize_t sky81452_bl_store_enable(struct device *dev,
int ret;

ret = kstrtoul(buf, 16, &value);
if (IS_ERR_VALUE(ret))
if (ret < 0)
return ret;

ret = regmap_update_bits(regmap, SKY81452_REG1, SKY81452_EN,
value << CTZ(SKY81452_EN));
if (IS_ERR_VALUE(ret))
if (ret < 0)
return ret;

return count;
Expand All @@ -108,7 +108,7 @@ static ssize_t sky81452_bl_show_open_short(struct device *dev,

reg = !strcmp(attr->attr.name, "open") ? SKY81452_REG5 : SKY81452_REG4;
ret = regmap_read(regmap, reg, &value);
if (IS_ERR_VALUE(ret))
if (ret < 0)
return ret;

if (value & SKY81452_SHRT) {
Expand Down Expand Up @@ -136,7 +136,7 @@ static ssize_t sky81452_bl_show_fault(struct device *dev,
int ret;

ret = regmap_read(regmap, SKY81452_REG4, &value);
if (IS_ERR_VALUE(ret))
if (ret < 0)
return ret;

*buf = 0;
Expand Down Expand Up @@ -196,7 +196,7 @@ static struct sky81452_bl_platform_data *sky81452_bl_parse_dt(
pdata->gpio_enable = of_get_gpio(np, 0);

ret = of_property_count_u32_elems(np, "led-sources");
if (IS_ERR_VALUE(ret)) {
if (ret < 0) {
pdata->enable = SKY81452_EN >> CTZ(SKY81452_EN);
} else {
num_entry = ret;
Expand All @@ -205,7 +205,7 @@ static struct sky81452_bl_platform_data *sky81452_bl_parse_dt(

ret = of_property_read_u32_array(np, "led-sources", sources,
num_entry);
if (IS_ERR_VALUE(ret)) {
if (ret < 0) {
dev_err(dev, "led-sources node is invalid.\n");
return ERR_PTR(-EINVAL);
}
Expand All @@ -218,12 +218,12 @@ static struct sky81452_bl_platform_data *sky81452_bl_parse_dt(
ret = of_property_read_u32(np,
"skyworks,short-detection-threshold-volt",
&pdata->short_detection_threshold);
if (IS_ERR_VALUE(ret))
if (ret < 0)
pdata->short_detection_threshold = 7;

ret = of_property_read_u32(np, "skyworks,current-limit-mA",
&pdata->boost_current_limit);
if (IS_ERR_VALUE(ret))
if (ret < 0)
pdata->boost_current_limit = 2750;

of_node_put(np);
Expand Down Expand Up @@ -278,14 +278,14 @@ static int sky81452_bl_probe(struct platform_device *pdev)
if (gpio_is_valid(pdata->gpio_enable)) {
ret = devm_gpio_request_one(dev, pdata->gpio_enable,
GPIOF_OUT_INIT_HIGH, "sky81452-en");
if (IS_ERR_VALUE(ret)) {
if (ret < 0) {
dev_err(dev, "failed to request GPIO. err=%d\n", ret);
return ret;
}
}

ret = sky81452_bl_init_device(regmap, pdata);
if (IS_ERR_VALUE(ret)) {
if (ret < 0) {
dev_err(dev, "failed to initialize. err=%d\n", ret);
return ret;
}
Expand All @@ -302,8 +302,8 @@ static int sky81452_bl_probe(struct platform_device *pdev)

platform_set_drvdata(pdev, bd);

ret = sysfs_create_group(&bd->dev.kobj, &sky81452_bl_attr_group);
if (IS_ERR_VALUE(ret)) {
ret = sysfs_create_group(&bd->dev.kobj, &sky81452_bl_attr_group);
if (ret < 0) {
dev_err(dev, "failed to create attribute. err=%d\n", ret);
return ret;
}
Expand Down
1 change: 1 addition & 0 deletions drivers/video/backlight/tosa_bl.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ static const struct i2c_device_id tosa_bl_id[] = {
{ "tosa-bl", 0 },
{ },
};
MODULE_DEVICE_TABLE(i2c, tosa_bl_id);

static struct i2c_driver tosa_bl_driver = {
.driver = {
Expand Down
2 changes: 0 additions & 2 deletions include/linux/platform_data/lp855x.h
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,6 @@ struct lp855x_rom_data {
Only valid when mode is PWM_BASED.
* @size_program : total size of lp855x_rom_data
* @rom_data : list of new eeprom/eprom registers
* @supply : regulator that supplies 3V input
*/
struct lp855x_platform_data {
const char *name;
Expand All @@ -145,7 +144,6 @@ struct lp855x_platform_data {
unsigned int period_ns;
int size_program;
struct lp855x_rom_data *rom_data;
struct regulator *supply;
};

#endif

0 comments on commit 670c039

Please sign in to comment.