On 03/14/2012 09:56 AM, Thierry Reding wrote:
This commit adds very basic support for device tree probing. Currently,
only a PWM and a list of distinct brightness levels can be specified.
Enabling or disabling backlight power via GPIOs is not yet supported.
A pointer to the exit() callback is stored in the driver data to keep it
around until the driver is unloaded.
quoted hunk
+++ b/Documentation/devicetree/bindings/video/backlight/pwm-backlight
+pwm-backlight bindings
+
+Required properties:
+ - compatible: "pwm-backlight"
+ - pwm: OF device-tree PWM specification
+ - num-brightness-levels: number of distinct brightness levels
+ - brightness-levels: array of distinct brightness levels
I assume the values in this array are 0 (darkest/off) to 255 (max
brightness)? The doc should probably specify this.
+ - default-brightness-level: the default brightness level
Likewise, this is an index into the default-brightness-level? Again,
it'd be best to explicitly state this.
...
+ brightness-levels = <0 4 8 16 32 64 128 255>;
+ default-brightness-level = <6>;
+static int pwm_backlight_parse_dt(struct device *dev,
+ struct platform_pwm_backlight_data *data)
...
+ ret = of_property_read_u32(node, "default-brightness-level",
+ &value);
+ if (ret < 0)
+ goto free;
Range-check that against max_brightness?
static int pwm_backlight_probe(struct platform_device *pdev)
...
- pb->pwm = pwm_request(data->pwm_id, "backlight");
- if (IS_ERR(pb->pwm)) {
- dev_err(&pdev->dev, "unable to request PWM for backlight\n");
- ret = PTR_ERR(pb->pwm);
- goto err_alloc;
- } else
- dev_dbg(&pdev->dev, "got pwm for backlight\n");
+ if (!pb->pwm) {
+ pb->pwm = pwm_request(data->pwm_id, "backlight");
+ if (IS_ERR(pb->pwm)) {
+ dev_err(&pdev->dev, "unable to request PWM for backlight\n");
+ ret = PTR_ERR(pb->pwm);
+ goto err_alloc;
+ } else
+ dev_dbg(&pdev->dev, "got pwm for backlight\n");
+ }
Hmmm. It'd be more consistent if pwm_backlight_parse_dt() called
something like of_pwm_get() instead of of_pwm_request(), so that this
code could always call pwm_request() on the PWM and hence operate the
same irrespective of DT vs non-DT. GPIOs work that way at least.