Commit b54c828b authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Lee Jones

backlight: mp3309c: Make use of device properties

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: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: default avatarFlavio Suligoi <f.suligoi@asem.it>
Reviewed-by: default avatarDaniel Thompson <daniel.thompson@linaro.org>
Link: https://lore.kernel.org/r/20240208184313.2224579-2-andriy.shevchenko@linux.intel.comSigned-off-by: default avatarLee Jones <lee@kernel.org>
parent 76fa2a1e
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/gpio/consumer.h> #include <linux/gpio/consumer.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/mod_devicetable.h>
#include <linux/property.h>
#include <linux/pwm.h> #include <linux/pwm.h>
#include <linux/regmap.h> #include <linux/regmap.h>
...@@ -199,18 +201,15 @@ static const struct backlight_ops mp3309c_bl_ops = { ...@@ -199,18 +201,15 @@ static const struct backlight_ops mp3309c_bl_ops = {
.update_status = mp3309c_bl_update_status, .update_status = mp3309c_bl_update_status,
}; };
static int pm3309c_parse_dt_node(struct mp3309c_chip *chip, static int mp3309c_parse_fwnode(struct mp3309c_chip *chip,
struct mp3309c_platform_data *pdata) 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; int ret, i;
unsigned int num_levels, tmp_value; unsigned int num_levels, tmp_value;
struct device *dev = chip->dev;
if (!node) { if (!dev_fwnode(dev)) {
dev_err(chip->dev, "failed to get DT node\n"); dev_err(dev, "failed to get firmware node\n");
return -ENODEV; return -ENODEV;
} }
...@@ -224,8 +223,7 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip, ...@@ -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. * found in the backlight node, the mode switches to PWM mode.
*/ */
pdata->dimming_mode = DIMMING_ANALOG_I2C; pdata->dimming_mode = DIMMING_ANALOG_I2C;
prop_pwms = of_find_property(node, "pwms", &length); if (device_property_present(dev, "pwms")) {
if (prop_pwms) {
chip->pwmd = devm_pwm_get(chip->dev, NULL); chip->pwmd = devm_pwm_get(chip->dev, NULL);
if (IS_ERR(chip->pwmd)) if (IS_ERR(chip->pwmd))
return dev_err_probe(chip->dev, PTR_ERR(chip->pwmd), return dev_err_probe(chip->dev, PTR_ERR(chip->pwmd),
...@@ -257,11 +255,9 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip, ...@@ -257,11 +255,9 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip,
/* /*
* PWM control mode: check for brightness level in DT * PWM control mode: check for brightness level in DT
*/ */
prop_levels = of_find_property(node, "brightness-levels", if (device_property_present(dev, "brightness-levels")) {
&length);
if (prop_levels) {
/* Read brightness levels from DT */ /* Read brightness levels from DT */
num_levels = length / sizeof(u32); num_levels = device_property_count_u32(dev, "brightness-levels");
if (num_levels < 2) if (num_levels < 2)
return -EINVAL; return -EINVAL;
} else { } else {
...@@ -275,10 +271,9 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip, ...@@ -275,10 +271,9 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip,
sizeof(*pdata->levels), GFP_KERNEL); sizeof(*pdata->levels), GFP_KERNEL);
if (!pdata->levels) if (!pdata->levels)
return -ENOMEM; return -ENOMEM;
if (prop_levels) { if (device_property_present(dev, "brightness-levels")) {
ret = of_property_read_u32_array(node, "brightness-levels", ret = device_property_read_u32_array(dev, "brightness-levels",
pdata->levels, pdata->levels, num_levels);
num_levels);
if (ret < 0) if (ret < 0)
return ret; return ret;
} else { } else {
...@@ -288,8 +283,7 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip, ...@@ -288,8 +283,7 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip,
pdata->max_brightness = num_levels - 1; pdata->max_brightness = num_levels - 1;
ret = of_property_read_u32(node, "default-brightness", ret = device_property_read_u32(dev, "default-brightness", &pdata->default_brightness);
&pdata->default_brightness);
if (ret) if (ret)
pdata->default_brightness = pdata->max_brightness; pdata->default_brightness = pdata->max_brightness;
if (pdata->default_brightness > pdata->max_brightness) { if (pdata->default_brightness > pdata->max_brightness) {
...@@ -310,8 +304,8 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip, ...@@ -310,8 +304,8 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip,
* If missing, the default value for OVP is 35.5V * If missing, the default value for OVP is 35.5V
*/ */
pdata->over_voltage_protection = REG_I2C_1_OVP1; pdata->over_voltage_protection = REG_I2C_1_OVP1;
if (!of_property_read_u32(node, "mps,overvoltage-protection-microvolt", ret = device_property_read_u32(dev, "mps,overvoltage-protection-microvolt", &tmp_value);
&tmp_value)) { if (!ret) {
switch (tmp_value) { switch (tmp_value) {
case 13500000: case 13500000:
pdata->over_voltage_protection = 0x00; pdata->over_voltage_protection = 0x00;
...@@ -328,9 +322,7 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip, ...@@ -328,9 +322,7 @@ static int pm3309c_parse_dt_node(struct mp3309c_chip *chip,
} }
/* Synchronous (default) and non-synchronous mode */ /* Synchronous (default) and non-synchronous mode */
pdata->sync_mode = true; pdata->sync_mode = !device_property_read_bool(dev, "mps,no-sync-mode");
if (of_property_read_bool(node, "mps,no-sync-mode"))
pdata->sync_mode = false;
return 0; return 0;
} }
...@@ -366,7 +358,7 @@ static int mp3309c_probe(struct i2c_client *client) ...@@ -366,7 +358,7 @@ static int mp3309c_probe(struct i2c_client *client)
if (!pdata) if (!pdata)
return -ENOMEM; return -ENOMEM;
ret = pm3309c_parse_dt_node(chip, pdata); ret = mp3309c_parse_fwnode(chip, pdata);
if (ret) if (ret)
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment