Lines Matching refs:tca
261 static void set_select(struct tca6507_chip *tca, int led, int val) in set_select() argument
267 int n = tca->reg_file[bit] & ~mask; in set_select()
270 if (tca->reg_file[bit] != n) { in set_select()
271 tca->reg_file[bit] = n; in set_select()
272 tca->reg_set |= (1 << bit); in set_select()
281 static void set_code(struct tca6507_chip *tca, int reg, int bank, int new) in set_code() argument
289 n = tca->reg_file[reg] & ~mask; in set_code()
291 if (tca->reg_file[reg] != n) { in set_code()
292 tca->reg_file[reg] = n; in set_code()
293 tca->reg_set |= 1 << reg; in set_code()
298 static void set_level(struct tca6507_chip *tca, int bank, int level) in set_level() argument
303 set_code(tca, TCA6507_MAX_INTENSITY, bank, level); in set_level()
306 set_code(tca, TCA6507_MASTER_INTENSITY, 0, level); in set_level()
309 tca->bank[bank].level = level; in set_level()
313 static void set_times(struct tca6507_chip *tca, int bank) in set_times() argument
318 result = choose_times(tca->bank[bank].ontime, &c1, &c2); in set_times()
321 dev_dbg(&tca->client->dev, in set_times()
324 c2, time_codes[c2], tca->bank[bank].ontime); in set_times()
325 set_code(tca, TCA6507_FADE_ON, bank, c2); in set_times()
326 set_code(tca, TCA6507_FULL_ON, bank, c1); in set_times()
327 tca->bank[bank].ontime = result; in set_times()
329 result = choose_times(tca->bank[bank].offtime, &c1, &c2); in set_times()
330 dev_dbg(&tca->client->dev, in set_times()
333 c2, time_codes[c2], tca->bank[bank].offtime); in set_times()
334 set_code(tca, TCA6507_FADE_OFF, bank, c2); in set_times()
335 set_code(tca, TCA6507_FIRST_OFF, bank, c1); in set_times()
336 set_code(tca, TCA6507_SECOND_OFF, bank, c1); in set_times()
337 tca->bank[bank].offtime = result; in set_times()
339 set_code(tca, TCA6507_INITIALIZE, bank, INIT_CODE); in set_times()
346 struct tca6507_chip *tca = container_of(work, struct tca6507_chip, in tca6507_work() local
348 struct i2c_client *cl = tca->client; in tca6507_work()
353 spin_lock_irq(&tca->lock); in tca6507_work()
354 set = tca->reg_set; in tca6507_work()
355 memcpy(file, tca->reg_file, TCA6507_REG_CNT); in tca6507_work()
356 tca->reg_set = 0; in tca6507_work()
357 spin_unlock_irq(&tca->lock); in tca6507_work()
367 struct tca6507_chip *tca = led->chip; in led_release() local
369 struct bank *b = tca->bank + led->bank; in led_release()
383 struct tca6507_chip *tca = led->chip; in led_prepare() local
391 set_select(tca, led->num, TCA6507_LS_LED_OFF); in led_prepare()
406 set_select(tca, led->num, TCA6507_LS_LED_ON); in led_prepare()
412 if (tca->bank[i].level == level || in led_prepare()
413 tca->bank[i].level_use == 0) { in led_prepare()
417 d = abs(level - tca->bank[i].level); in led_prepare()
425 set_select(tca, led->num, TCA6507_LS_LED_ON); in led_prepare()
430 if (!tca->bank[best].level_use) in led_prepare()
431 set_level(tca, best, level); in led_prepare()
433 tca->bank[best].level_use++; in led_prepare()
435 set_select(tca, led->num, bank_source[best]); in led_prepare()
436 led->led_cdev.brightness = TO_BRIGHT(tca->bank[best].level); in led_prepare()
451 if (tca->bank[i].level_use == 0) in led_prepare()
454 if (tca->bank[i].level != level) in led_prepare()
461 if (tca->bank[i].time_use == 0) in led_prepare()
465 if (!(tca->bank[i].on_dflt || in led_prepare()
467 tca->bank[i].ontime == led->ontime)) in led_prepare()
471 if (!(tca->bank[i].off_dflt || in led_prepare()
473 tca->bank[i].offtime == led->offtime)) in led_prepare()
485 b = &tca->bank[i]; in led_prepare()
487 set_level(tca, i, level); in led_prepare()
508 set_times(tca, i); in led_prepare()
516 set_select(tca, led->num, blink_source[i]); in led_prepare()
522 struct tca6507_chip *tca = led->chip; in led_assign() local
526 spin_lock_irqsave(&tca->lock, flags); in led_assign()
538 spin_unlock_irqrestore(&tca->lock, flags); in led_assign()
540 if (tca->reg_set) in led_assign()
541 schedule_work(&tca->work); in led_assign()
597 struct tca6507_chip *tca = gpiochip_get_data(gc); in tca6507_gpio_set_value() local
600 spin_lock_irqsave(&tca->lock, flags); in tca6507_gpio_set_value()
605 set_select(tca, tca->gpio_map[offset], in tca6507_gpio_set_value()
607 spin_unlock_irqrestore(&tca->lock, flags); in tca6507_gpio_set_value()
608 if (tca->reg_set) in tca6507_gpio_set_value()
609 schedule_work(&tca->work); in tca6507_gpio_set_value()
620 struct tca6507_chip *tca, in tca6507_probe_gpios() argument
630 tca->gpio_map[gpios] = i; in tca6507_probe_gpios()
637 tca->gpio.label = "gpio-tca6507"; in tca6507_probe_gpios()
638 tca->gpio.ngpio = gpios; in tca6507_probe_gpios()
639 tca->gpio.base = pdata->gpio_base; in tca6507_probe_gpios()
640 tca->gpio.owner = THIS_MODULE; in tca6507_probe_gpios()
641 tca->gpio.direction_output = tca6507_gpio_direction_output; in tca6507_probe_gpios()
642 tca->gpio.set = tca6507_gpio_set_value; in tca6507_probe_gpios()
643 tca->gpio.parent = dev; in tca6507_probe_gpios()
644 err = gpiochip_add_data(&tca->gpio, tca); in tca6507_probe_gpios()
646 tca->gpio.ngpio = 0; in tca6507_probe_gpios()
652 static void tca6507_remove_gpio(struct tca6507_chip *tca) in tca6507_remove_gpio() argument
654 if (tca->gpio.ngpio) in tca6507_remove_gpio()
655 gpiochip_remove(&tca->gpio); in tca6507_remove_gpio()
659 struct tca6507_chip *tca, in tca6507_probe_gpios() argument
664 static void tca6507_remove_gpio(struct tca6507_chip *tca) in tca6507_remove_gpio() argument
734 struct tca6507_chip *tca; in tca6507_probe() local
749 tca = devm_kzalloc(dev, sizeof(*tca), GFP_KERNEL); in tca6507_probe()
750 if (!tca) in tca6507_probe()
753 tca->client = client; in tca6507_probe()
754 INIT_WORK(&tca->work, tca6507_work); in tca6507_probe()
755 spin_lock_init(&tca->lock); in tca6507_probe()
756 i2c_set_clientdata(client, tca); in tca6507_probe()
759 struct tca6507_led *l = tca->leds + i; in tca6507_probe()
761 l->chip = tca; in tca6507_probe()
775 err = tca6507_probe_gpios(dev, tca, pdata); in tca6507_probe()
779 tca->reg_set = 0x7f; in tca6507_probe()
780 schedule_work(&tca->work); in tca6507_probe()
785 if (tca->leds[i].led_cdev.name) in tca6507_probe()
786 led_classdev_unregister(&tca->leds[i].led_cdev); in tca6507_probe()
794 struct tca6507_chip *tca = i2c_get_clientdata(client); in tca6507_remove() local
795 struct tca6507_led *tca_leds = tca->leds; in tca6507_remove()
801 tca6507_remove_gpio(tca); in tca6507_remove()
802 cancel_work_sync(&tca->work); in tca6507_remove()