Re: [PATCH] Keyboard: omap-keypad: use matrix_keypad.h

2010-12-17 Thread Dmitry Torokhov
Hi Janusz,

On Fri, Dec 17, 2010 at 11:32:04PM +0100, Janusz Krzysztofik wrote:
 Most keypad drivers make use of the linux/input/matrix_keypad.h 
 defined macros, structures and inline functions.
 
 Convert omap-keypad driver to use those as well, as suggested by a 
 compile time warning, hardcoded into the OMAP palt/keypad.h.
 

Looks nice, couple of comments.

  
  struct omap_kp_platform_data {
   int rows;
   int cols;
 - int *keymap;
 - unsigned int keymapsize;
 + const struct matrix_keymap_data *keymap_data;
   unsigned int rep:1;
   unsigned long delay;
   unsigned int dbounce:1;

Since you are updating all boards maybe also change rep and dbounce to
bool?

 --- linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c.orig
 2010-12-09 23:08:09.0 +0100
 +++ linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c 2010-12-16 
 21:04:07.0 +0100
 @@ -65,7 +65,6 @@ struct omap_kp {
  
  static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0);
  
 -static int *keymap;
  static unsigned int *row_gpios;
  static unsigned int *col_gpios;
  
 @@ -162,20 +161,11 @@ static void omap_kp_scan_keypad(struct o
   }
  }
  
 -static inline int omap_kp_find_key(int col, int row)
 -{
 - int i, key;
 -
 - key = KEY(col, row, 0);
 - for (i = 0; keymap[i] != 0; i++)
 - if ((keymap[i]  0xff00) == key)
 - return keymap[i]  0x00ff;
 - return -1;
 -}
 -
  static void omap_kp_tasklet(unsigned long data)
  {
   struct omap_kp *omap_kp_data = (struct omap_kp *) data;
 + unsigned short *keycodes = omap_kp_data-input-keycode;
 + unsigned int row_shift = get_count_order(omap_kp_data-cols);
   unsigned char new_state[8], changed, key_down = 0;
   int col, row;
   int spurious = 0;
 @@ -199,7 +189,7 @@ static void omap_kp_tasklet(unsigned lon
  row, (new_state[col]  (1  row)) ?
  pressed : released);
  #else
 - key = omap_kp_find_key(col, row);
 + key = keycodes[MATRIX_SCAN_CODE(row, col, row_shift)];
   if (key  0) {
   printk(KERN_WARNING
 omap-keypad: Spurious key event %d-%d\n,
 @@ -298,16 +288,22 @@ static int __devinit omap_kp_probe(struc
   struct input_dev *input_dev;
   struct omap_kp_platform_data *pdata =  pdev-dev.platform_data;
   int i, col_idx, row_idx, irq_idx, ret;
 + unsigned short *keycodes;
 + unsigned int row_shift;
  
 - if (!pdata-rows || !pdata-cols || !pdata-keymap) {
 - printk(KERN_ERR No rows, cols or keymap from pdata\n);
 + if (!pdata-rows || !pdata-cols || !pdata-keymap_data) {
 + printk(KERN_ERR No rows, cols or keymap_data from pdata\n);
   return -EINVAL;
   }
  
   omap_kp = kzalloc(sizeof(struct omap_kp), GFP_KERNEL);
 + row_shift = get_count_order(pdata-cols);
 + keycodes = kzalloc((pdata-rows  row_shift) * sizeof(*keycodes),
 + GFP_KERNEL);
   input_dev = input_allocate_device();
 - if (!omap_kp || !input_dev) {
 + if (!omap_kp || !keycodes || !input_dev) {
   kfree(omap_kp);
 + kfree(keycodes);

I do not see where you freeing keycodes in case something else fails nor
in omap_kp_remove(). But why don't you put keycodes at the end of struct
omap_kp and allocate it in one shot?

Thanks.

-- 
Dmitry
--
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 v2 3/9] OMAP2420: hwmod data: add system DMA

2010-12-17 Thread G, Manjunath Kondaiah
Hi Paul,

On Fri, Dec 17, 2010 at 09:09:42PM +0530, G, Manjunath Kondaiah wrote:
 Add OMAP2420 DMA hwmod data and also add required
 DMA device attributes.
 
 Signed-off-by: G, Manjunath Kondaiah manj...@ti.com
 ---
  arch/arm/mach-omap2/omap_hwmod_2420_data.c |   87 
 
  arch/arm/plat-omap/include/plat/dma.h  |   11 
  2 files changed, 98 insertions(+), 0 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c 
 b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
 index d953425..eb02fec 100644
 --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
 +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
 @@ -42,6 +42,7 @@ static struct omap_hwmod omap2420_gpio1_hwmod;
  static struct omap_hwmod omap2420_gpio2_hwmod;
  static struct omap_hwmod omap2420_gpio3_hwmod;
  static struct omap_hwmod omap2420_gpio4_hwmod;
 +static struct omap_hwmod omap2420_dma_system_hwmod;
  
  /* L3 - L4_CORE interface */
  static struct omap_hwmod_ocp_if omap2420_l3_main__l4_core = {
 @@ -779,6 +780,89 @@ static struct omap_hwmod omap2420_gpio4_hwmod = {
   .omap_chip  = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
  };
  
 +/* system dma */
 +static struct omap_hwmod_class_sysconfig omap2420_dma_sysc = {
 + .rev_offs   = 0x,
 + .sysc_offs  = 0x002c,
 + .syss_offs  = 0x0028,
 + .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
 +SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
 +SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE),
 + .idlemodes  = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
 +MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
 + .sysc_fields= omap_hwmod_sysc_type1,
 +};
 +
 +static struct omap_hwmod_class omap2420_dma_hwmod_class = {
 + .name = dma,
 + .sysc = omap2420_dma_sysc,
 +};
 +
 +/* dma attributes */
 +static struct omap_dma_dev_attr dma_dev_attr = {
 + .dev_caps  = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
 + IS_CSSA_32 | IS_CDSA_32,
 + .lch_count = 32,
 +};
 +
 +static struct omap_hwmod_irq_info omap2420_dma_system_irqs[] = {
 + { .name = 0, .irq = 12 }, /* INT_24XX_SDMA_IRQ0 */
 + { .name = 1, .irq = 13 }, /* INT_24XX_SDMA_IRQ1 */
 + { .name = 2, .irq = 14 }, /* INT_24XX_SDMA_IRQ2 */
 + { .name = 3, .irq = 15 }, /* INT_24XX_SDMA_IRQ3 */
 +};
 +
 +static struct omap_hwmod_addr_space omap2420_dma_system_addrs[] = {
 + {
 + .pa_start   = 0x48056000,
 + .pa_end = 0x4a0560ff,
 + .flags  = ADDR_TYPE_RT
 + },
 +};
 +
 +/* dma_system - L3 */
 +static struct omap_hwmod_ocp_if omap2420_dma_system__l3 = {
 + .master = omap2420_dma_system_hwmod,
 + .slave  = omap2420_l3_main_hwmod,
 + .clk= core_l3_ck,
 + .user   = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* dma_system master ports */
 +static struct omap_hwmod_ocp_if *omap2420_dma_system_masters[] = {
 + omap2420_dma_system__l3,
 +};
 +
 +/* l4_cfg - dma_system */
 +static struct omap_hwmod_ocp_if omap2420_l4_core__dma_system = {
 + .master = omap2420_l4_core_hwmod,
 + .slave  = omap2420_dma_system_hwmod,
 + .clk= sdma_ick,
 + .addr   = omap2420_dma_system_addrs,
 + .addr_cnt   = ARRAY_SIZE(omap2420_dma_system_addrs),
 + .user   = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* dma_system slave ports */
 +static struct omap_hwmod_ocp_if *omap2420_dma_system_slaves[] = {
 + omap2420_l4_core__dma_system,
 +};
 +
 +static struct omap_hwmod omap2420_dma_system_hwmod = {
 + .name   = dma,
 + .class  = omap2420_dma_hwmod_class,
 + .mpu_irqs   = omap2420_dma_system_irqs,
 + .mpu_irqs_cnt   = ARRAY_SIZE(omap2420_dma_system_irqs),
 + .main_clk   = core_l3_ck,

The clock entries are modified as per your review comments and tested
the chagnes on N800 and 2430SDP(for patch 4/9).

Can you pls ack these patches so that tony can merge this series?

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


<    1   2