Merge "backlight: qcom-spmi-wled: Add support to configure slew ramp time"

This commit is contained in:
qctecmdr 2021-03-21 03:56:50 -07:00 • committed by Gerrit - the friendly Code Review server
commit 3af6ed8815

View file

@ -183,6 +183,7 @@
#define WLED5_SINK_BRIGHTNESS_SLEW_RATE_CTL_REG 0xb8
#define WLED5_EN_SLEW_CTL BIT(7)
#define WLED5_EN_EXP_LUT BIT(6)
#define WLED5_SLEW_RAMP_TIME_SEL GENMASK(3, 0)
#define WLED5_SINK_DIMMING_EXP_LUT0_LSB_REG 0xc0
#define WLED5_SINK_DIMMING_EXP_LUT0_MSB_REG 0xc1
@ -223,6 +224,7 @@ struct wled_config {
int string_cfg;
int mod_sel;
int cabc_sel;
int slew_ramp_time;
bool en_cabc;
bool ext_pfet_sc_pro_en;
bool auto_calib_enabled;
@ -558,6 +560,17 @@ static int wled_update_status(struct backlight_device *bl)
pr_err("wled enable failed rc:%d\n", rc);
goto unlock_mutex;
}
if (*wled->version == WLED_PM7325B) {
rc = regmap_update_bits(wled->regmap,
wled->sink_addr + WLED5_SINK_BRIGHTNESS_SLEW_RATE_CTL_REG,
WLED5_SLEW_RAMP_TIME_SEL,
wled->cfg.slew_ramp_time);
if (rc < 0) {
pr_err("Failed to write to SLEW_RATE_REGISTER rc:%d\n", rc);
goto unlock_mutex;
}
}
}
if (is_wled5(wled)) {
@ -569,6 +582,16 @@ static int wled_update_status(struct backlight_device *bl)
}
}
} else {
if (*wled->version == WLED_PM7325B) {
rc = regmap_update_bits(wled->regmap,
wled->sink_addr + WLED5_SINK_BRIGHTNESS_SLEW_RATE_CTL_REG,
WLED5_SLEW_RAMP_TIME_SEL, 0);
if (rc < 0) {
pr_err("Failed to write to SLEW_RATE_REGISTER rc:%d\n", rc);
goto unlock_mutex;
}
}
rc = wled_module_enable(wled, brightness);
if (rc < 0) {
pr_err("wled disable failed rc:%d\n", rc);
@ -1305,6 +1328,16 @@ static int wled5_setup(struct wled *wled)
if (rc < 0)
return rc;
if (*wled->version == WLED_PM7325B) {
val = WLED5_EN_SLEW_CTL | wled->cfg.slew_ramp_time;
rc = regmap_update_bits(wled->regmap,
wled->sink_addr + WLED5_SINK_BRIGHTNESS_SLEW_RATE_CTL_REG,
WLED5_EN_SLEW_CTL | WLED5_SLEW_RAMP_TIME_SEL,
val);
if (rc < 0)
return rc;
}
if (wled->cfg.use_exp_dimming) {
rc = wled_program_exp_dimming(wled);
if (rc < 0) {
@ -1485,6 +1518,7 @@ static const struct wled_config wled4_config_defaults = {
.string_cfg = 0xf,
.mod_sel = -EINVAL,
.cabc_sel = -EINVAL,
.slew_ramp_time = -EINVAL,
.en_cabc = 0,
.ext_pfet_sc_pro_en = 0,
.auto_calib_enabled = 0,
@ -1499,6 +1533,7 @@ static const struct wled_config wled5_config_defaults = {
.string_cfg = 0xf,
.mod_sel = 0,
.cabc_sel = 0,
.slew_ramp_time = 6, /* 256 ms */
.en_cabc = 0,
.ext_pfet_sc_pro_en = 0,
.auto_calib_enabled = 0,
@ -1586,6 +1621,17 @@ static const struct wled_var_cfg wled5_cabc_sel_cfg = {
.size = 4,
};
/* Applicable only for PM7325B */
static const u32 wled5_slew_ramp_time_values[] = {
2, 4, 8, 64, 128, 192, 256, 320, 384, 448, 512, 704,
896, 1024, 2048, 4096,
};
static const struct wled_var_cfg wled5_slew_ramp_time_cfg = {
.values = wled5_slew_ramp_time_values,
.size = ARRAY_SIZE(wled5_slew_ramp_time_values),
};
static u32 wled_values(const struct wled_var_cfg *cfg, u32 idx)
{
if (!cfg)
@ -2359,6 +2405,11 @@ static int wled_configure(struct wled *wled, struct device *dev)
.val_ptr = &cfg->cabc_sel,
.cfg = &wled5_cabc_sel_cfg,
},
{
.name = "qcom,slew-ramp-time",
.val_ptr = &cfg->slew_ramp_time,
.cfg = &wled5_slew_ramp_time_cfg,
},
};
const struct {