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

leds: bd2802: Remove work queue

Now the core implements the work queue, remove it from the driver,
and switch to using brightness_set_blocking op.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Cc: Kim Kyuwon <q1.kim@samsung.com>
Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>

authored by

Andrew Lunn and committed by
Jacek Anaszewski
cd042f01 64d44e5a

+14 -25
+14 -25
drivers/leds/leds-bd2802.c
··· 72 72 struct bd2802_led_platform_data *pdata; 73 73 struct i2c_client *client; 74 74 struct rw_semaphore rwsem; 75 - struct work_struct work; 76 75 77 76 struct led_state led[2]; 78 77 ··· 517 518 &bd2802_rgb_current_attr, 518 519 }; 519 520 520 - static void bd2802_led_work(struct work_struct *work) 521 - { 522 - struct bd2802_led *led = container_of(work, struct bd2802_led, work); 523 - 524 - if (led->state) 525 - bd2802_turn_on(led, led->led_id, led->color, led->state); 526 - else 527 - bd2802_turn_off(led, led->led_id, led->color); 528 - } 529 - 530 521 #define BD2802_CONTROL_RGBS(name, id, clr) \ 531 - static void bd2802_set_##name##_brightness(struct led_classdev *led_cdev,\ 522 + static int bd2802_set_##name##_brightness(struct led_classdev *led_cdev,\ 532 523 enum led_brightness value) \ 533 524 { \ 534 525 struct bd2802_led *led = \ 535 526 container_of(led_cdev, struct bd2802_led, cdev_##name); \ 536 527 led->led_id = id; \ 537 528 led->color = clr; \ 538 - if (value == LED_OFF) \ 529 + if (value == LED_OFF) { \ 539 530 led->state = BD2802_OFF; \ 540 - else \ 531 + bd2802_turn_off(led, led->led_id, led->color); \ 532 + } else { \ 541 533 led->state = BD2802_ON; \ 542 - schedule_work(&led->work); \ 534 + bd2802_turn_on(led, led->led_id, led->color, BD2802_ON);\ 535 + } \ 536 + return 0; \ 543 537 } \ 544 538 static int bd2802_set_##name##_blink(struct led_classdev *led_cdev, \ 545 539 unsigned long *delay_on, unsigned long *delay_off) \ ··· 544 552 led->led_id = id; \ 545 553 led->color = clr; \ 546 554 led->state = BD2802_BLINK; \ 547 - schedule_work(&led->work); \ 555 + bd2802_turn_on(led, led->led_id, led->color, BD2802_BLINK); \ 548 556 return 0; \ 549 557 } 550 558 ··· 559 567 { 560 568 int ret; 561 569 562 - INIT_WORK(&led->work, bd2802_led_work); 563 - 564 570 led->cdev_led1r.name = "led1_R"; 565 571 led->cdev_led1r.brightness = LED_OFF; 566 - led->cdev_led1r.brightness_set = bd2802_set_led1r_brightness; 572 + led->cdev_led1r.brightness_set_blocking = bd2802_set_led1r_brightness; 567 573 led->cdev_led1r.blink_set = bd2802_set_led1r_blink; 568 574 569 575 ret = led_classdev_register(&led->client->dev, &led->cdev_led1r); ··· 573 583 574 584 led->cdev_led1g.name = "led1_G"; 575 585 led->cdev_led1g.brightness = LED_OFF; 576 - led->cdev_led1g.brightness_set = bd2802_set_led1g_brightness; 586 + led->cdev_led1g.brightness_set_blocking = bd2802_set_led1g_brightness; 577 587 led->cdev_led1g.blink_set = bd2802_set_led1g_blink; 578 588 579 589 ret = led_classdev_register(&led->client->dev, &led->cdev_led1g); ··· 585 595 586 596 led->cdev_led1b.name = "led1_B"; 587 597 led->cdev_led1b.brightness = LED_OFF; 588 - led->cdev_led1b.brightness_set = bd2802_set_led1b_brightness; 598 + led->cdev_led1b.brightness_set_blocking = bd2802_set_led1b_brightness; 589 599 led->cdev_led1b.blink_set = bd2802_set_led1b_blink; 590 600 591 601 ret = led_classdev_register(&led->client->dev, &led->cdev_led1b); ··· 597 607 598 608 led->cdev_led2r.name = "led2_R"; 599 609 led->cdev_led2r.brightness = LED_OFF; 600 - led->cdev_led2r.brightness_set = bd2802_set_led2r_brightness; 610 + led->cdev_led2r.brightness_set_blocking = bd2802_set_led2r_brightness; 601 611 led->cdev_led2r.blink_set = bd2802_set_led2r_blink; 602 612 603 613 ret = led_classdev_register(&led->client->dev, &led->cdev_led2r); ··· 609 619 610 620 led->cdev_led2g.name = "led2_G"; 611 621 led->cdev_led2g.brightness = LED_OFF; 612 - led->cdev_led2g.brightness_set = bd2802_set_led2g_brightness; 622 + led->cdev_led2g.brightness_set_blocking = bd2802_set_led2g_brightness; 613 623 led->cdev_led2g.blink_set = bd2802_set_led2g_blink; 614 624 615 625 ret = led_classdev_register(&led->client->dev, &led->cdev_led2g); ··· 621 631 622 632 led->cdev_led2b.name = "led2_B"; 623 633 led->cdev_led2b.brightness = LED_OFF; 624 - led->cdev_led2b.brightness_set = bd2802_set_led2b_brightness; 634 + led->cdev_led2b.brightness_set_blocking = bd2802_set_led2b_brightness; 625 635 led->cdev_led2b.blink_set = bd2802_set_led2b_blink; 626 636 led->cdev_led2b.flags |= LED_CORE_SUSPENDRESUME; 627 637 ··· 651 661 652 662 static void bd2802_unregister_led_classdev(struct bd2802_led *led) 653 663 { 654 - cancel_work_sync(&led->work); 655 664 led_classdev_unregister(&led->cdev_led2b); 656 665 led_classdev_unregister(&led->cdev_led2g); 657 666 led_classdev_unregister(&led->cdev_led2r);