@@ -218,23 +218,10 @@ static int lp855x_configure(struct lp855x *lp)
218218
219219static void lp855x_pwm_ctrl (struct lp855x * lp , int br , int max_br )
220220{
221- struct pwm_device * pwm ;
222221 struct pwm_state state ;
223222
224- /* request pwm device with the consumer name */
225- if (!lp -> pwm ) {
226- pwm = devm_pwm_get (lp -> dev , lp -> chipname );
227- if (IS_ERR (pwm ))
228- return ;
229-
230- lp -> pwm = pwm ;
231-
232- pwm_init_state (lp -> pwm , & state );
233- } else {
234- pwm_get_state (lp -> pwm , & state );
235- }
223+ pwm_get_state (lp -> pwm , & state );
236224
237- state .period = lp -> pdata -> period_ns ;
238225 state .duty_cycle = div_u64 (br * state .period , max_br );
239226 state .enabled = state .duty_cycle ;
240227
@@ -339,6 +326,7 @@ static int lp855x_parse_dt(struct lp855x *lp)
339326 of_property_read_string (node , "bl-name" , & pdata -> name );
340327 of_property_read_u8 (node , "dev-ctrl" , & pdata -> device_control );
341328 of_property_read_u8 (node , "init-brt" , & pdata -> initial_brightness );
329+ /* Deprecated, specify period in pwms property instead */
342330 of_property_read_u32 (node , "pwm-period" , & pdata -> period_ns );
343331
344332 /* Fill ROM platform data if defined */
@@ -399,6 +387,7 @@ static int lp855x_probe(struct i2c_client *cl)
399387 const struct i2c_device_id * id = i2c_client_get_device_id (cl );
400388 const struct acpi_device_id * acpi_id = NULL ;
401389 struct device * dev = & cl -> dev ;
390+ struct pwm_state pwmstate ;
402391 struct lp855x * lp ;
403392 int ret ;
404393
@@ -457,11 +446,6 @@ static int lp855x_probe(struct i2c_client *cl)
457446 }
458447 }
459448
460- if (lp -> pdata -> period_ns > 0 )
461- lp -> mode = PWM_BASED ;
462- else
463- lp -> mode = REGISTER_BASED ;
464-
465449 lp -> supply = devm_regulator_get (dev , "power" );
466450 if (IS_ERR (lp -> supply )) {
467451 if (PTR_ERR (lp -> supply ) == - EPROBE_DEFER )
@@ -472,11 +456,31 @@ static int lp855x_probe(struct i2c_client *cl)
472456 lp -> enable = devm_regulator_get_optional (dev , "enable" );
473457 if (IS_ERR (lp -> enable )) {
474458 ret = PTR_ERR (lp -> enable );
475- if (ret == - ENODEV ) {
459+ if (ret == - ENODEV )
476460 lp -> enable = NULL ;
477- } else {
461+ else
478462 return dev_err_probe (dev , ret , "getting enable regulator\n" );
479- }
463+ }
464+
465+ lp -> pwm = devm_pwm_get (lp -> dev , lp -> chipname );
466+ if (IS_ERR (lp -> pwm )) {
467+ ret = PTR_ERR (lp -> pwm );
468+ if (ret == - ENODEV || ret == - EINVAL )
469+ lp -> pwm = NULL ;
470+ else
471+ return dev_err_probe (dev , ret , "getting PWM\n" );
472+
473+ lp -> mode = REGISTER_BASED ;
474+ dev_dbg (dev , "mode: register based\n" );
475+ } else {
476+ pwm_init_state (lp -> pwm , & pwmstate );
477+ /* Legacy platform data compatibility */
478+ if (lp -> pdata -> period_ns > 0 )
479+ pwmstate .period = lp -> pdata -> period_ns ;
480+ pwm_apply_state (lp -> pwm , & pwmstate );
481+
482+ lp -> mode = PWM_BASED ;
483+ dev_dbg (dev , "mode: PWM based\n" );
480484 }
481485
482486 if (lp -> supply ) {
0 commit comments