Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

leds: leds-pwm: Convert to use devm_get_pwm

Update the driver to use the new API for requesting pwm so we can take
advantage of the pwm_lookup table to find the correct pwm to be used for the
LED functionality.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Bryan Wu <cooloney@gmail.com>

authored by

Peter Ujfalusi and committed by
Bryan Wu
9ea6cdac 8614fb46

+7 -14
+6 -13
drivers/leds/leds-pwm.c
··· 67 67 cur_led = &pdata->leds[i]; 68 68 led_dat = &leds_data[i]; 69 69 70 - led_dat->pwm = pwm_request(cur_led->pwm_id, 71 - cur_led->name); 70 + led_dat->pwm = devm_pwm_get(&pdev->dev, cur_led->name); 72 71 if (IS_ERR(led_dat->pwm)) { 73 72 ret = PTR_ERR(led_dat->pwm); 74 - dev_err(&pdev->dev, "unable to request PWM %d\n", 75 - cur_led->pwm_id); 73 + dev_err(&pdev->dev, "unable to request PWM for %s\n", 74 + cur_led->name); 76 75 goto err; 77 76 } 78 77 ··· 85 86 led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME; 86 87 87 88 ret = led_classdev_register(&pdev->dev, &led_dat->cdev); 88 - if (ret < 0) { 89 - pwm_free(led_dat->pwm); 89 + if (ret < 0) 90 90 goto err; 91 - } 92 91 } 93 92 94 93 platform_set_drvdata(pdev, leds_data); ··· 95 98 96 99 err: 97 100 if (i > 0) { 98 - for (i = i - 1; i >= 0; i--) { 101 + for (i = i - 1; i >= 0; i--) 99 102 led_classdev_unregister(&leds_data[i].cdev); 100 - pwm_free(leds_data[i].pwm); 101 - } 102 103 } 103 104 104 105 return ret; ··· 110 115 111 116 leds_data = platform_get_drvdata(pdev); 112 117 113 - for (i = 0; i < pdata->num_leds; i++) { 118 + for (i = 0; i < pdata->num_leds; i++) 114 119 led_classdev_unregister(&leds_data[i].cdev); 115 - pwm_free(leds_data[i].pwm); 116 - } 117 120 118 121 return 0; 119 122 }
+1 -1
include/linux/leds_pwm.h
··· 7 7 struct led_pwm { 8 8 const char *name; 9 9 const char *default_trigger; 10 - unsigned pwm_id; 10 + unsigned pwm_id __deprecated; 11 11 u8 active_low; 12 12 unsigned max_brightness; 13 13 unsigned pwm_period_ns;