Lines Matching refs:led
92 static void wm8350_led_enable(struct wm8350_led *led) in wm8350_led_enable() argument
96 if (led->enabled) in wm8350_led_enable()
99 ret = regulator_enable(led->isink); in wm8350_led_enable()
101 dev_err(led->cdev.dev, "Failed to enable ISINK: %d\n", ret); in wm8350_led_enable()
105 ret = regulator_enable(led->dcdc); in wm8350_led_enable()
107 dev_err(led->cdev.dev, "Failed to enable DCDC: %d\n", ret); in wm8350_led_enable()
108 regulator_disable(led->isink); in wm8350_led_enable()
112 led->enabled = 1; in wm8350_led_enable()
115 static void wm8350_led_disable(struct wm8350_led *led) in wm8350_led_disable() argument
119 if (!led->enabled) in wm8350_led_disable()
122 ret = regulator_disable(led->dcdc); in wm8350_led_disable()
124 dev_err(led->cdev.dev, "Failed to disable DCDC: %d\n", ret); in wm8350_led_disable()
128 ret = regulator_disable(led->isink); in wm8350_led_disable()
130 dev_err(led->cdev.dev, "Failed to disable ISINK: %d\n", ret); in wm8350_led_disable()
131 ret = regulator_enable(led->dcdc); in wm8350_led_disable()
133 dev_err(led->cdev.dev, "Failed to reenable DCDC: %d\n", in wm8350_led_disable()
138 led->enabled = 0; in wm8350_led_disable()
143 struct wm8350_led *led = container_of(work, struct wm8350_led, work); in led_work() local
148 mutex_lock(&led->mutex); in led_work()
150 spin_lock_irqsave(&led->value_lock, flags); in led_work()
152 if (led->value == LED_OFF) { in led_work()
153 spin_unlock_irqrestore(&led->value_lock, flags); in led_work()
154 wm8350_led_disable(led); in led_work()
163 uA = (led->max_uA_index * led->value) / LED_FULL; in led_work()
164 spin_unlock_irqrestore(&led->value_lock, flags); in led_work()
167 ret = regulator_set_current_limit(led->isink, isink_cur[uA], in led_work()
170 dev_err(led->cdev.dev, "Failed to set %duA: %d\n", in led_work()
173 wm8350_led_enable(led); in led_work()
176 mutex_unlock(&led->mutex); in led_work()
182 struct wm8350_led *led = to_wm8350_led(led_cdev); in wm8350_led_set() local
185 spin_lock_irqsave(&led->value_lock, flags); in wm8350_led_set()
186 led->value = value; in wm8350_led_set()
187 schedule_work(&led->work); in wm8350_led_set()
188 spin_unlock_irqrestore(&led->value_lock, flags); in wm8350_led_set()
193 struct wm8350_led *led = platform_get_drvdata(pdev); in wm8350_led_shutdown() local
195 mutex_lock(&led->mutex); in wm8350_led_shutdown()
196 led->value = LED_OFF; in wm8350_led_shutdown()
197 wm8350_led_disable(led); in wm8350_led_shutdown()
198 mutex_unlock(&led->mutex); in wm8350_led_shutdown()
204 struct wm8350_led *led; in wm8350_led_probe() local
231 led = devm_kzalloc(&pdev->dev, sizeof(*led), GFP_KERNEL); in wm8350_led_probe()
232 if (led == NULL) in wm8350_led_probe()
235 led->cdev.brightness_set = wm8350_led_set; in wm8350_led_probe()
236 led->cdev.default_trigger = pdata->default_trigger; in wm8350_led_probe()
237 led->cdev.name = pdata->name; in wm8350_led_probe()
238 led->cdev.flags |= LED_CORE_SUSPENDRESUME; in wm8350_led_probe()
239 led->enabled = regulator_is_enabled(isink); in wm8350_led_probe()
240 led->isink = isink; in wm8350_led_probe()
241 led->dcdc = dcdc; in wm8350_led_probe()
246 led->max_uA_index = i; in wm8350_led_probe()
253 spin_lock_init(&led->value_lock); in wm8350_led_probe()
254 mutex_init(&led->mutex); in wm8350_led_probe()
255 INIT_WORK(&led->work, led_work); in wm8350_led_probe()
256 led->value = LED_OFF; in wm8350_led_probe()
257 platform_set_drvdata(pdev, led); in wm8350_led_probe()
259 return led_classdev_register(&pdev->dev, &led->cdev); in wm8350_led_probe()
264 struct wm8350_led *led = platform_get_drvdata(pdev); in wm8350_led_remove() local
266 led_classdev_unregister(&led->cdev); in wm8350_led_remove()
267 flush_work(&led->work); in wm8350_led_remove()
268 wm8350_led_disable(led); in wm8350_led_remove()