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: 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>
This commit is contained in:
parent
76fa2a1eff
commit
b54c828bdb
1 changed files with 18 additions and 26 deletions
|
@ -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 = {
|
||||||
.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,
|
||||||
* 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,
|
||||||
/*
|
/*
|
||||||
* 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,
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
* 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,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 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)
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue