Loading drivers/video/backlight/qcom-spmi-wled.c +51 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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; Loading Loading @@ -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)) { Loading @@ -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); Loading Loading @@ -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) { Loading Loading @@ -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, Loading @@ -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, Loading Loading @@ -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) Loading Loading @@ -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 { Loading Loading
drivers/video/backlight/qcom-spmi-wled.c +51 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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; Loading Loading @@ -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)) { Loading @@ -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); Loading Loading @@ -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) { Loading Loading @@ -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, Loading @@ -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, Loading Loading @@ -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) Loading Loading @@ -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 { Loading