Skip to content

Commit

Permalink
backlight: mp3309c: Make use of device properties
Browse files Browse the repository at this point in the history
Convert the module to be property provider agnostic and allow
it to be used on non-OF platforms.

Add mod_devicetable.h include.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: Flavio Suligoi <f.suligoi@asem.it>
Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
Link: https://lore.kernel.org/r/20240208184313.2224579-2-andriy.shevchenko@linux.intel.com
Signed-off-by: Lee Jones <lee@kernel.org>
  • Loading branch information
Andy Shevchenko authored and Lee Jones committed Mar 7, 2024
1 parent 76fa2a1 commit b54c828
Showing 1 changed file with 18 additions and 26 deletions.
44 changes: 18 additions & 26 deletions drivers/video/backlight/mp3309c.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#include <linux/delay.h>
#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/mod_devicetable.h>
#include <linux/property.h>
#include <linux/pwm.h>
#include <linux/regmap.h>

Expand Down Expand Up @@ -199,18 +201,15 @@ static const struct backlight_ops mp3309c_bl_ops = {
.update_status = mp3309c_bl_update_status,
};

static int pm3309c_parse_dt_node(struct mp3309c_chip *chip,
struct mp3309c_platform_data *pdata)
static int mp3309c_parse_fwnode(struct mp3309c_chip *chip,
struct mp3309c_platform_data *pdata)
{
struct device_node *node = chip->dev->of_node;
struct property *prop_pwms;
struct property *prop_levels = NULL;
int length = 0;
int ret, i;
unsigned int num_levels, tmp_value;
struct device *dev = chip->dev;

if (!node) {
dev_err(chip->dev, "failed to get DT node\n");
if (!dev_fwnode(dev)) {
dev_err(dev, "failed to get firmware node\n");
return -ENODEV;
}

Expand All @@ -224,8 +223,7 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip,
* found in the backlight node, the mode switches to PWM mode.
*/
pdata->dimming_mode = DIMMING_ANALOG_I2C;
prop_pwms = of_find_property(node, "pwms", &length);
if (prop_pwms) {
if (device_property_present(dev, "pwms")) {
chip->pwmd = devm_pwm_get(chip->dev, NULL);
if (IS_ERR(chip->pwmd))
return dev_err_probe(chip->dev, PTR_ERR(chip->pwmd),
Expand Down Expand Up @@ -257,11 +255,9 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip,
/*
* PWM control mode: check for brightness level in DT
*/
prop_levels = of_find_property(node, "brightness-levels",
&length);
if (prop_levels) {
if (device_property_present(dev, "brightness-levels")) {
/* Read brightness levels from DT */
num_levels = length / sizeof(u32);
num_levels = device_property_count_u32(dev, "brightness-levels");
if (num_levels < 2)
return -EINVAL;
} else {
Expand All @@ -275,10 +271,9 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip,
sizeof(*pdata->levels), GFP_KERNEL);
if (!pdata->levels)
return -ENOMEM;
if (prop_levels) {
ret = of_property_read_u32_array(node, "brightness-levels",
pdata->levels,
num_levels);
if (device_property_present(dev, "brightness-levels")) {
ret = device_property_read_u32_array(dev, "brightness-levels",
pdata->levels, num_levels);
if (ret < 0)
return ret;
} else {
Expand All @@ -288,8 +283,7 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip,

pdata->max_brightness = num_levels - 1;

ret = of_property_read_u32(node, "default-brightness",
&pdata->default_brightness);
ret = device_property_read_u32(dev, "default-brightness", &pdata->default_brightness);
if (ret)
pdata->default_brightness = pdata->max_brightness;
if (pdata->default_brightness > pdata->max_brightness) {
Expand All @@ -310,8 +304,8 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip,
* If missing, the default value for OVP is 35.5V
*/
pdata->over_voltage_protection = REG_I2C_1_OVP1;
if (!of_property_read_u32(node, "mps,overvoltage-protection-microvolt",
&tmp_value)) {
ret = device_property_read_u32(dev, "mps,overvoltage-protection-microvolt", &tmp_value);
if (!ret) {
switch (tmp_value) {
case 13500000:
pdata->over_voltage_protection = 0x00;
Expand All @@ -328,9 +322,7 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip,
}

/* Synchronous (default) and non-synchronous mode */
pdata->sync_mode = true;
if (of_property_read_bool(node, "mps,no-sync-mode"))
pdata->sync_mode = false;
pdata->sync_mode = !device_property_read_bool(dev, "mps,no-sync-mode");

return 0;
}
Expand Down Expand Up @@ -366,7 +358,7 @@ static int mp3309c_probe(struct i2c_client *client)
if (!pdata)
return -ENOMEM;

ret = pm3309c_parse_dt_node(chip, pdata);
ret = mp3309c_parse_fwnode(chip, pdata);
if (ret)
return ret;
}
Expand Down

0 comments on commit b54c828

Please sign in to comment.