Skip to content

Commit 1ac7fde

Browse files
seanyoungmchehab
authored andcommitted
[media] winbond: wire up rc feedback led
Note that with the rc-feedback trigger, the cir-rx trigger is now redundant. The cir-tx trigger is not used by default; if this functionality is desired then it should exist in rc-core, not in a driver. Also make sure that the led is suspended on suspend. Signed-off-by: Sean Young <sean@mess.org> Signed-off-by: David Härdeman <david@hardeman.nu> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
1 parent 5704e76 commit 1ac7fde

File tree

2 files changed

+6
-33
lines changed

2 files changed

+6
-33
lines changed

drivers/media/rc/Kconfig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,6 @@ config IR_WINBOND_CIR
250250
depends on RC_CORE
251251
select NEW_LEDS
252252
select LEDS_CLASS
253-
select LEDS_TRIGGERS
254253
select BITREVERSE
255254
---help---
256255
Say Y here if you want to use the IR remote functionality found

drivers/media/rc/winbond-cir.c

Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -213,13 +213,11 @@ struct wbcir_data {
213213

214214
/* RX state */
215215
enum wbcir_rxstate rxstate;
216-
struct led_trigger *rxtrigger;
217216
int carrier_report_enabled;
218217
u32 pulse_duration;
219218

220219
/* TX state */
221220
enum wbcir_txstate txstate;
222-
struct led_trigger *txtrigger;
223221
u32 txlen;
224222
u32 txoff;
225223
u32 *txbuf;
@@ -366,14 +364,11 @@ wbcir_idle_rx(struct rc_dev *dev, bool idle)
366364
{
367365
struct wbcir_data *data = dev->priv;
368366

369-
if (!idle && data->rxstate == WBCIR_RXSTATE_INACTIVE) {
367+
if (!idle && data->rxstate == WBCIR_RXSTATE_INACTIVE)
370368
data->rxstate = WBCIR_RXSTATE_ACTIVE;
371-
led_trigger_event(data->rxtrigger, LED_FULL);
372-
}
373369

374370
if (idle && data->rxstate != WBCIR_RXSTATE_INACTIVE) {
375371
data->rxstate = WBCIR_RXSTATE_INACTIVE;
376-
led_trigger_event(data->rxtrigger, LED_OFF);
377372

378373
if (data->carrier_report_enabled)
379374
wbcir_carrier_report(data);
@@ -425,7 +420,6 @@ wbcir_irq_tx(struct wbcir_data *data)
425420
case WBCIR_TXSTATE_INACTIVE:
426421
/* TX FIFO empty */
427422
space = 16;
428-
led_trigger_event(data->txtrigger, LED_FULL);
429423
break;
430424
case WBCIR_TXSTATE_ACTIVE:
431425
/* TX FIFO low (3 bytes or less) */
@@ -464,7 +458,6 @@ wbcir_irq_tx(struct wbcir_data *data)
464458
/* Clear TX underrun bit */
465459
outb(WBCIR_TX_UNDERRUN, data->sbase + WBCIR_REG_SP3_ASCR);
466460
wbcir_set_irqmask(data, WBCIR_IRQ_RX | WBCIR_IRQ_ERR);
467-
led_trigger_event(data->txtrigger, LED_OFF);
468461
kfree(data->txbuf);
469462
data->txbuf = NULL;
470463
data->txstate = WBCIR_TXSTATE_INACTIVE;
@@ -878,15 +871,13 @@ wbcir_shutdown(struct pnp_dev *device)
878871
*/
879872
wbcir_set_irqmask(data, WBCIR_IRQ_NONE);
880873
disable_irq(data->irq);
881-
882-
/* Disable LED */
883-
led_trigger_event(data->rxtrigger, LED_OFF);
884-
led_trigger_event(data->txtrigger, LED_OFF);
885874
}
886875

887876
static int
888877
wbcir_suspend(struct pnp_dev *device, pm_message_t state)
889878
{
879+
struct wbcir_data *data = pnp_get_drvdata(device);
880+
led_classdev_suspend(&data->led);
890881
wbcir_shutdown(device);
891882
return 0;
892883
}
@@ -1015,6 +1006,7 @@ wbcir_resume(struct pnp_dev *device)
10151006

10161007
wbcir_init_hw(data);
10171008
enable_irq(data->irq);
1009+
led_classdev_resume(&data->led);
10181010

10191011
return 0;
10201012
}
@@ -1058,25 +1050,13 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id)
10581050
"(w: 0x%lX, e: 0x%lX, s: 0x%lX, i: %u)\n",
10591051
data->wbase, data->ebase, data->sbase, data->irq);
10601052

1061-
led_trigger_register_simple("cir-tx", &data->txtrigger);
1062-
if (!data->txtrigger) {
1063-
err = -ENOMEM;
1064-
goto exit_free_data;
1065-
}
1066-
1067-
led_trigger_register_simple("cir-rx", &data->rxtrigger);
1068-
if (!data->rxtrigger) {
1069-
err = -ENOMEM;
1070-
goto exit_unregister_txtrigger;
1071-
}
1072-
10731053
data->led.name = "cir::activity";
1074-
data->led.default_trigger = "cir-rx";
1054+
data->led.default_trigger = "rc-feedback";
10751055
data->led.brightness_set = wbcir_led_brightness_set;
10761056
data->led.brightness_get = wbcir_led_brightness_get;
10771057
err = led_classdev_register(&device->dev, &data->led);
10781058
if (err)
1079-
goto exit_unregister_rxtrigger;
1059+
goto exit_free_data;
10801060

10811061
data->dev = rc_allocate_device();
10821062
if (!data->dev) {
@@ -1156,10 +1136,6 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id)
11561136
rc_free_device(data->dev);
11571137
exit_unregister_led:
11581138
led_classdev_unregister(&data->led);
1159-
exit_unregister_rxtrigger:
1160-
led_trigger_unregister_simple(data->rxtrigger);
1161-
exit_unregister_txtrigger:
1162-
led_trigger_unregister_simple(data->txtrigger);
11631139
exit_free_data:
11641140
kfree(data);
11651141
pnp_set_drvdata(device, NULL);
@@ -1187,8 +1163,6 @@ wbcir_remove(struct pnp_dev *device)
11871163

11881164
rc_unregister_device(data->dev);
11891165

1190-
led_trigger_unregister_simple(data->rxtrigger);
1191-
led_trigger_unregister_simple(data->txtrigger);
11921166
led_classdev_unregister(&data->led);
11931167

11941168
/* This is ok since &data->led isn't actually used */

0 commit comments

Comments
 (0)