@@ -218,23 +218,10 @@ static int lp855x_configure(struct lp855x *lp)
218
218
219
219
static void lp855x_pwm_ctrl (struct lp855x * lp , int br , int max_br )
220
220
{
221
- struct pwm_device * pwm ;
222
221
struct pwm_state state ;
223
222
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 );
236
224
237
- state .period = lp -> pdata -> period_ns ;
238
225
state .duty_cycle = div_u64 (br * state .period , max_br );
239
226
state .enabled = state .duty_cycle ;
240
227
@@ -339,6 +326,7 @@ static int lp855x_parse_dt(struct lp855x *lp)
339
326
of_property_read_string (node , "bl-name" , & pdata -> name );
340
327
of_property_read_u8 (node , "dev-ctrl" , & pdata -> device_control );
341
328
of_property_read_u8 (node , "init-brt" , & pdata -> initial_brightness );
329
+ /* Deprecated, specify period in pwms property instead */
342
330
of_property_read_u32 (node , "pwm-period" , & pdata -> period_ns );
343
331
344
332
/* Fill ROM platform data if defined */
@@ -399,6 +387,7 @@ static int lp855x_probe(struct i2c_client *cl)
399
387
const struct i2c_device_id * id = i2c_client_get_device_id (cl );
400
388
const struct acpi_device_id * acpi_id = NULL ;
401
389
struct device * dev = & cl -> dev ;
390
+ struct pwm_state pwmstate ;
402
391
struct lp855x * lp ;
403
392
int ret ;
404
393
@@ -457,11 +446,6 @@ static int lp855x_probe(struct i2c_client *cl)
457
446
}
458
447
}
459
448
460
- if (lp -> pdata -> period_ns > 0 )
461
- lp -> mode = PWM_BASED ;
462
- else
463
- lp -> mode = REGISTER_BASED ;
464
-
465
449
lp -> supply = devm_regulator_get (dev , "power" );
466
450
if (IS_ERR (lp -> supply )) {
467
451
if (PTR_ERR (lp -> supply ) == - EPROBE_DEFER )
@@ -472,11 +456,31 @@ static int lp855x_probe(struct i2c_client *cl)
472
456
lp -> enable = devm_regulator_get_optional (dev , "enable" );
473
457
if (IS_ERR (lp -> enable )) {
474
458
ret = PTR_ERR (lp -> enable );
475
- if (ret == - ENODEV ) {
459
+ if (ret == - ENODEV )
476
460
lp -> enable = NULL ;
477
- } else {
461
+ else
478
462
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" );
480
484
}
481
485
482
486
if (lp -> supply ) {
0 commit comments