Lines Matching refs:pwm
159 struct lm8323_pwm pwm[LM8323_NUM_PWMS]; member
363 static void pwm_done(struct lm8323_pwm *pwm) in pwm_done() argument
365 mutex_lock(&pwm->lock); in pwm_done()
366 pwm->running = false; in pwm_done()
367 if (pwm->desired_brightness != pwm->brightness) in pwm_done()
368 schedule_work(&pwm->work); in pwm_done()
369 mutex_unlock(&pwm->lock); in pwm_done()
404 pwm_done(&lm->pwm[i]); in lm8323_irq()
428 static void lm8323_write_pwm_one(struct lm8323_pwm *pwm, int pos, u16 cmd) in lm8323_write_pwm_one() argument
430 lm8323_write(pwm->chip, 4, LM8323_CMD_PWM_WRITE, (pos << 2) | pwm->id, in lm8323_write_pwm_one()
440 static void lm8323_write_pwm(struct lm8323_pwm *pwm, int kill, in lm8323_write_pwm() argument
446 lm8323_write_pwm_one(pwm, i, cmds[i]); in lm8323_write_pwm()
448 lm8323_write_pwm_one(pwm, i++, PWM_END(kill)); in lm8323_write_pwm()
449 lm8323_write(pwm->chip, 2, LM8323_CMD_START_PWM, pwm->id); in lm8323_write_pwm()
450 pwm->running = true; in lm8323_write_pwm()
455 struct lm8323_pwm *pwm = work_to_pwm(work); in lm8323_pwm_work() local
460 mutex_lock(&pwm->lock); in lm8323_pwm_work()
468 if (pwm->running || pwm->desired_brightness == pwm->brightness) in lm8323_pwm_work()
471 kill = (pwm->desired_brightness == 0); in lm8323_pwm_work()
472 up = (pwm->desired_brightness > pwm->brightness); in lm8323_pwm_work()
473 steps = abs(pwm->desired_brightness - pwm->brightness); in lm8323_pwm_work()
479 if ((pwm->fade_time / steps) > (32768 / 512)) { in lm8323_pwm_work()
487 perstep = (hz * pwm->fade_time) / (steps * 1000); in lm8323_pwm_work()
502 lm8323_write_pwm(pwm, kill, num_cmds, pwm_cmds); in lm8323_pwm_work()
503 pwm->brightness = pwm->desired_brightness; in lm8323_pwm_work()
506 mutex_unlock(&pwm->lock); in lm8323_pwm_work()
512 struct lm8323_pwm *pwm = cdev_to_pwm(led_cdev); in lm8323_pwm_set_brightness() local
513 struct lm8323_chip *lm = pwm->chip; in lm8323_pwm_set_brightness()
515 mutex_lock(&pwm->lock); in lm8323_pwm_set_brightness()
516 pwm->desired_brightness = brightness; in lm8323_pwm_set_brightness()
517 mutex_unlock(&pwm->lock); in lm8323_pwm_set_brightness()
520 schedule_work(&pwm->work); in lm8323_pwm_set_brightness()
527 schedule_work(&pwm->work); in lm8323_pwm_set_brightness()
529 lm8323_pwm_work(&pwm->work); in lm8323_pwm_set_brightness()
538 struct lm8323_pwm *pwm = cdev_to_pwm(led_cdev); in lm8323_pwm_show_time() local
540 return sprintf(buf, "%d\n", pwm->fade_time); in lm8323_pwm_show_time()
547 struct lm8323_pwm *pwm = cdev_to_pwm(led_cdev); in lm8323_pwm_store_time() local
555 pwm->fade_time = time; in lm8323_pwm_store_time()
570 struct lm8323_pwm *pwm; in init_pwm() local
574 pwm = &lm->pwm[id - 1]; in init_pwm()
576 pwm->id = id; in init_pwm()
577 pwm->fade_time = 0; in init_pwm()
578 pwm->brightness = 0; in init_pwm()
579 pwm->desired_brightness = 0; in init_pwm()
580 pwm->running = false; in init_pwm()
581 pwm->enabled = false; in init_pwm()
582 INIT_WORK(&pwm->work, lm8323_pwm_work); in init_pwm()
583 mutex_init(&pwm->lock); in init_pwm()
584 pwm->chip = lm; in init_pwm()
587 pwm->cdev.name = name; in init_pwm()
588 pwm->cdev.brightness_set = lm8323_pwm_set_brightness; in init_pwm()
589 pwm->cdev.groups = lm8323_pwm_groups; in init_pwm()
590 if (led_classdev_register(dev, &pwm->cdev) < 0) { in init_pwm()
594 pwm->enabled = true; in init_pwm()
636 int pwm; in lm8323_probe() local
704 for (pwm = 0; pwm < LM8323_NUM_PWMS; pwm++) { in lm8323_probe()
705 err = init_pwm(lm, pwm + 1, &client->dev, in lm8323_probe()
706 pdata->pwm_names[pwm]); in lm8323_probe()
758 while (--pwm >= 0) in lm8323_probe()
759 if (lm->pwm[pwm].enabled) in lm8323_probe()
760 led_classdev_unregister(&lm->pwm[pwm].cdev); in lm8323_probe()
780 if (lm->pwm[i].enabled) in lm8323_remove()
781 led_classdev_unregister(&lm->pwm[i].cdev); in lm8323_remove()
807 if (lm->pwm[i].enabled) in lm8323_suspend()
808 led_classdev_suspend(&lm->pwm[i].cdev); in lm8323_suspend()
824 if (lm->pwm[i].enabled) in lm8323_resume()
825 led_classdev_resume(&lm->pwm[i].cdev); in lm8323_resume()