Hi Timo, On Wed, Aug 22, 2012 at 9:50 PM, Timo Kokkonen <timo.t.kokkonen@xxxxxx> wrote: > The ir-rx51 driver calls omap_pm_set_max_mpu_wakeup_lat() in order to > avoid problems that occur when MPU goes to sleep in the middle of > sending an IR code. Without such calls it takes ridiculously long for > the MPU to wake up from a sleep, which distorts the IR signal > completely. > > However, the actual problem is that probably the GP timers are not > able to wake up the MPU at all. That is, adjusting the latency > requirements is not the correct way to solve the issue either. The > reason why this used to work with the original 2.6.28 based N900 > kernel that is shipped with the product is that placing strict latency > requirements prevents the MPU from going to sleep at all. Furthermore, > the only PM layer imlementation available at the moment for OMAP3 > doesn't do anything with the latency requirement placed with > omap_pm_set_max_mpu_wakeup_lat() calls. That is correct. The API to use is the PM QoS API which cpuidle uses to determine the next MPU state based on the allowed latency. > A more appropriate fix for the problem would be to modify the idle > layer so that it does not allow MPU going to too deep sleep modes when > it is expected that the timers need to wake up MPU. The idle layer already uses the PM QoS framework to decide the next MPU state. I think the right solution is to convert from omap_pm_set_max_mpu_wakeup_lat to the PM QoS API. Cf. http://marc.info/?l=linux-omap&m=133968658305580&w=2 for an example of the conversion. > Therefore, it makes sense to actually remove this call entirely from > the ir-rx51 driver as it is both wrong and does nothing useful at the > moment. > > Signed-off-by: Timo Kokkonen <timo.t.kokkonen@xxxxxx> Regards, Jean > --- > arch/arm/mach-omap2/board-rx51-peripherals.c | 2 -- > drivers/media/rc/ir-rx51.c | 9 --------- > include/media/ir-rx51.h | 2 -- > 3 files changed, 13 deletions(-) > > diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c > index ca07264..e0750cb 100644 > --- a/arch/arm/mach-omap2/board-rx51-peripherals.c > +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c > @@ -34,7 +34,6 @@ > #include <plat/gpmc.h> > #include <plat/onenand.h> > #include <plat/gpmc-smc91x.h> > -#include <plat/omap-pm.h> > > #include <mach/board-rx51.h> > > @@ -1227,7 +1226,6 @@ static void __init rx51_init_tsc2005(void) > > #if defined(CONFIG_IR_RX51) || defined(CONFIG_IR_RX51_MODULE) > static struct lirc_rx51_platform_data rx51_lirc_data = { > - .set_max_mpu_wakeup_lat = omap_pm_set_max_mpu_wakeup_lat, > .pwm_timer = 9, /* Use GPT 9 for CIR */ > }; > > diff --git a/drivers/media/rc/ir-rx51.c b/drivers/media/rc/ir-rx51.c > index 7eed541..ac7d3f0 100644 > --- a/drivers/media/rc/ir-rx51.c > +++ b/drivers/media/rc/ir-rx51.c > @@ -267,12 +267,6 @@ static ssize_t lirc_rx51_write(struct file *file, const char *buf, > if (count < WBUF_LEN) > lirc_rx51->wbuf[count] = -1; /* Insert termination mark */ > > - /* > - * Adjust latency requirements so the device doesn't go in too > - * deep sleep states > - */ > - lirc_rx51->pdata->set_max_mpu_wakeup_lat(lirc_rx51->dev, 50); > - > lirc_rx51_on(lirc_rx51); > lirc_rx51->wbuf_index = 1; > pulse_timer_set_timeout(lirc_rx51, lirc_rx51->wbuf[0]); > @@ -292,9 +286,6 @@ static ssize_t lirc_rx51_write(struct file *file, const char *buf, > */ > lirc_rx51_stop_tx(lirc_rx51); > > - /* We can sleep again */ > - lirc_rx51->pdata->set_max_mpu_wakeup_lat(lirc_rx51->dev, -1); > - > return n; > } > > diff --git a/include/media/ir-rx51.h b/include/media/ir-rx51.h > index 104aa89..57523f2 100644 > --- a/include/media/ir-rx51.h > +++ b/include/media/ir-rx51.h > @@ -3,8 +3,6 @@ > > struct lirc_rx51_platform_data { > int pwm_timer; > - > - int(*set_max_mpu_wakeup_lat)(struct device *dev, long t); > }; > > #endif > -- > 1.7.12 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html