On Wed, Jul 31, 2013 at 12:00:03AM +0100, Sean Young wrote: >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@xxxxxxxx> Signed-off-by: David Härdeman <david@xxxxxxxxxxx> >--- > drivers/media/rc/Kconfig | 1 - > drivers/media/rc/winbond-cir.c | 38 ++++++-------------------------------- > 2 files changed, 6 insertions(+), 33 deletions(-) > >diff --git a/drivers/media/rc/Kconfig b/drivers/media/rc/Kconfig >index 5a79c33..7fa6b22 100644 >--- a/drivers/media/rc/Kconfig >+++ b/drivers/media/rc/Kconfig >@@ -248,7 +248,6 @@ config IR_WINBOND_CIR > depends on RC_CORE > select NEW_LEDS > select LEDS_CLASS >- select LEDS_TRIGGERS > select BITREVERSE > ---help--- > Say Y here if you want to use the IR remote functionality found >diff --git a/drivers/media/rc/winbond-cir.c b/drivers/media/rc/winbond-cir.c >index 87af2d3..98bd496 100644 >--- a/drivers/media/rc/winbond-cir.c >+++ b/drivers/media/rc/winbond-cir.c >@@ -213,13 +213,11 @@ struct wbcir_data { > > /* RX state */ > enum wbcir_rxstate rxstate; >- struct led_trigger *rxtrigger; > int carrier_report_enabled; > u32 pulse_duration; > > /* TX state */ > enum wbcir_txstate txstate; >- struct led_trigger *txtrigger; > u32 txlen; > u32 txoff; > u32 *txbuf; >@@ -366,14 +364,11 @@ wbcir_idle_rx(struct rc_dev *dev, bool idle) > { > struct wbcir_data *data = dev->priv; > >- if (!idle && data->rxstate == WBCIR_RXSTATE_INACTIVE) { >+ if (!idle && data->rxstate == WBCIR_RXSTATE_INACTIVE) > data->rxstate = WBCIR_RXSTATE_ACTIVE; >- led_trigger_event(data->rxtrigger, LED_FULL); >- } > > if (idle && data->rxstate != WBCIR_RXSTATE_INACTIVE) { > data->rxstate = WBCIR_RXSTATE_INACTIVE; >- led_trigger_event(data->rxtrigger, LED_OFF); > > if (data->carrier_report_enabled) > wbcir_carrier_report(data); >@@ -425,7 +420,6 @@ wbcir_irq_tx(struct wbcir_data *data) > case WBCIR_TXSTATE_INACTIVE: > /* TX FIFO empty */ > space = 16; >- led_trigger_event(data->txtrigger, LED_FULL); > break; > case WBCIR_TXSTATE_ACTIVE: > /* TX FIFO low (3 bytes or less) */ >@@ -464,7 +458,6 @@ wbcir_irq_tx(struct wbcir_data *data) > /* Clear TX underrun bit */ > outb(WBCIR_TX_UNDERRUN, data->sbase + WBCIR_REG_SP3_ASCR); > wbcir_set_irqmask(data, WBCIR_IRQ_RX | WBCIR_IRQ_ERR); >- led_trigger_event(data->txtrigger, LED_OFF); > kfree(data->txbuf); > data->txbuf = NULL; > data->txstate = WBCIR_TXSTATE_INACTIVE; >@@ -878,15 +871,13 @@ finish: > */ > wbcir_set_irqmask(data, WBCIR_IRQ_NONE); > disable_irq(data->irq); >- >- /* Disable LED */ >- led_trigger_event(data->rxtrigger, LED_OFF); >- led_trigger_event(data->txtrigger, LED_OFF); > } > > static int > wbcir_suspend(struct pnp_dev *device, pm_message_t state) > { >+ struct wbcir_data *data = pnp_get_drvdata(device); >+ led_classdev_suspend(&data->led); > wbcir_shutdown(device); > return 0; > } >@@ -1015,6 +1006,7 @@ wbcir_resume(struct pnp_dev *device) > > wbcir_init_hw(data); > enable_irq(data->irq); >+ led_classdev_resume(&data->led); > > return 0; > } >@@ -1058,25 +1050,13 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id) > "(w: 0x%lX, e: 0x%lX, s: 0x%lX, i: %u)\n", > data->wbase, data->ebase, data->sbase, data->irq); > >- led_trigger_register_simple("cir-tx", &data->txtrigger); >- if (!data->txtrigger) { >- err = -ENOMEM; >- goto exit_free_data; >- } >- >- led_trigger_register_simple("cir-rx", &data->rxtrigger); >- if (!data->rxtrigger) { >- err = -ENOMEM; >- goto exit_unregister_txtrigger; >- } >- > data->led.name = "cir::activity"; >- data->led.default_trigger = "cir-rx"; >+ data->led.default_trigger = "rc-feedback"; > data->led.brightness_set = wbcir_led_brightness_set; > data->led.brightness_get = wbcir_led_brightness_get; > err = led_classdev_register(&device->dev, &data->led); > if (err) >- goto exit_unregister_rxtrigger; >+ goto exit_free_data; > > data->dev = rc_allocate_device(); > if (!data->dev) { >@@ -1156,10 +1136,6 @@ exit_free_rc: > rc_free_device(data->dev); > exit_unregister_led: > led_classdev_unregister(&data->led); >-exit_unregister_rxtrigger: >- led_trigger_unregister_simple(data->rxtrigger); >-exit_unregister_txtrigger: >- led_trigger_unregister_simple(data->txtrigger); > exit_free_data: > kfree(data); > pnp_set_drvdata(device, NULL); >@@ -1187,8 +1163,6 @@ wbcir_remove(struct pnp_dev *device) > > rc_unregister_device(data->dev); > >- led_trigger_unregister_simple(data->rxtrigger); >- led_trigger_unregister_simple(data->txtrigger); > led_classdev_unregister(&data->led); > > /* This is ok since &data->led isn't actually used */ >-- >1.8.3.1 > -- David Härdeman -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html