• Home
  • Raw
  • Download

Lines Matching refs:tca

263 static void set_select(struct tca6507_chip *tca, int led, int val)  in set_select()  argument
269 int n = tca->reg_file[bit] & ~mask; in set_select()
272 if (tca->reg_file[bit] != n) { in set_select()
273 tca->reg_file[bit] = n; in set_select()
274 tca->reg_set |= (1 << bit); in set_select()
283 static void set_code(struct tca6507_chip *tca, int reg, int bank, int new) in set_code() argument
291 n = tca->reg_file[reg] & ~mask; in set_code()
293 if (tca->reg_file[reg] != n) { in set_code()
294 tca->reg_file[reg] = n; in set_code()
295 tca->reg_set |= 1 << reg; in set_code()
300 static void set_level(struct tca6507_chip *tca, int bank, int level) in set_level() argument
305 set_code(tca, TCA6507_MAX_INTENSITY, bank, level); in set_level()
308 set_code(tca, TCA6507_MASTER_INTENSITY, 0, level); in set_level()
311 tca->bank[bank].level = level; in set_level()
315 static void set_times(struct tca6507_chip *tca, int bank) in set_times() argument
320 result = choose_times(tca->bank[bank].ontime, &c1, &c2); in set_times()
323 dev_dbg(&tca->client->dev, in set_times()
326 c2, time_codes[c2], tca->bank[bank].ontime); in set_times()
327 set_code(tca, TCA6507_FADE_ON, bank, c2); in set_times()
328 set_code(tca, TCA6507_FULL_ON, bank, c1); in set_times()
329 tca->bank[bank].ontime = result; in set_times()
331 result = choose_times(tca->bank[bank].offtime, &c1, &c2); in set_times()
332 dev_dbg(&tca->client->dev, in set_times()
335 c2, time_codes[c2], tca->bank[bank].offtime); in set_times()
336 set_code(tca, TCA6507_FADE_OFF, bank, c2); in set_times()
337 set_code(tca, TCA6507_FIRST_OFF, bank, c1); in set_times()
338 set_code(tca, TCA6507_SECOND_OFF, bank, c1); in set_times()
339 tca->bank[bank].offtime = result; in set_times()
341 set_code(tca, TCA6507_INITIALIZE, bank, INIT_CODE); in set_times()
348 struct tca6507_chip *tca = container_of(work, struct tca6507_chip, in tca6507_work() local
350 struct i2c_client *cl = tca->client; in tca6507_work()
355 spin_lock_irq(&tca->lock); in tca6507_work()
356 set = tca->reg_set; in tca6507_work()
357 memcpy(file, tca->reg_file, TCA6507_REG_CNT); in tca6507_work()
358 tca->reg_set = 0; in tca6507_work()
359 spin_unlock_irq(&tca->lock); in tca6507_work()
369 struct tca6507_chip *tca = led->chip; in led_release() local
371 struct bank *b = tca->bank + led->bank; in led_release()
385 struct tca6507_chip *tca = led->chip; in led_prepare() local
393 set_select(tca, led->num, TCA6507_LS_LED_OFF); in led_prepare()
408 set_select(tca, led->num, TCA6507_LS_LED_ON); in led_prepare()
414 if (tca->bank[i].level == level || in led_prepare()
415 tca->bank[i].level_use == 0) { in led_prepare()
419 d = abs(level - tca->bank[i].level); in led_prepare()
427 set_select(tca, led->num, TCA6507_LS_LED_ON); in led_prepare()
432 if (!tca->bank[best].level_use) in led_prepare()
433 set_level(tca, best, level); in led_prepare()
435 tca->bank[best].level_use++; in led_prepare()
437 set_select(tca, led->num, bank_source[best]); in led_prepare()
438 led->led_cdev.brightness = TO_BRIGHT(tca->bank[best].level); in led_prepare()
453 if (tca->bank[i].level_use == 0) in led_prepare()
456 if (tca->bank[i].level != level) in led_prepare()
463 if (tca->bank[i].time_use == 0) in led_prepare()
467 if (!(tca->bank[i].on_dflt || in led_prepare()
469 tca->bank[i].ontime == led->ontime)) in led_prepare()
473 if (!(tca->bank[i].off_dflt || in led_prepare()
475 tca->bank[i].offtime == led->offtime)) in led_prepare()
487 b = &tca->bank[i]; in led_prepare()
489 set_level(tca, i, level); in led_prepare()
510 set_times(tca, i); in led_prepare()
518 set_select(tca, led->num, blink_source[i]); in led_prepare()
524 struct tca6507_chip *tca = led->chip; in led_assign() local
528 spin_lock_irqsave(&tca->lock, flags); in led_assign()
540 spin_unlock_irqrestore(&tca->lock, flags); in led_assign()
542 if (tca->reg_set) in led_assign()
543 schedule_work(&tca->work); in led_assign()
599 struct tca6507_chip *tca = gpiochip_get_data(gc); in tca6507_gpio_set_value() local
602 spin_lock_irqsave(&tca->lock, flags); in tca6507_gpio_set_value()
607 set_select(tca, tca->gpio_map[offset], in tca6507_gpio_set_value()
609 spin_unlock_irqrestore(&tca->lock, flags); in tca6507_gpio_set_value()
610 if (tca->reg_set) in tca6507_gpio_set_value()
611 schedule_work(&tca->work); in tca6507_gpio_set_value()
622 struct tca6507_chip *tca, in tca6507_probe_gpios() argument
632 tca->gpio_map[gpios] = i; in tca6507_probe_gpios()
639 tca->gpio.label = "gpio-tca6507"; in tca6507_probe_gpios()
640 tca->gpio.ngpio = gpios; in tca6507_probe_gpios()
641 tca->gpio.base = pdata->gpio_base; in tca6507_probe_gpios()
642 tca->gpio.owner = THIS_MODULE; in tca6507_probe_gpios()
643 tca->gpio.direction_output = tca6507_gpio_direction_output; in tca6507_probe_gpios()
644 tca->gpio.set = tca6507_gpio_set_value; in tca6507_probe_gpios()
645 tca->gpio.parent = dev; in tca6507_probe_gpios()
647 tca->gpio.of_node = of_node_get(dev_of_node(dev)); in tca6507_probe_gpios()
649 err = gpiochip_add_data(&tca->gpio, tca); in tca6507_probe_gpios()
651 tca->gpio.ngpio = 0; in tca6507_probe_gpios()
657 static void tca6507_remove_gpio(struct tca6507_chip *tca) in tca6507_remove_gpio() argument
659 if (tca->gpio.ngpio) in tca6507_remove_gpio()
660 gpiochip_remove(&tca->gpio); in tca6507_remove_gpio()
664 struct tca6507_chip *tca, in tca6507_probe_gpios() argument
669 static void tca6507_remove_gpio(struct tca6507_chip *tca) in tca6507_remove_gpio() argument
741 struct tca6507_chip *tca; in tca6507_probe() local
756 tca = devm_kzalloc(dev, sizeof(*tca), GFP_KERNEL); in tca6507_probe()
757 if (!tca) in tca6507_probe()
760 tca->client = client; in tca6507_probe()
761 INIT_WORK(&tca->work, tca6507_work); in tca6507_probe()
762 spin_lock_init(&tca->lock); in tca6507_probe()
763 i2c_set_clientdata(client, tca); in tca6507_probe()
766 struct tca6507_led *l = tca->leds + i; in tca6507_probe()
768 l->chip = tca; in tca6507_probe()
782 err = tca6507_probe_gpios(dev, tca, pdata); in tca6507_probe()
786 tca->reg_set = 0x7f; in tca6507_probe()
787 schedule_work(&tca->work); in tca6507_probe()
792 if (tca->leds[i].led_cdev.name) in tca6507_probe()
793 led_classdev_unregister(&tca->leds[i].led_cdev); in tca6507_probe()
801 struct tca6507_chip *tca = i2c_get_clientdata(client); in tca6507_remove() local
802 struct tca6507_led *tca_leds = tca->leds; in tca6507_remove()
808 tca6507_remove_gpio(tca); in tca6507_remove()
809 cancel_work_sync(&tca->work); in tca6507_remove()