Re: [PATCH v3] OMAP2+: UART: Add mechanism to probe uart pins and configure rx wakeup

2012-06-05 Thread Tony Lindgren
* Kevin Hilman khil...@ti.com [120523 16:15]:
 Govindraj.R govindraj.r...@ti.com writes:
 
  From: Govindraj.R govindraj.r...@ti.com
 
  The commit (bce492c0  ARM: OMAP2+: UART: Fix incorrect population of
  default uart pads) removed default uart pads that where getting populated
  and which was making rx pin wakeup capable. If uart pads were used in
  different mode by any other module then it would fail since the default
  pads took over all the uart pins forcefully. With removal of default pads
  the rx_pad wakeup for console uart while waking up from off mode is broken.
 
  Utilise the mux api available to probe the availability of mux pins
  in uart mode and probe for availability of uart pin in mux mode0
  if uart is available as uart pin itself then configure rx pin
  as wakeup capable.
 
  This patch itself doesn't cater to all boards. Boards using uart rx wakeup
  mechanism should ensure the usage of omap_serial_init_port by configuring
  required uart ports and pass necessary mux data, till then this probing of
  uart pins can cater to enabling of rx pad wakeup to most of the boards.
 
  This patch can also throw some boot warning from _omap_mux_get_by_name
  if pin is requested for availability is not present while dynamically 
  probing
  the uart pins availability such boot warnings can be addressed only when 
  board
  files are patched with omap_serial_init_port calls passing the right pads
  needed for a given port.
 
  Discussion Threads for reference:
  http://www.spinics.net/lists/linux-omap/msg69859.html
  http://www.spinics.net/lists/linux-omap/msg68659.html
 
  Cc: Felipe Balbi ba...@ti.com
  Cc: Kevin Hilman khil...@ti.com
  Cc: Russ Dill russ.d...@gmail.com
  Cc: Tony Lindgren t...@atomide.com
  Cc: Paul Walmsley p...@pwsan.com
  Cc: Ameya Palande ameya.pala...@ti.com
  Signed-off-by: Govindraj.R govindraj.r...@ti.com
 
 Tony, it's up to you if you're OK with this mux interface, but I can at
 least confirm that this gets runtime PM + UART wakeups working again on
 the boards I tried: 3530/Overo, 3430/n900, 3530/OMAP3EVM.

OK good to hear. Patch looks good to me, applying into fixes branch.

Regards,

Tony
--
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 v3] OMAP2+: UART: Add mechanism to probe uart pins and configure rx wakeup

2012-06-05 Thread Tony Lindgren
* Govindraj.R govindraj.r...@ti.com [120511 02:45]:
 From: Govindraj.R govindraj.r...@ti.com
 --- a/arch/arm/mach-omap2/serial.c
 +++ b/arch/arm/mach-omap2/serial.c
  #else
 -static void omap_serial_fill_default_pads(struct omap_board_data *bdata) {}
 +static void __init omap_serial_check_wakeup(struct omap_board_data *bdata
 + struct omap_uart_state *uart) {}
  #endif

There's a comma missing here that breaks CONFIG_OMAP_MUX is not set here   ^^^.
I've updated the patch to add it.

Tony
--
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 v3] OMAP2+: UART: Add mechanism to probe uart pins and configure rx wakeup

2012-05-23 Thread Kevin Hilman
Govindraj.R govindraj.r...@ti.com writes:

 From: Govindraj.R govindraj.r...@ti.com

 The commit (bce492c0  ARM: OMAP2+: UART: Fix incorrect population of
 default uart pads) removed default uart pads that where getting populated
 and which was making rx pin wakeup capable. If uart pads were used in
 different mode by any other module then it would fail since the default
 pads took over all the uart pins forcefully. With removal of default pads
 the rx_pad wakeup for console uart while waking up from off mode is broken.

 Utilise the mux api available to probe the availability of mux pins
 in uart mode and probe for availability of uart pin in mux mode0
 if uart is available as uart pin itself then configure rx pin
 as wakeup capable.

 This patch itself doesn't cater to all boards. Boards using uart rx wakeup
 mechanism should ensure the usage of omap_serial_init_port by configuring
 required uart ports and pass necessary mux data, till then this probing of
 uart pins can cater to enabling of rx pad wakeup to most of the boards.

 This patch can also throw some boot warning from _omap_mux_get_by_name
 if pin is requested for availability is not present while dynamically probing
 the uart pins availability such boot warnings can be addressed only when board
 files are patched with omap_serial_init_port calls passing the right pads
 needed for a given port.

 Discussion Threads for reference:
 http://www.spinics.net/lists/linux-omap/msg69859.html
 http://www.spinics.net/lists/linux-omap/msg68659.html

 Cc: Felipe Balbi ba...@ti.com
 Cc: Kevin Hilman khil...@ti.com
 Cc: Russ Dill russ.d...@gmail.com
 Cc: Tony Lindgren t...@atomide.com
 Cc: Paul Walmsley p...@pwsan.com
 Cc: Ameya Palande ameya.pala...@ti.com
 Signed-off-by: Govindraj.R govindraj.r...@ti.com

Tony, it's up to you if you're OK with this mux interface, but I can at
least confirm that this gets runtime PM + UART wakeups working again on
the boards I tried: 3530/Overo, 3430/n900, 3530/OMAP3EVM.

Kevin
--
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


[PATCH v3] OMAP2+: UART: Add mechanism to probe uart pins and configure rx wakeup

2012-05-11 Thread Govindraj.R
From: Govindraj.R govindraj.r...@ti.com

The commit (bce492c0  ARM: OMAP2+: UART: Fix incorrect population of
default uart pads) removed default uart pads that where getting populated
and which was making rx pin wakeup capable. If uart pads were used in
different mode by any other module then it would fail since the default
pads took over all the uart pins forcefully. With removal of default pads
the rx_pad wakeup for console uart while waking up from off mode is broken.

Utilise the mux api available to probe the availability of mux pins
in uart mode and probe for availability of uart pin in mux mode0
if uart is available as uart pin itself then configure rx pin
as wakeup capable.

This patch itself doesn't cater to all boards. Boards using uart rx wakeup
mechanism should ensure the usage of omap_serial_init_port by configuring
required uart ports and pass necessary mux data, till then this probing of
uart pins can cater to enabling of rx pad wakeup to most of the boards.

This patch can also throw some boot warning from _omap_mux_get_by_name
if pin is requested for availability is not present while dynamically probing
the uart pins availability such boot warnings can be addressed only when board
files are patched with omap_serial_init_port calls passing the right pads
needed for a given port.

Discussion Threads for reference:
http://www.spinics.net/lists/linux-omap/msg69859.html
http://www.spinics.net/lists/linux-omap/msg68659.html

Cc: Felipe Balbi ba...@ti.com
Cc: Kevin Hilman khil...@ti.com
Cc: Russ Dill russ.d...@gmail.com
Cc: Tony Lindgren t...@atomide.com
Cc: Paul Walmsley p...@pwsan.com
Cc: Ameya Palande ameya.pala...@ti.com
Signed-off-by: Govindraj.R govindraj.r...@ti.com
---

Patching of all board files would be difficult as even I am not aware of all
omap-board schematics and uart port usage. So individual board file can be
enabled accordingly for uart usage by calling omap_serial_init_port call
with right mux data.

for testing: Patch based on v3.4-rc6
(tested on beagle-xm for off mode rx wakeup)
Patch targeted for v3.5

 arch/arm/mach-omap2/mux.c|3 +-
 arch/arm/mach-omap2/mux.h|   11 +++
 arch/arm/mach-omap2/serial.c |   65 +++--
 3 files changed, 73 insertions(+), 6 deletions(-)

diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
index 65c3391..d937ddd 100644
--- a/arch/arm/mach-omap2/mux.c
+++ b/arch/arm/mach-omap2/mux.c
@@ -217,8 +217,7 @@ static int __init _omap_mux_get_by_name(struct 
omap_mux_partition *partition,
return -ENODEV;
 }
 
-static int __init
-omap_mux_get_by_name(const char *muxname,
+int __init omap_mux_get_by_name(const char *muxname,
struct omap_mux_partition **found_partition,
struct omap_mux **found_mux)
 {
diff --git a/arch/arm/mach-omap2/mux.h b/arch/arm/mach-omap2/mux.h
index 69fe060..471e62a 100644
--- a/arch/arm/mach-omap2/mux.h
+++ b/arch/arm/mach-omap2/mux.h
@@ -59,6 +59,7 @@
 #define OMAP_PIN_OFF_WAKEUPENABLE  OMAP_WAKEUP_EN
 
 #define OMAP_MODE_GPIO(x)  (((x)  OMAP_MUX_MODE7) == OMAP_MUX_MODE4)
+#define OMAP_MODE_UART(x)  (((x)  OMAP_MUX_MODE7) == OMAP_MUX_MODE0)
 
 /* Flags for omapX_mux_init */
 #define OMAP_PACKAGE_MASK  0x
@@ -225,8 +226,18 @@ omap_hwmod_mux_init(struct omap_device_pad *bpads, int 
nr_pads);
  */
 void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state);
 
+int omap_mux_get_by_name(const char *muxname,
+   struct omap_mux_partition **found_partition,
+   struct omap_mux **found_mux);
 #else
 
+static inline int omap_mux_get_by_name(const char *muxname,
+   struct omap_mux_partition **found_partition,
+   struct omap_mux **found_mux)
+{
+   return 0;
+}
+
 static inline int omap_mux_init_gpio(int gpio, int val)
 {
return 0;
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
index 9fc2f44..2dc50e7 100644
--- a/arch/arm/mach-omap2/serial.c
+++ b/arch/arm/mach-omap2/serial.c
@@ -57,6 +57,7 @@ struct omap_uart_state {
 
struct list_head node;
struct omap_hwmod *oh;
+   struct omap_device_pad default_omap_uart_pads[2];
 };
 
 static LIST_HEAD(uart_list);
@@ -126,11 +127,68 @@ static void omap_uart_set_smartidle(struct 
platform_device *pdev) {}
 #endif /* CONFIG_PM */
 
 #ifdef CONFIG_OMAP_MUX
-static void omap_serial_fill_default_pads(struct omap_board_data *bdata)
+
+#define OMAP_UART_DEFAULT_PAD_NAME_LEN 28
+static char rx_pad_name[OMAP_UART_DEFAULT_PAD_NAME_LEN],
+   tx_pad_name[OMAP_UART_DEFAULT_PAD_NAME_LEN] __initdata;
+
+static void  __init
+omap_serial_fill_uart_tx_rx_pads(struct omap_board_data *bdata,
+   struct omap_uart_state *uart)
+{
+   uart-default_omap_uart_pads[0].name = rx_pad_name;
+   uart-default_omap_uart_pads[0].flags = OMAP_DEVICE_PAD_REMUX |
+