Pull backlight updates from Lee Jones: "New Device Support - None New Functionality: - None Core Frameworks: - Reject legacy PWM request for device defined in DT Fix-ups: - Remove unnecessary MODULE_ALIAS(); adp8860_bl, adp8870_bl - Simplify code: pm8941-wled - Supply default-brightness logic; pm8941-wled Bug Fixes: - Clean up OF node; 88pm860x_bl - Ensure struct is zeroed; lp855x_bl" * tag 'backlight-for-linus-4.4' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight: backlight: pm8941-wled: Add default-brightness property backlight: pm8941-wled: Fix ptr_ret.cocci warnings backlight: pwm: Reject legacy PWM request for device defined in DT backlight: 88pm860x_bl: Add missing of_node_put backlight: adp8870: Remove unnecessary MODULE_ALIAS() backlight: adp8860: Remove unnecessary MODULE_ALIAS() backlight: lp855x: Make sure props struct is zeroed
Unified · Split
| @@ -5,6 +5,8 @@ Required properties: · 4 unmodified lines | |||
| 5 | - reg: slave address | 5 | - reg: slave address |
| 6 | 6 | ||
| 7 | Optional properties: | 7 | Optional properties: |
| 8 | - default-brightness: brightness value on boot, value from: 0-4095 | ||
| 9 | default: 2048 | ||
| 8 | - label: The name of the backlight device | 10 | - label: The name of the backlight device |
| 9 | - qcom,cs-out: bool; enable current sink output | 11 | - qcom,cs-out: bool; enable current sink output |
| 10 | - qcom,cabc: bool; enable content adaptive backlight control | 12 | - qcom,cabc: bool; enable content adaptive backlight control |
| @@ -180,6 +180,7 @@ static int pm860x_backlight_dt_init(struct platform_device *pdev, · 179 unmodified lines | |||
| 180 | data->iset = PM8606_WLED_CURRENT(iset); | 180 | data->iset = PM8606_WLED_CURRENT(iset); |
| 181 | of_property_read_u32(np, "marvell,88pm860x-pwm", | 181 | of_property_read_u32(np, "marvell,88pm860x-pwm", |
| 182 | &data->pwm); | 182 | &data->pwm); |
| 183 | of_node_put(np); | ||
| 183 | break; | 184 | break; |
| 184 | } | 185 | } |
| 185 | } | 186 | } |
| @@ -819,4 +819,3 @@ module_i2c_driver(adp8860_driver); · 818 unmodified lines | |||
| 819 | MODULE_LICENSE("GPL v2"); | 819 | MODULE_LICENSE("GPL v2"); |
| 820 | MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>"); | 820 | MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>"); |
| 821 | MODULE_DESCRIPTION("ADP8860 Backlight driver"); | 821 | MODULE_DESCRIPTION("ADP8860 Backlight driver"); |
| 822 | MODULE_ALIAS("i2c:adp8860-backlight"); | ||
| @@ -992,4 +992,3 @@ module_i2c_driver(adp8870_driver); · 991 unmodified lines | |||
| 992 | MODULE_LICENSE("GPL v2"); | 992 | MODULE_LICENSE("GPL v2"); |
| 993 | MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>"); | 993 | MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>"); |
| 994 | MODULE_DESCRIPTION("ADP8870 Backlight driver"); | 994 | MODULE_DESCRIPTION("ADP8870 Backlight driver"); |
| 995 | MODULE_ALIAS("i2c:adp8870-backlight"); | ||
| @@ -283,6 +283,7 @@ static int lp855x_backlight_register(struct lp855x *lp) · 282 unmodified lines | |||
| 283 | struct lp855x_platform_data *pdata = lp->pdata; | 283 | struct lp855x_platform_data *pdata = lp->pdata; |
| 284 | const char *name = pdata->name ? : DEFAULT_BL_NAME; | 284 | const char *name = pdata->name ? : DEFAULT_BL_NAME; |
| 285 | 285 | ||
| 286 | memset(&props, 0, sizeof(props)); | ||
| 286 | props.type = BACKLIGHT_PLATFORM; | 287 | props.type = BACKLIGHT_PLATFORM; |
| 287 | props.max_brightness = MAX_BRIGHTNESS; | 288 | props.max_brightness = MAX_BRIGHTNESS; |
| 288 | 289 | ||
| @@ -17,6 +17,9 @@ · 16 unmodified lines | |||
| 17 | #include <linux/of_device.h> | 17 | #include <linux/of_device.h> |
| 18 | #include <linux/regmap.h> | 18 | #include <linux/regmap.h> |
| 19 | 19 | ||
| 20 | /* From DT binding */ | ||
| 21 | #define PM8941_WLED_DEFAULT_BRIGHTNESS 2048 | ||
| 22 | |||
| 20 | #define PM8941_WLED_REG_VAL_BASE 0x40 | 23 | #define PM8941_WLED_REG_VAL_BASE 0x40 |
| 21 | #define PM8941_WLED_REG_VAL_MAX 0xFFF | 24 | #define PM8941_WLED_REG_VAL_MAX 0xFFF |
| 22 | 25 | ||
| @@ -373,6 +376,7 @@ static int pm8941_wled_probe(struct platform_device *pdev) · 350 unmodified lines | |||
| 373 | struct backlight_device *bl; | 376 | struct backlight_device *bl; |
| 374 | struct pm8941_wled *wled; | 377 | struct pm8941_wled *wled; |
| 375 | struct regmap *regmap; | 378 | struct regmap *regmap; |
| 379 | u32 val; | ||
| 376 | int rc; | 380 | int rc; |
| 377 | 381 | ||
| 378 | regmap = dev_get_regmap(pdev->dev.parent, NULL); | 382 | regmap = dev_get_regmap(pdev->dev.parent, NULL); |
| @@ -395,16 +399,17 @@ static int pm8941_wled_probe(struct platform_device *pdev) · 16 unmodified lines | |||
| 395 | if (rc) | 399 | if (rc) |
| 396 | return rc; | 400 | return rc; |
| 397 | 401 | ||
| 402 | val = PM8941_WLED_DEFAULT_BRIGHTNESS; | ||
| 403 | of_property_read_u32(pdev->dev.of_node, "default-brightness", &val); | ||
| 404 | |||
| 398 | memset(&props, 0, sizeof(struct backlight_properties)); | 405 | memset(&props, 0, sizeof(struct backlight_properties)); |
| 399 | props.type = BACKLIGHT_RAW; | 406 | props.type = BACKLIGHT_RAW; |
| 407 | props.brightness = val; | ||
| 400 | props.max_brightness = PM8941_WLED_REG_VAL_MAX; | 408 | props.max_brightness = PM8941_WLED_REG_VAL_MAX; |
| 401 | bl = devm_backlight_device_register(&pdev->dev, wled->name, | 409 | bl = devm_backlight_device_register(&pdev->dev, wled->name, |
| 402 | &pdev->dev, wled, | 410 | &pdev->dev, wled, |
| 403 | &pm8941_wled_ops, &props); | 411 | &pm8941_wled_ops, &props); |
| 404 | if (IS_ERR(bl)) | 412 | return PTR_ERR_OR_ZERO(bl); |
| 405 | return PTR_ERR(bl); | ||
| 406 | |||
| 407 | return 0; | ||
| 408 | }; | 413 | }; |
| 409 | 414 | ||
| 410 | static const struct of_device_id pm8941_wled_match_table[] = { | 415 | static const struct of_device_id pm8941_wled_match_table[] = { |
| @@ -271,19 +271,18 @@ static int pwm_backlight_probe(struct platform_device *pdev) · 270 unmodified lines | |||
| 271 | } | 271 | } |
| 272 | 272 | ||
| 273 | pb->pwm = devm_pwm_get(&pdev->dev, NULL); | 273 | pb->pwm = devm_pwm_get(&pdev->dev, NULL); |
| 274 | if (IS_ERR(pb->pwm)) { | 274 | if (IS_ERR(pb->pwm) && PTR_ERR(pb->pwm) != -EPROBE_DEFER |
| 275 | ret = PTR_ERR(pb->pwm); | 275 | && !pdev->dev.of_node) { |
| 276 | if (ret == -EPROBE_DEFER) | ||
| 277 | goto err_alloc; | ||
| 278 | |||
| 279 | dev_err(&pdev->dev, "unable to request PWM, trying legacy API\n"); | 276 | dev_err(&pdev->dev, "unable to request PWM, trying legacy API\n"); |
| 280 | pb->legacy = true; | 277 | pb->legacy = true; |
| 281 | pb->pwm = pwm_request(data->pwm_id, "pwm-backlight"); | 278 | pb->pwm = pwm_request(data->pwm_id, "pwm-backlight"); |
| 282 | if (IS_ERR(pb->pwm)) { | 279 | } |
| 283 | dev_err(&pdev->dev, "unable to request legacy PWM\n"); | 280 | |
| 284 | ret = PTR_ERR(pb->pwm); | 281 | if (IS_ERR(pb->pwm)) { |
| 285 | goto err_alloc; | 282 | ret = PTR_ERR(pb->pwm); |
| 286 | } | 283 | if (ret != -EPROBE_DEFER) |
| 284 | dev_err(&pdev->dev, "unable to request PWM\n"); | ||
| 285 | goto err_alloc; | ||
| 287 | } | 286 | } |
| 288 | 287 | ||
| 289 | dev_dbg(&pdev->dev, "got pwm for backlight\n"); | 288 | dev_dbg(&pdev->dev, "got pwm for backlight\n"); |