Re: [PATCH] ARM: OMAP2+: am33xx: Fix the timer fck clock naming convention

2012-08-26 Thread Vaibhav Hiremath


On 7/17/2012 10:14 AM, Hiremath, Vaibhav wrote:
> On Tue, Jul 17, 2012 at 05:24:39, Paul Walmsley wrote:
>> On Mon, 16 Jul 2012, Vaibhav Hiremath wrote:
>>
>>> With commit ae6df418a21f3a361c5f9b878e32a8aba4e17692
>>> Sub: ARM: OMAP2+: dmtimer: cleanup fclk usage)
>>> The Timer functional clock naming convention has changed from
>>> gptX_fck => timerXfck, and so as the timer init function
>>> in mach-omap2/timer.c.
>>> OMAP4 clocktree also has changed accordingly.
>>>
>>> AM33xx Clock Tree has been merged during rc3-4 timeframe,
>>> before above commit got merged, so similar change is required
>>> for AM33xx as well (Change the gptX_fck => timerX_fck).
>>>
>>> Signed-off-by: Vaibhav Hiremath 
>>
>> Thanks, this looks like 3.6-rc material, right?
>>
>>
> 
> Yes, that's correct.
> 

Tony/Paul,

Ping !!!

Thanks,
Vaibhav

> Thanks,
> Vaibhav
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majord...@vger.kernel.org
> 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 02/23] OMAPDSS: outputs: Create and initialize output instances

2012-08-26 Thread Tomi Valkeinen
On Mon, 2012-08-27 at 11:49 +0530, Archit Taneja wrote:
> On Friday 24 August 2012 06:44 PM, Tomi Valkeinen wrote:
> > On Tue, 2012-08-21 at 11:28 +0530, Archit Taneja wrote:
> >> Create output instances by having an init function in the probes of the 
> >> platform
> >> device drivers for different interfaces. Create a small function for each
> >> interface to initialize the output entity's fields type and id.
> >>
> >> In the probe of each interface driver, the output entities are created 
> >> before
> >> the *_probe_pdata() functions intentionally. This is done to ensure that 
> >> the
> >> output entity is prepared before the panels connected to the output are
> >> registered. We need the output entities to be ready because OMAPDSS will 
> >> try
> >> to make connections between overlays, managers, outputs and devices during 
> >> the
> >> panel's probe.
> >
> > You're referring to the recheck_connections stuff? I have a patch that
> > moves that to omapfb side. But of course it doesn't hurt to initialize
> > the output early.
> 
> I've seen that patch. omapfb would need to take care of connecting 
> outputs to displays, and managers to outputs. This is added in 
> recheck_connections done in a patch #9 of the series.
> 
> The question is whether we want some initial connections made between 
> outputs and displays by DSS, or should that be left completely to 
> omapfb/omapdrm?

Good question. I don't know. Perhaps we should set initial connections
there, as the cases where we have multiple displays per output are quite
rare.

> > We should generally do the initialization in output driver's probe more
> > or less so that we first setup everything related to the output driver,
> > and after that we register the dssdevs. But I think that's what is
> > already done.
> >
> > So, no complaints =).
> 
> Another thing that comes up with delaying the recheck_connections stuff 
> is that we can't assume that at the point of panel driver's probe, there 
> is an output connected to the display. That makes it a bit tricky to 
> call an output function in the panel's probe, since it isn't connected 
> to any output at all. An example is when we request for a VC in 
> taal_probe. Since the panel isn't connected to any output yet, we can't 
> really call a dsi function to request for the VC. This particular case 
> can be solved by requesting VCs only when we enable the panel(probably 
> makes more sense this way), but there might be other situations which 
> could get tricky to tackle.

Right. Well, as you said, we can easily move the stuff from taal's probe
to enable. There shouldn't be any problems to that.

However, this problem is part of the bigger problem that I haven't been
able to solve properly: how to manage the probe/enable stuff for panels.
Everything would be simple and easy if we had just one panel per output,
and we could just get and configure everything at probe. But we can have
multiple panels per output, of which only one can be used at a time...

That's why we currently acquire most of the display resources at enable,
instead of probe.

 Tomi



signature.asc
Description: This is a digitally signed message part


Re: [PATCH 02/23] OMAPDSS: outputs: Create and initialize output instances

2012-08-26 Thread Archit Taneja

On Friday 24 August 2012 06:44 PM, Tomi Valkeinen wrote:

On Tue, 2012-08-21 at 11:28 +0530, Archit Taneja wrote:

Create output instances by having an init function in the probes of the platform
device drivers for different interfaces. Create a small function for each
interface to initialize the output entity's fields type and id.

In the probe of each interface driver, the output entities are created before
the *_probe_pdata() functions intentionally. This is done to ensure that the
output entity is prepared before the panels connected to the output are
registered. We need the output entities to be ready because OMAPDSS will try
to make connections between overlays, managers, outputs and devices during the
panel's probe.


You're referring to the recheck_connections stuff? I have a patch that
moves that to omapfb side. But of course it doesn't hurt to initialize
the output early.


I've seen that patch. omapfb would need to take care of connecting 
outputs to displays, and managers to outputs. This is added in 
recheck_connections done in a patch #9 of the series.


The question is whether we want some initial connections made between 
outputs and displays by DSS, or should that be left completely to 
omapfb/omapdrm?




We should generally do the initialization in output driver's probe more
or less so that we first setup everything related to the output driver,
and after that we register the dssdevs. But I think that's what is
already done.

So, no complaints =).


Another thing that comes up with delaying the recheck_connections stuff 
is that we can't assume that at the point of panel driver's probe, there 
is an output connected to the display. That makes it a bit tricky to 
call an output function in the panel's probe, since it isn't connected 
to any output at all. An example is when we request for a VC in 
taal_probe. Since the panel isn't connected to any output yet, we can't 
really call a dsi function to request for the VC. This particular case 
can be solved by requesting VCs only when we enable the panel(probably 
makes more sense this way), but there might be other situations which 
could get tricky to tackle.





Signed-off-by: Archit Taneja 
---
  drivers/video/omap2/dss/dpi.c  |   20 
  drivers/video/omap2/dss/dsi.c  |   26 --
  drivers/video/omap2/dss/hdmi.c |   18 ++
  drivers/video/omap2/dss/rfbi.c |   19 +++
  drivers/video/omap2/dss/sdi.c  |   20 
  drivers/video/omap2/dss/venc.c |   20 
  6 files changed, 121 insertions(+), 2 deletions(-)

diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
index f260343..4eca2e7 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/omap2/dss/dpi.c
@@ -408,10 +408,30 @@ static void __init dpi_probe_pdata(struct platform_device 
*pdev)
}
  }

+static int __init dpi_init_output(struct platform_device *pdev)
+{
+   struct omap_dss_output *out;
+
+   out = dss_create_output(pdev);
+   if (!out)
+   return -ENOMEM;
+
+   out->id = OMAP_DSS_OUTPUT_DPI;
+   out->type = OMAP_DISPLAY_TYPE_DPI;
+
+   return 0;
+}
+
  static int __init omap_dpi_probe(struct platform_device *pdev)
  {
+   int r;
+
mutex_init(&dpi.lock);

+   r = dpi_init_output(pdev);
+   if (r)
+   return r;
+
dpi_probe_pdata(pdev);

return 0;
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index 659b6cd..22e0873 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -4903,6 +4903,23 @@ static void __init dsi_probe_pdata(struct 
platform_device *dsidev)
}
  }

+static int __init dsi_init_output(struct platform_device *dsidev,
+   struct dsi_data *dsi)
+{
+   struct omap_dss_output *out;
+
+   out = dss_create_output(dsidev);
+   if (!out)
+   return -ENOMEM;
+
+   out->id = dsi->module_id == 0 ?
+   OMAP_DSS_OUTPUT_DSI1 : OMAP_DSS_OUTPUT_DSI2;
+
+   out->type = OMAP_DISPLAY_TYPE_DSI;
+
+   return 0;


As I mentioned in the last email, I think this could be something like:

struct omap_dss_output *out = &dsi->output;

out->pdev = dsidev;
out->id = xxx;
out->type = yyy;
dss_register_output(out);



Right, this is much better, will do it this way.




+}
+
  /* DSI1 HW IP initialisation */
  static int __init omap_dsihw_probe(struct platform_device *dsidev)
  {
@@ -4997,10 +5014,14 @@ static int __init omap_dsihw_probe(struct 
platform_device *dsidev)
else
dsi->num_lanes_supported = 3;

-   dsi_probe_pdata(dsidev);
-
dsi_runtime_put(dsidev);

+   r = dsi_init_output(dsidev, dsi);
+   if (r)
+   goto err_init_output;
+
+   dsi_probe_pdata(dsidev);
+


Why do you change the sequence here? Isn't it enough to just add the
init_output before probe_pdata?


Yes, I think I didn't

[PATCH] ARM: OMAP2+: select PINCTRL in Kconfig

2012-08-26 Thread AnilKumar Ch
Select PINCTRL in Kconfig under Typical OMAP configuration, this
is required to add pinctrl driver to omap2+ family of devices.

Signed-off-by: AnilKumar Ch 
---
 arch/arm/mach-omap2/Kconfig |1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index dd2db02..a164568 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -18,6 +18,7 @@ config ARCH_OMAP2PLUS_TYPICAL
select TWL4030_CORE if ARCH_OMAP3 || ARCH_OMAP4
select TWL4030_POWER if ARCH_OMAP3 || ARCH_OMAP4
select HIGHMEM
+   select PINCTRL
help
  Compile a kernel suitable for booting most boards
 
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH v9] can: c_can: Add runtime PM support to Bosch C_CAN/D_CAN controller

2012-08-26 Thread AnilKumar, Chimata
Hi Marc,

On Mon, Aug 20, 2012 at 16:50:54, AnilKumar, Chimata wrote:
> Add Runtime PM support to C_CAN/D_CAN controller. The runtime PM
> APIs control clocks for C_CAN/D_CAN IP and prevent access to the
> register of C_CAN/D_CAN IP when clock is turned off.
> 
> Signed-off-by: AnilKumar Ch 
> ---
> This patch has been tested on AM335X EVM. Due to lack of hardware
> I am not able to test c_can functionality. I appreciate if anyone
> can test c_can functionality with this patch.
> 
> This patch is based on "can-next/master" 
> 
> Changes from v8:
>   - corrected the return path sequence in c_can_probe()
> 
> Changes from v7:
>   - Incorporated Marc's comments on v7
> * changed device pointer to c_can_priv pointer
> 
> Changes from v6:
>   - Incorporated Marc's comments on v6
> * changed dev pointer to priv
> * removed platform_device.h include from c_can.c
> 
> Changes from v5:
>   - Incorporated Marc's comments on v5
> * changed runtime pm calls in c_can driver to handle
>   the drivers which are not using platform drivers.
> * added device pointer protection in c_can driver if
>   not passed from platform/pci driver.
> 
> Changes from v4:
>   - Incorporated Vaibhav H review comments on v4.
> * Moved pm_runtime put/get_sync calls to appropriate positions.
>   - This patch is from "Add DT support to C_CAN/D_CAN controller"
> patch series. Rest of the patches in this series were applied
> so this v5 contains only this patch.
> 
>  drivers/net/can/c_can/c_can.c  |   24 +++-
>  drivers/net/can/c_can/c_can.h  |1 +
>  drivers/net/can/c_can/c_can_platform.c |   11 +--
>  3 files changed, 33 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
> index 4c538e3..966d318 100644
> --- a/drivers/net/can/c_can/c_can.c
> +++ b/drivers/net/can/c_can/c_can.c
> @@ -34,6 +34,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  
>  #include 
>  #include 
> @@ -201,6 +202,18 @@ static const struct can_bittiming_const 
> c_can_bittiming_const = {
>   .brp_inc = 1,
>  };
>  
> +static inline void c_can_pm_runtime_get_sync(struct c_can_priv *priv)
> +{
> + if (priv->device)
> + pm_runtime_get_sync(priv->device);
> +}
> +
> +static inline void c_can_pm_runtime_put_sync(struct c_can_priv *priv)
> +{
> + if (priv->device)
> + pm_runtime_put_sync(priv->device);
> +}
> +
>  static inline int get_tx_next_msg_obj(const struct c_can_priv *priv)
>  {
>   return (priv->tx_next & C_CAN_NEXT_MSG_OBJ_MASK) +
> @@ -673,11 +686,15 @@ static int c_can_get_berr_counter(const struct 
> net_device *dev,
>   unsigned int reg_err_counter;
>   struct c_can_priv *priv = netdev_priv(dev);
>  
> + c_can_pm_runtime_get_sync(priv);
> +
>   reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
>   bec->rxerr = (reg_err_counter & ERR_CNT_REC_MASK) >>
>   ERR_CNT_REC_SHIFT;
>   bec->txerr = reg_err_counter & ERR_CNT_TEC_MASK;
>  
> + c_can_pm_runtime_put_sync(priv);
> +
>   return 0;
>  }
>  
> @@ -1053,11 +1070,13 @@ static int c_can_open(struct net_device *dev)
>   int err;
>   struct c_can_priv *priv = netdev_priv(dev);
>  
> + c_can_pm_runtime_get_sync(priv);
> +
>   /* open the can device */
>   err = open_candev(dev);
>   if (err) {
>   netdev_err(dev, "failed to open can device\n");
> - return err;
> + goto exit_open_fail;
>   }
>  
>   /* register interrupt handler */
> @@ -1079,6 +1098,8 @@ static int c_can_open(struct net_device *dev)
>  
>  exit_irq_fail:
>   close_candev(dev);
> +exit_open_fail:
> + c_can_pm_runtime_put_sync(priv);
>   return err;
>  }
>  
> @@ -1091,6 +1112,7 @@ static int c_can_close(struct net_device *dev)
>   c_can_stop(dev);
>   free_irq(dev->irq, dev);
>   close_candev(dev);
> + c_can_pm_runtime_put_sync(priv);
>  
>   return 0;
>  }
> diff --git a/drivers/net/can/c_can/c_can.h b/drivers/net/can/c_can/c_can.h
> index 4e56baa..1437a6d 100644
> --- a/drivers/net/can/c_can/c_can.h
> +++ b/drivers/net/can/c_can/c_can.h
> @@ -153,6 +153,7 @@ struct c_can_priv {
>   struct can_priv can;/* must be the first member */
>   struct napi_struct napi;
>   struct net_device *dev;
> + struct device *device;
>   int tx_object;
>   int current_status;
>   int last_status;
> diff --git a/drivers/net/can/c_can/c_can_platform.c 
> b/drivers/net/can/c_can/c_can_platform.c
> index d0a66cf..90801c4 100644
> --- a/drivers/net/can/c_can/c_can_platform.c
> +++ b/drivers/net/can/c_can/c_can_platform.c
> @@ -32,6 +32,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  
>  #include 
>  
> @@ -177,8 +178,11 @@ static int __devinit c_can_plat_probe(struct 
> platform_device *pdev)
>   goto e

Re: [PATCH] OMAP GPIO - don't wake from suspend unless requested.

2012-08-26 Thread Shilimkar, Santosh
On Sun, Aug 26, 2012 at 3:53 PM, NeilBrown  wrote:
>
> On Sun, 26 Aug 2012 09:47:50 +0530 "Shilimkar, Santosh"
>  wrote:
>
> > + Jon,
> >
> > On Sat, Aug 25, 2012 at 5:14 PM, NeilBrown  wrote:
> > >
> > >
> > >
> > > Current kernel will wake from suspend on an event on any active
> > > GPIO even if enable_irq_wake() wasn't called.
> > >
> > > There are two reasons that the hardware wake-enable bit should be set:
> > >
> > > 1/ while non-suspended the CPU might go into a deep sleep (off_mode)
> > >   in which the wake-enable bit is needed for an interrupt to be
> > >   recognised.
> > > 2/ while suspended the GPIO interrupt should wake from suspend if and
> > >only if irq_wake as been enabled.
> > >
> > > The code currently doesn't keep these two reasons separate so they get
> > > confused and sometimes the wakeup flags is set incorrectly.
> > >
> > > This patch reverts:
> > >  commit 9c4ed9e6c01e7a8bd9079da8267e1f03cb4761fc
> > > gpio/omap: remove suspend/resume callbacks
> > > and
> > >  commit 0aa2727399c0b78225021413022c164cb99fbc5e
> > > gpio/omap: remove suspend_wakeup field from struct gpio_bank
> > >
> > > and makes some minor changes so that we have separate flags for "GPIO
> > > should wake from deep idle" and "GPIO should wake from suspend".
> > >
> > > With this patch, the GPIO from my touch screen doesn't wake my device
> > > any more, which is what I want.
> > >
> > > Cc: Kevin Hilman 
> > > Cc: Tony Lindgren 
> > > Cc: Santosh Shilimkar 
> > > Cc: Cousson, Benoit 
> > > Cc: Grant Likely 
> > > Cc: Tarun Kanti DebBarma 
> > > Cc: Felipe Balbi 
> > > Cc: Govindraj.R 
> > >
> > > Signed-off-by: NeilBrown 
> > >
> > The patch doesn't seems to be correct. At least the 2/ gets
> > fixed with a proper IRQCHIP flag. Can you try the patch at
> > end of the email and see if it helps ? Am attaching it in case
> > mailer damages it.
> >
> > Regards
> > Santosh
> >
> > >From b8a38fc75e046f6462610e26c47c620cad850c24 Mon Sep 17 00:00:00 2001
> > From: Santosh Shilimkar 
> > Date: Sun, 26 Aug 2012 09:39:51 +0530
> > Subject: [PATCH] gpio: omap: Set IRQCHIP_MASK_ON_SUSPEND to mask all
> >  non-wakeup gpio wakeups.
> >
> > Set the irq chip flag IRQCHIP_MASK_ON_SUSPEND to cause the irq pm code
> > to mask all non-wake gpios in suspend, which will ensure the wakeup
> > enable
> > bit is not set on non-wake gpios.
> >
> > Signed-off-by: Santosh Shilimkar 
> > ---
> >  drivers/gpio/gpio-omap.c |1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
> > index e6efd77..50b4c18 100644
> > --- a/drivers/gpio/gpio-omap.c
> > +++ b/drivers/gpio/gpio-omap.c
> > @@ -779,6 +779,7 @@ static struct irq_chip gpio_irq_chip = {
> >   .irq_unmask = gpio_unmask_irq,
> >   .irq_set_type   = gpio_irq_type,
> >   .irq_set_wake   = gpio_wake_enable,
> > + .flags  = IRQCHIP_MASK_ON_SUSPEND;
> >  };
> >
> >
> > /*-*/
>
>
> No obvious damage, unless the mailer is responsible or the ';' at the end
> of
> the line, rather than ',' :-)
>
:-) That was typo.

> The approach makes sense, but does actually work.  Should be fixable
> though.
>
> When I try this I get:
>
>
>
> [  158.114440] Checking wakeup interrupts
> [  158.118408] Unhandled fault: external abort on non-linefetch (0x1028)
> at 0xfb054040
> [  158.126403] Internal error: : 1028 [#1] PREEMPT ARM
> [  158.131500] Modules linked in: ipv6 g_ether hso libertas_sdio libertas
> cfg80211
> [  158.139190] CPU: 0Not tainted  (3.5.0-gta04-debug+ #2)
> [  158.144927] PC is at _set_gpio_triggering+0x38/0x258
> [  158.150115] LR is at gpio_mask_irq+0xac/0xc0
> [  158.154602] pc : []lr : []psr: 6193
> [  158.154602] sp : db521e90  ip : 0011  fp : beeecc2c
> [  158.166595] r10: c05c8ebc  r9 : daa5a858  r8 : 0003
> [  158.172027] r7 : a193  r6 :   r5 : fb054000  r4 : ded44e18
> [  158.178863] r3 : 0001  r2 :   r1 : ded30340  r0 : 0040
> [  158.185668] Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM
> Segment use
>
> so it looks like runtime PM has turned off the iclk to the GPIO module so
> that
> when we try to tell it to change settings, it is no longer listening to
> us.
>From the crash logs it appears like that.

> The "Checking wakeup interrupts" function happens very late in the suspend
> cycle, after all the suspend_late and suspend_noirq functions have run.
> Maybe it needs to be moved earlier...
>
No it shouldn't be moved and it is that point for lot many good
reasons. Ofcourse
this omap gpio driver crash needs to be addressed. Need to think bit
more on this
issue.

Regards
Santosh
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] OMAP GPIO - don't wake from suspend unless requested.

2012-08-26 Thread NeilBrown
On Sun, 26 Aug 2012 09:47:50 +0530 "Shilimkar, Santosh"
 wrote:

> + Jon,
> 
> On Sat, Aug 25, 2012 at 5:14 PM, NeilBrown  wrote:
> >
> >
> >
> > Current kernel will wake from suspend on an event on any active
> > GPIO even if enable_irq_wake() wasn't called.
> >
> > There are two reasons that the hardware wake-enable bit should be set:
> >
> > 1/ while non-suspended the CPU might go into a deep sleep (off_mode)
> >   in which the wake-enable bit is needed for an interrupt to be
> >   recognised.
> > 2/ while suspended the GPIO interrupt should wake from suspend if and
> >only if irq_wake as been enabled.
> >
> > The code currently doesn't keep these two reasons separate so they get
> > confused and sometimes the wakeup flags is set incorrectly.
> >
> > This patch reverts:
> >  commit 9c4ed9e6c01e7a8bd9079da8267e1f03cb4761fc
> > gpio/omap: remove suspend/resume callbacks
> > and
> >  commit 0aa2727399c0b78225021413022c164cb99fbc5e
> > gpio/omap: remove suspend_wakeup field from struct gpio_bank
> >
> > and makes some minor changes so that we have separate flags for "GPIO
> > should wake from deep idle" and "GPIO should wake from suspend".
> >
> > With this patch, the GPIO from my touch screen doesn't wake my device
> > any more, which is what I want.
> >
> > Cc: Kevin Hilman 
> > Cc: Tony Lindgren 
> > Cc: Santosh Shilimkar 
> > Cc: Cousson, Benoit 
> > Cc: Grant Likely 
> > Cc: Tarun Kanti DebBarma 
> > Cc: Felipe Balbi 
> > Cc: Govindraj.R 
> >
> > Signed-off-by: NeilBrown 
> >
> The patch doesn't seems to be correct. At least the 2/ gets
> fixed with a proper IRQCHIP flag. Can you try the patch at
> end of the email and see if it helps ? Am attaching it in case
> mailer damages it.
> 
> Regards
> Santosh
> 
> >From b8a38fc75e046f6462610e26c47c620cad850c24 Mon Sep 17 00:00:00 2001
> From: Santosh Shilimkar 
> Date: Sun, 26 Aug 2012 09:39:51 +0530
> Subject: [PATCH] gpio: omap: Set IRQCHIP_MASK_ON_SUSPEND to mask all
>  non-wakeup gpio wakeups.
> 
> Set the irq chip flag IRQCHIP_MASK_ON_SUSPEND to cause the irq pm code
> to mask all non-wake gpios in suspend, which will ensure the wakeup enable
> bit is not set on non-wake gpios.
> 
> Signed-off-by: Santosh Shilimkar 
> ---
>  drivers/gpio/gpio-omap.c |1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
> index e6efd77..50b4c18 100644
> --- a/drivers/gpio/gpio-omap.c
> +++ b/drivers/gpio/gpio-omap.c
> @@ -779,6 +779,7 @@ static struct irq_chip gpio_irq_chip = {
>   .irq_unmask = gpio_unmask_irq,
>   .irq_set_type   = gpio_irq_type,
>   .irq_set_wake   = gpio_wake_enable,
> + .flags  = IRQCHIP_MASK_ON_SUSPEND;
>  };
> 
>  /*-*/


No obvious damage, unless the mailer is responsible or the ';' at the end of
the line, rather than ',' :-)

The approach makes sense, but does actually work.  Should be fixable though.

When I try this I get:



[  158.114440] Checking wakeup interrupts
[  158.118408] Unhandled fault: external abort on non-linefetch (0x1028) at 
0xfb054040
[  158.126403] Internal error: : 1028 [#1] PREEMPT ARM
[  158.131500] Modules linked in: ipv6 g_ether hso libertas_sdio libertas 
cfg80211
[  158.139190] CPU: 0Not tainted  (3.5.0-gta04-debug+ #2)
[  158.144927] PC is at _set_gpio_triggering+0x38/0x258
[  158.150115] LR is at gpio_mask_irq+0xac/0xc0
[  158.154602] pc : []lr : []psr: 6193
[  158.154602] sp : db521e90  ip : 0011  fp : beeecc2c
[  158.166595] r10: c05c8ebc  r9 : daa5a858  r8 : 0003
[  158.172027] r7 : a193  r6 :   r5 : fb054000  r4 : ded44e18
[  158.178863] r3 : 0001  r2 :   r1 : ded30340  r0 : 0040
[  158.185668] Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment use

so it looks like runtime PM has turned off the iclk to the GPIO module so that
when we try to tell it to change settings, it is no longer listening to us.
The "Checking wakeup interrupts" function happens very late in the suspend
cycle, after all the suspend_late and suspend_noirq functions have run.
Maybe it needs to be moved earlier...

Thanks,
NeilBrown


signature.asc
Description: PGP signature