Skip to contentSkip to conversation

Omap updates for merge window after 2.6.30

PATCH Applied Tony Lindgren 6 participants 37 messages May 19, 2009 – Jun 3, 2009

Subsystems (10)
lore
Share & tools
lore

Tony Lindgren

author maintainer
#0 lore raw

cover Omap updates for merge window after 2.6.30

Hi all,

This series contains omap updates for review. There will be one more series after this for omap3 specific patches.

Regards,

Tony

---

Eero Nurkkala (1):
ARM: OMAP: McBSP: Fix legacy interrupts to clear their status

Imre Deak (1):
ARM: OMAP2: 2430SDP: Add FB support to board file

Jarkko Nikula (1):
ARM: OMAP: Update contact address of I2C registration helper

Juha Yrjola (1):
ARM: OMAP2/3: Add generic onenand support when connected to GPMC

Mans Rullgard (1):
ARM: OMAP: Increase VMALLOC_END to allow 256MB RAM

Santosh Shilimkar (1):
ARM: OMAP2/3: sDMA: Correct omap_request_dma_chain()

Tomi Valkeinen (1):
ARM: OMAP2/3: DMA: implement trans copy and const fill

Tony Lindgren (3):
ARM: OMAP2/3: Add generic smc91x support when connected to GPMC
ARM: OMAP1: Make 770 LCD work
ARM: OMAP1: Misc clean-up

 arch/arm/configs/rx51_defconfig               |    2 
 arch/arm/mach-omap1/Kconfig                   |    1 
 arch/arm/mach-omap1/Makefile                  |    4 
 arch/arm/mach-omap1/board-nokia770.c          |   17 +
 arch/arm/mach-omap2/Makefile                  |    6 
 arch/arm/mach-omap2/board-2430sdp.c           |  112 ++------
 arch/arm/mach-omap2/board-3430sdp.c           |   78 ++----
 arch/arm/mach-omap2/board-rx51-peripherals.c  |  192 ++++++--------
 arch/arm/mach-omap2/gpmc-onenand.c            |  340 +++++++++++++++++++++++++
 arch/arm/mach-omap2/gpmc-smc91x.c             |  189 ++++++++++++++
 arch/arm/plat-omap/dma.c                      |   79 ++++--
 arch/arm/plat-omap/i2c.c                      |    2 
 arch/arm/plat-omap/include/mach/dma.h         |    3 
 arch/arm/plat-omap/include/mach/gpmc-smc91x.h |   46 +++
 arch/arm/plat-omap/include/mach/hwa742.h      |    5 
 arch/arm/plat-omap/include/mach/onenand.h     |   29 ++
 arch/arm/plat-omap/include/mach/vmalloc.h     |    2 
 arch/arm/plat-omap/mcbsp.c                    |   30 ++
 arch/arm/plat-omap/sram.c                     |    4 
 drivers/video/omap/hwa742.c                   |   26 +-
 20 files changed, 851 insertions(+), 316 deletions(-)
 create mode 100644 arch/arm/mach-omap2/gpmc-onenand.c
 create mode 100644 arch/arm/mach-omap2/gpmc-smc91x.c
 create mode 100644 arch/arm/plat-omap/include/mach/gpmc-smc91x.h
Signature · 1 line
Signature
author maintainer
#1 lore raw

PATCH 1/10 ARM: OMAP: Increase VMALLOC_END to allow 256MB RAM

From: Mans Rullgard <[email protected]>

This increases VMALLOC_END to 0x18000000, making room for 256MB RAM with the default 128MB vmalloc region.

Note that after this patch there's no longer a hole between vmalloc space and the beginning of IO space on omap2 as the first virtual mapping starts at 0xd8000000.

Also fold in a related change from Paul Walmsley <[email protected]> to change the OMAP2_SRAM addresses accordingly.

---
 arch/arm/plat-omap/include/mach/vmalloc.h |    2 +-
 arch/arm/plat-omap/sram.c                 |    4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
arch/arm/plat-omap/include/mach/vmalloc.h +1 -1
index dc104cd..b97dfaf 100644
@@ -17,5 +17,5 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  */
-#define VMALLOC_END	  (PAGE_OFFSET + 0x10000000)
+#define VMALLOC_END	  (PAGE_OFFSET + 0x18000000)
 
arch/arm/plat-omap/sram.c +2 -2
index e1493d8..102c9f7 100644
@@ -38,8 +38,8 @@
 #define OMAP1_SRAM_VA		VMALLOC_END
 #define OMAP2_SRAM_PA		0x40200000
 #define OMAP2_SRAM_PUB_PA	0x4020f800
-#define OMAP2_SRAM_VA		VMALLOC_END
-#define OMAP2_SRAM_PUB_VA	(VMALLOC_END + 0x800)
+#define OMAP2_SRAM_VA		0xe3000000
+#define OMAP2_SRAM_PUB_VA	(OMAP2_SRAM_VA + 0x800)
 #define OMAP3_SRAM_PA           0x40200000
 #define OMAP3_SRAM_VA           0xd7000000
 #define OMAP3_SRAM_PUB_PA       0x40208000
author maintainer
#2 lore raw

PATCH 2/10 ARM: OMAP: McBSP: Fix legacy interrupts to clear their status

In reply to Tony Lindgren

From: Eero Nurkkala <[email protected]>

If XSYNCERR or RSYNCERR interrupts are enabled, they are never cleared causing the IRQ handler to be continuously called. This patch clears the IRQs in question in the event they are enabled and taken.

---
 arch/arm/plat-omap/mcbsp.c |   30 ++++++++++++++++++++++++------
 1 files changed, 24 insertions(+), 6 deletions(-)
arch/arm/plat-omap/mcbsp.c +24 -6
index 28b0a82..efa0e01 100644
@@ -91,11 +91,20 @@ static void omap_mcbsp_dump_reg(u8 id)
 static irqreturn_t omap_mcbsp_tx_irq_handler(int irq, void *dev_id)
 {
 	struct omap_mcbsp *mcbsp_tx = dev_id;
+	u16 irqst_spcr2;
 
-	dev_dbg(mcbsp_tx->dev, "TX IRQ callback : 0x%x\n",
-		OMAP_MCBSP_READ(mcbsp_tx->io_base, SPCR2));
+	irqst_spcr2 = OMAP_MCBSP_READ(mcbsp_tx->io_base, SPCR2);
+	dev_dbg(mcbsp_tx->dev, "TX IRQ callback : 0x%x\n", irqst_spcr2);
 
-	complete(&mcbsp_tx->tx_irq_completion);
+	if (irqst_spcr2 & XSYNC_ERR) {
+		dev_err(mcbsp_tx->dev, "TX Frame Sync Error! : 0x%x\n",
+			irqst_spcr2);
+		/* Writing zero to XSYNC_ERR clears the IRQ */
+		OMAP_MCBSP_WRITE(mcbsp_tx->io_base, SPCR2,
+			irqst_spcr2 & ~(XSYNC_ERR));
+	} else {
+		complete(&mcbsp_tx->tx_irq_completion);
+	}
 
 	return IRQ_HANDLED;
 }
@@ -103,11 +112,20 @@ static irqreturn_t omap_mcbsp_tx_irq_handler(int irq, void *dev_id)
 static irqreturn_t omap_mcbsp_rx_irq_handler(int irq, void *dev_id)
 {
 	struct omap_mcbsp *mcbsp_rx = dev_id;
+	u16 irqst_spcr1;
 
-	dev_dbg(mcbsp_rx->dev, "RX IRQ callback : 0x%x\n",
-		OMAP_MCBSP_READ(mcbsp_rx->io_base, SPCR2));
+	irqst_spcr1 = OMAP_MCBSP_READ(mcbsp_rx->io_base, SPCR1);
+	dev_dbg(mcbsp_rx->dev, "RX IRQ callback : 0x%x\n", irqst_spcr1);
 
-	complete(&mcbsp_rx->rx_irq_completion);
+	if (irqst_spcr1 & RSYNC_ERR) {
+		dev_err(mcbsp_rx->dev, "RX Frame Sync Error! : 0x%x\n",
+			irqst_spcr1);
+		/* Writing zero to RSYNC_ERR clears the IRQ */
+		OMAP_MCBSP_WRITE(mcbsp_rx->io_base, SPCR1,
+			irqst_spcr1 & ~(RSYNC_ERR));
+	} else {
+		complete(&mcbsp_rx->tx_irq_completion);
+	}
 
 	return IRQ_HANDLED;
 }
author maintainer
#3 lore raw

PATCH 3/10 ARM: OMAP: Update contact address of I2C registration helper

In reply to Tony Lindgren

From: Jarkko Nikula <[email protected]>

This email address is going to expire soon so update it.

---
 arch/arm/plat-omap/i2c.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/plat-omap/i2c.c +1 -1
index a303071..8b84839 100644
@@ -5,7 +5,7 @@
  *
  * Copyright (C) 2007 Nokia Corporation.
  *
- * Contact: Jarkko Nikula <[email protected]>
+ * Contact: Jarkko Nikula <[email protected]>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
author maintainer
#7 lore raw

PATCH 4/10 ARM: OMAP1: Misc clean-up

In reply to Tony Lindgren

Remove unnecessary Kconfig line and allow compile of MBOX_FWK. Also allow building USB on Nokia 770.

---
 arch/arm/mach-omap1/Kconfig          |    1 -
 arch/arm/mach-omap1/Makefile         |    4 ++++
 arch/arm/mach-omap1/board-nokia770.c |    1 +
 3 files changed, 5 insertions(+), 1 deletions(-)
arch/arm/mach-omap1/Kconfig +0 -1
index cd8de89..55ecc01 100644
@@ -46,7 +46,6 @@ config MACH_OMAP_H2
 config MACH_OMAP_H3
 	bool "TI H3 Support"
 	depends on ARCH_OMAP1 && ARCH_OMAP16XX
-#	select GPIOEXPANDER_OMAP
     	help
 	  TI OMAP 1710 H3 board support. Say Y here if you have such
 	  a board.
arch/arm/mach-omap1/Makefile +4 -0
index 1bda8f5..6867cd3 100644
@@ -13,6 +13,10 @@ obj-$(CONFIG_OMAP_32K_TIMER)	+= timer32k.o
 # Power Management
 obj-$(CONFIG_PM) += pm.o sleep.o
 
+# DSP
+obj-$(CONFIG_OMAP_MBOX_FWK)	+= mailbox_mach.o
+mailbox_mach-objs		:= mailbox.o
+
 led-y := leds.o
 
 # Specific board support
arch/arm/mach-omap1/board-nokia770.c +1 -0
index d1ed136..8780ca6 100644
@@ -35,6 +35,7 @@
 #include <mach/omapfb.h>
 #include <mach/lcd_mipid.h>
 #include <mach/mmc.h>
+#include <mach/usb.h>
 
 #define ADS7846_PENDOWN_GPIO	15
 
author maintainer
#8 lore raw

PATCH 5/10 ARM: OMAP1: Make 770 LCD work

In reply to Tony Lindgren

Make 770 LCD work by passing the clock from platform data. Also remove the old unused functions.

---
 arch/arm/mach-omap1/board-nokia770.c     |   16 ++++++++++++++++
 arch/arm/plat-omap/include/mach/hwa742.h |    5 +----
 drivers/video/omap/hwa742.c              |   26 ++++++++++----------------
 3 files changed, 27 insertions(+), 20 deletions(-)
arch/arm/mach-omap1/board-nokia770.c +16 -0
index 8780ca6..2c4785e 100644
@@ -33,6 +33,7 @@
 #include <mach/common.h>
 #include <mach/dsp_common.h>
 #include <mach/omapfb.h>
+#include <mach/hwa742.h>
 #include <mach/lcd_mipid.h>
 #include <mach/mmc.h>
 #include <mach/usb.h>
@@ -163,6 +164,20 @@ static struct spi_board_info nokia770_spi_board_info[] __initdata = {
 	},
 };
 
+static struct hwa742_platform_data nokia770_hwa742_platform_data = {
+	.sys_ck 		= NULL,
+	.te_connected		= 1,
+};
+
+static void hwa742_dev_init(void)
+{
+	nokia770_hwa742_platform_data.sys_ck = clk_get(NULL, "bclk");
+	if (IS_ERR(nokia770_hwa742_platform_data.sys_ck)) {
+		printk(KERN_ERR "can't get HWA742 clock\n");
+	} else {
+		omapfb_set_ctrl_platform_data(&nokia770_hwa742_platform_data);
+	}
+}
 
 /* assume no Mini-AB port */
 
@@ -371,6 +386,7 @@ static void __init omap_nokia770_init(void)
 	omap_serial_init();
 	omap_register_i2c_bus(1, 100, NULL, 0);
 	omap_dsp_init();
+	hwa742_dev_init();
 	ads7846_dev_init();
 	mipid_dev_init();
 	omap_usb_init(&nokia770_usb_config);
arch/arm/plat-omap/include/mach/hwa742.h +1 -4
index 577f492..c00e05d 100644
@@ -2,10 +2,7 @@
 #define _HWA742_H
 
 struct hwa742_platform_data {
-	void		(*power_up)(struct device *dev);
-	void		(*power_down)(struct device *dev);
-	unsigned long	(*get_clock_rate)(struct device *dev);
-
+	struct clk 	*sys_ck;
 	unsigned	te_connected:1;
 };
 
drivers/video/omap/hwa742.c +10 -16
index 8aa6e47..1230476 100644
@@ -133,8 +133,7 @@ struct {
 	struct lcd_ctrl_extif	*extif;
 	struct lcd_ctrl		*int_ctrl;
 
-	void			(*power_up)(struct device *dev);
-	void			(*power_down)(struct device *dev);
+	struct clk		*sys_ck;
 } hwa742;
 
 struct lcd_ctrl hwa742_ctrl;
@@ -915,14 +914,13 @@ static void hwa742_suspend(void)
 	hwa742_set_update_mode(OMAPFB_UPDATE_DISABLED);
 	/* Enable sleep mode */
 	hwa742_write_reg(HWA742_POWER_SAVE, 1 << 1);
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(hwa742.fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 }
 
 static void hwa742_resume(void)
 {
-	if (hwa742.power_up != NULL)
-		hwa742.power_up(hwa742.fbdev->dev);
+	clk_enable(hwa742.sys_ck);
+
 	/* Disable sleep mode */
 	hwa742_write_reg(HWA742_POWER_SAVE, 0);
 	while (1) {
@@ -955,14 +953,13 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 	omapfb_conf = fbdev->dev->platform_data;
 	ctrl_conf = omapfb_conf->ctrl_platform_data;
 
-	if (ctrl_conf == NULL || ctrl_conf->get_clock_rate == NULL) {
+	if (ctrl_conf == NULL || ctrl_conf->sys_ck == NULL) {
 		dev_err(fbdev->dev, "HWA742: missing platform data\n");
 		r = -ENOENT;
 		goto err1;
 	}
 
-	hwa742.power_down = ctrl_conf->power_down;
-	hwa742.power_up = ctrl_conf->power_up;
+	hwa742.sys_ck = ctrl_conf->sys_ck;
 
 	spin_lock_init(&hwa742.req_lock);
 
@@ -972,12 +969,11 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 	if ((r = hwa742.extif->init(fbdev)) < 0)
 		goto err2;
 
-	ext_clk = ctrl_conf->get_clock_rate(fbdev->dev);
+	ext_clk = clk_get_rate(hwa742.sys_ck);
 	if ((r = calc_extif_timings(ext_clk, &extif_mem_div)) < 0)
 		goto err3;
 	hwa742.extif->set_timings(&hwa742.reg_timings);
-	if (hwa742.power_up != NULL)
-		hwa742.power_up(fbdev->dev);
+	clk_enable(hwa742.sys_ck);
 
 	calc_hwa742_clk_rates(ext_clk, &sys_clk, &pix_clk);
 	if ((r = calc_extif_timings(sys_clk, &extif_mem_div)) < 0)
@@ -1040,8 +1036,7 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 
 	return 0;
 err4:
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 err3:
 	hwa742.extif->cleanup();
 err2:
@@ -1055,8 +1050,7 @@ static void hwa742_cleanup(void)
 	hwa742_set_update_mode(OMAPFB_UPDATE_DISABLED);
 	hwa742.extif->cleanup();
 	hwa742.int_ctrl->cleanup();
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(hwa742.fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 }
 
 struct lcd_ctrl hwa742_ctrl = {
author maintainer
#22 lore raw

PATCH 6/10 ARM: OMAP2/3: DMA: implement trans copy and const fill

In reply to Tony Lindgren

From: Tomi Valkeinen <[email protected]>

Implement transparent copy and constant fill features for OMAP2/3.

---
 arch/arm/plat-omap/dma.c              |   77 +++++++++++++++++++++------------
 arch/arm/plat-omap/include/mach/dma.h |    1 
 2 files changed, 50 insertions(+), 28 deletions(-)
arch/arm/plat-omap/dma.c +49 -28
index 7fc8c04..58d98ad 100644
@@ -310,41 +310,62 @@ EXPORT_SYMBOL(omap_set_dma_transfer_params);
 
 void omap_set_dma_color_mode(int lch, enum omap_dma_color_mode mode, u32 color)
 {
-	u16 w;
-
 	BUG_ON(omap_dma_in_1510_mode());
 
-	if (cpu_class_is_omap2()) {
-		REVISIT_24XX();
-		return;
-	}
+	if (cpu_class_is_omap1()) {
+		u16 w;
 
-	w = dma_read(CCR2(lch));
-	w &= ~0x03;
+		w = dma_read(CCR2(lch));
+		w &= ~0x03;
 
-	switch (mode) {
-	case OMAP_DMA_CONSTANT_FILL:
-		w |= 0x01;
-		break;
-	case OMAP_DMA_TRANSPARENT_COPY:
-		w |= 0x02;
-		break;
-	case OMAP_DMA_COLOR_DIS:
-		break;
-	default:
-		BUG();
+		switch (mode) {
+		case OMAP_DMA_CONSTANT_FILL:
+			w |= 0x01;
+			break;
+		case OMAP_DMA_TRANSPARENT_COPY:
+			w |= 0x02;
+			break;
+		case OMAP_DMA_COLOR_DIS:
+			break;
+		default:
+			BUG();
+		}
+		dma_write(w, CCR2(lch));
+
+		w = dma_read(LCH_CTRL(lch));
+		w &= ~0x0f;
+		/* Default is channel type 2D */
+		if (mode) {
+			dma_write((u16)color, COLOR_L(lch));
+			dma_write((u16)(color >> 16), COLOR_U(lch));
+			w |= 1;		/* Channel type G */
+		}
+		dma_write(w, LCH_CTRL(lch));
 	}
-	dma_write(w, CCR2(lch));
 
-	w = dma_read(LCH_CTRL(lch));
-	w &= ~0x0f;
-	/* Default is channel type 2D */
-	if (mode) {
-		dma_write((u16)color, COLOR_L(lch));
-		dma_write((u16)(color >> 16), COLOR_U(lch));
-		w |= 1;		/* Channel type G */
+	if (cpu_class_is_omap2()) {
+		u32 val;
+
+		val = dma_read(CCR(lch));
+		val &= ~((1 << 17) | (1 << 16));
+
+		switch (mode) {
+		case OMAP_DMA_CONSTANT_FILL:
+			val |= 1 << 16;
+			break;
+		case OMAP_DMA_TRANSPARENT_COPY:
+			val |= 1 << 17;
+			break;
+		case OMAP_DMA_COLOR_DIS:
+			break;
+		default:
+			BUG();
+		}
+		dma_write(val, CCR(lch));
+
+		color &= 0xffffff;
+		dma_write(color, COLOR(lch));
 	}
-	dma_write(w, LCH_CTRL(lch));
 }
 EXPORT_SYMBOL(omap_set_dma_color_mode);
 
arch/arm/plat-omap/include/mach/dma.h +1 -0
index 54fe966..35fefdb 100644
@@ -144,6 +144,7 @@
 #define OMAP_DMA4_CSSA_U(n)		0
 #define OMAP_DMA4_CDSA_L(n)		0
 #define OMAP_DMA4_CDSA_U(n)		0
+#define OMAP1_DMA_COLOR(n)		0
 
 /*----------------------------------------------------------------------------*/
 
author maintainer
#23 lore raw

PATCH 7/10 ARM: OMAP2/3: sDMA: Correct omap_request_dma_chain()

In reply to Tony Lindgren

From: Santosh Shilimkar <[email protected]>

Original OMAP DMA chaining design has chain_id as one of the callback parameters. Patch 538528de0cb256f65716ab2e9613d9e920f97fe2 broke the desing.

Change the callback to return the logical channel number and not chain_id.

More details are on this email thread:

http://marc.info/?l=linux-omap&m=122961071931459&w=2

---
 arch/arm/plat-omap/dma.c              |    2 +-
 arch/arm/plat-omap/include/mach/dma.h |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
arch/arm/plat-omap/dma.c +1 -1
index 58d98ad..06e9cbe 100644
@@ -1220,7 +1220,7 @@ static void create_dma_lch_chain(int lch_head, int lch_queue)
  * 	     Failure: -EINVAL/-ENOMEM
  */
 int omap_request_dma_chain(int dev_id, const char *dev_name,
-			   void (*callback) (int chain_id, u16 ch_status,
+			   void (*callback) (int lch, u16 ch_status,
 					     void *data),
 			   int *chain_id, int no_of_chans, int chain_mode,
 			   struct omap_dma_channel_params params)
arch/arm/plat-omap/include/mach/dma.h +1 -1
index 35fefdb..19df76f 100644
@@ -532,7 +532,7 @@ extern int omap_get_dma_index(int lch, int *ei, int *fi);
 /* Chaining APIs */
 #ifndef CONFIG_ARCH_OMAP1
 extern int omap_request_dma_chain(int dev_id, const char *dev_name,
-				  void (*callback) (int chain_id, u16 ch_status,
+				  void (*callback) (int lch, u16 ch_status,
 						    void *data),
 				  int *chain_id, int no_of_chans,
 				  int chain_mode,
author maintainer
#28 lore raw

PATCH 8/10 ARM: OMAP2/3: Add generic onenand support when connected to GPMC

In reply to Tony Lindgren

From: Juha Yrjola <[email protected]>

Add generic onenand support when connected to GPMC and make the boards to use it.

The patch has been modified to make it more generic to support all the boards with GPMC. The patch also remove unused prototype for omap2_onenand_rephase(void).

Note that board-apollon.c is currently using the MTD_ONENAND_GENERIC and setting the GPMC timings in the bootloader. Setting the GPMC timings in the bootloader will not allow supporting frequency scaling for the onenand source clock.

---
 arch/arm/configs/rx51_defconfig              |    2 
 arch/arm/mach-omap2/Makefile                 |    3 
 arch/arm/mach-omap2/board-rx51-peripherals.c |   52 ++++
 arch/arm/mach-omap2/gpmc-onenand.c           |  340 ++++++++++++++++++++++++++
 arch/arm/plat-omap/include/mach/onenand.h    |   29 ++
 5 files changed, 423 insertions(+), 3 deletions(-)
 create mode 100644 arch/arm/mach-omap2/gpmc-onenand.c
arch/arm/configs/rx51_defconfig +1 -1
index 593102d..eb2cb31 100644
@@ -282,7 +282,7 @@ CONFIG_ALIGNMENT_TRAP=y
 #
 CONFIG_ZBOOT_ROM_TEXT=0x0
 CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="init=/sbin/preinit ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs rw console=ttyMTD5"
+CONFIG_CMDLINE="init=/sbin/preinit ubi.mtd=rootfs root=ubi0:rootfs rootfstype=ubifs rootflags=bulk_read,no_chk_data_crc rw console=ttyMTD,log console=tty0"
 # CONFIG_XIP_KERNEL is not set
 # CONFIG_KEXEC is not set
 
arch/arm/mach-omap2/Makefile +3 -0
index bf3827a..11f7f66 100644
@@ -58,3 +58,6 @@ obj-$(CONFIG_MACH_NOKIA_RX51)		+= board-rx51.o \
 ifeq ($(CONFIG_USB_MUSB_SOC),y)
 obj-y					+= usb-musb.o
 endif
+
+onenand-$(CONFIG_MTD_ONENAND_OMAP2)	:= gpmc-onenand.o
+obj-y					+= $(onenand-m) $(onenand-y)
arch/arm/mach-omap2/board-rx51-peripherals.c +52 -0

69 lines not on this page · raw message

arch/arm/mach-omap2/gpmc-onenand.c new file +340 -0

340 lines not on this page · raw message

arch/arm/plat-omap/include/mach/onenand.h +27 -2
index 4649d30..94cde73 100644
@@ -9,8 +9,14 @@
  * published by the Free Software Foundation.
  */
 
+#include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 
+#ifndef __ASM_ARCH_OMAP_ONENAND_H__
+
+#define ONENAND_SYNC_READ	(1 << 0)
+#define ONENAND_SYNC_READWRITE	(1 << 1)
+
 struct omap_onenand_platform_data {
 	int			cs;
 	int			gpio_irq;
@@ -18,8 +24,27 @@ struct omap_onenand_platform_data {
 	int			nr_parts;
 	int                     (*onenand_setup)(void __iomem *, int freq);
 	int			dma_channel;
+	u8			flags;
 };
 
-int omap2_onenand_rephase(void);
-
 #define ONENAND_MAX_PARTITIONS 8
+
+#if defined(CONFIG_MTD_ONENAND_OMAP2) || \
+	defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
+
+extern void gpmc_onenand_init(struct omap_onenand_platform_data *d);
+
+#else
+
+#define board_onenand_data	NULL
+
+static inline void board_onenand_init(void)
+{
+}
+
+static inline void gpmc_onenand_init(struct omap_onenand_platform_data *d)
+{
+}
+
+#endif
+#endif
author maintainer
#31 lore raw

PATCH 9/10 ARM: OMAP2/3: Add generic smc91x support when connected to GPMC

In reply to Tony Lindgren

Convert the board-rx51 smc91x code to be generic and make the boards to use it. This allows future recalculation of the timings when the source clock gets scaled.

Also correct the rx51 interrupt to be IORESOURCE_IRQ_HIGHLEVEL.

Thanks to Paul Walmsley <[email protected]> for better GPMC timing calculations.

---
 arch/arm/mach-omap2/Makefile                  |    3 
 arch/arm/mach-omap2/board-2430sdp.c           |  101 ++-----------
 arch/arm/mach-omap2/board-3430sdp.c           |   78 +++-------
 arch/arm/mach-omap2/board-rx51-peripherals.c  |  140 +++----------------
 arch/arm/mach-omap2/gpmc-smc91x.c             |  189 +++++++++++++++++++++++++
 arch/arm/plat-omap/include/mach/gpmc-smc91x.h |   46 ++++++
 6 files changed, 301 insertions(+), 256 deletions(-)
 create mode 100644 arch/arm/mach-omap2/gpmc-smc91x.c
 create mode 100644 arch/arm/plat-omap/include/mach/gpmc-smc91x.h
arch/arm/mach-omap2/Makefile +3 -0
index 11f7f66..e4f6f61 100644
@@ -61,3 +61,6 @@ endif
 
 onenand-$(CONFIG_MTD_ONENAND_OMAP2)	:= gpmc-onenand.o
 obj-y					+= $(onenand-m) $(onenand-y)
+
+smc91x-$(CONFIG_SMC91X)			:= gpmc-smc91x.o
+obj-y					+= $(smc91x-m) $(smc91x-y)
arch/arm/mach-omap2/board-2430sdp.c +18 -83

138 lines not on this page · raw message

arch/arm/mach-omap2/board-3430sdp.c +22 -56

121 lines not on this page · raw message

arch/arm/mach-omap2/board-rx51-peripherals.c +23 -117

164 lines not on this page · raw message

arch/arm/mach-omap2/gpmc-smc91x.c new file +189 -0

189 lines not on this page · raw message

arch/arm/plat-omap/include/mach/gpmc-smc91x.h new file +46 -0

46 lines not on this page · raw message

author maintainer
#34 lore raw

PATCH 10/10 ARM: OMAP2: 2430SDP: Add FB support to board file

In reply to Tony Lindgren

From: Imre Deak <[email protected]>

Based on an earlier patch by Hunyue Yau <[email protected]> with board-*.c changes split to avoid conflicts with other device updates.

---
 arch/arm/mach-omap2/board-2430sdp.c |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/board-2430sdp.c +19 -0
index 788cfce..d1d467d 100644
@@ -41,6 +41,7 @@
 #include "mmc-twl4030.h"
 
 #define SDP2430_CS0_BASE	0x04000000
+#define SECONDARY_LCD_GPIO		147
 
 static struct mtd_partition sdp2430_partitions[] = {
 	/* bootloader (U-Boot, etc) in first sector */
@@ -96,8 +97,18 @@ static struct platform_device sdp2430_flash_device = {
 	.resource	= &sdp2430_flash_resource,
 };
 
+static struct platform_device sdp2430_lcd_device = {
+	.name		= "sdp2430_lcd",
+	.id		= -1,
+};
+
 static struct platform_device *sdp2430_devices[] __initdata = {
 	&sdp2430_flash_device,
+	&sdp2430_lcd_device,
+};
+
+static struct omap_lcd_config sdp2430_lcd_config __initdata = {
+	.ctrl_name	= "internal",
 };
 
 #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91x_MODULE)
@@ -135,6 +146,7 @@ static struct omap_uart_config sdp2430_uart_config __initdata = {
 
 static struct omap_board_config_kernel sdp2430_config[] = {
 	{OMAP_TAG_UART, &sdp2430_uart_config},
+	{OMAP_TAG_LCD, &sdp2430_lcd_config},
 };
 
 
@@ -182,6 +194,8 @@ static struct twl4030_hsmmc_info mmc[] __initdata = {
 
 static void __init omap_2430sdp_init(void)
 {
+	int ret;
+
 	omap2430_i2c_init();
 
 	platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices));
@@ -191,6 +205,11 @@ static void __init omap_2430sdp_init(void)
 	twl4030_mmc_init(mmc);
 	usb_musb_init();
 	board_smc91x_init();
+
+	/* Turn off secondary LCD backlight */
+	ret = gpio_request(SECONDARY_LCD_GPIO, "Secondary LCD backlight");
+	if (ret == 0)
+		gpio_direction_output(SECONDARY_LCD_GPIO, 0);
 }
 
 static void __init omap_2430sdp_map_io(void)
#4 lore raw

Re: [PATCH 03/10] ARM: OMAP: Update contact address of I2C registration helper

In reply to Tony Lindgren
Quoted 3 lines · Tony Lindgren

From: Jarkko Nikula <[email protected]>

This email address is going to expire soon so update it.

Should also be in MAINTAINERS, especially as that is being scripted to pull peoples contact information from that file (and git) automatically.

#9 lore raw

Re: [PATCH 05/10] ARM: OMAP1: Make 770 LCD work

In reply to Tony Lindgren
Quoted 2 lines · Tony Lindgren

Make 770 LCD work by passing the clock from platform data. Also remove the old unused functions.

I don't like this - because its passing struct clk's through platform data. That's not how things are supposed to work.

The way PXA solves this problem is to have clock aliases - see clk_add_alias().

#24 lore raw

Re: [PATCH 07/10] ARM: OMAP2/3: sDMA: Correct omap_request_dma_chain()

In reply to Tony Lindgren
Quoted 8 lines · Tony Lindgren

From: Santosh Shilimkar <[email protected]>

Original OMAP DMA chaining design has chain_id as one of the callback parameters. Patch 538528de0cb256f65716ab2e9613d9e920f97fe2 broke the desing.

Change the callback to return the logical channel number and not chain_id.

This patch does not make a material change. It merely changes the name used in a couple function pointer prototype. This has no impact on the generated code - iow, it's cosmetic.

#25 lore raw

RE: [PATCH 07/10] ARM: OMAP2/3: sDMA: Correct omap_request_dma_chain()

Quoted 17 lines

-----Original Message-----
From: Russell King - ARM Linux [mailto:[email protected]]
Sent: Monday, May 25, 2009 3:04 PM
To: Tony Lindgren
Cc: [email protected]; [email protected]; Shilimkar, Santosh
Subject: Re: [PATCH 07/10] ARM: OMAP2/3: sDMA: Correct omap_request_dma_chain()

Quoted 3 lines · Tony Lindgren

From: Santosh Shilimkar <[email protected]>

Original OMAP DMA chaining design has chain_id as one of

the callback

Quoted 3 lines

parameters. Patch 538528de0cb256f65716ab2e9613d9e920f97fe2 broke the desing.

Quoted 8 lines
Quoted 2 lines

Change the callback to return the logical channel number and not chain_id.

This patch does not make a material change. It merely changes the name
used in a couple function pointer prototype. This has no impact on the
generated code - iow, it's cosmetic.

Yes it does look cosmetic but if you see the API signature, it corrects the callback parameters which actually the DMA lib sends.

The current API signature is misleading for chained DMA transfers where the actual driver passes 'channel number' as one of the callback parameter instead of chain_id which was the original design.

Regards,
Santosh

#29 lore raw

Re: [PATCH 08/10] ARM: OMAP2/3: Add generic onenand support when connected to GPMC

In reply to Tony Lindgren
Quoted 2 lines · Tony Lindgren
(quoted diff) +2 -0
+#if defined(CONFIG_MTD_ONENAND_OMAP2) || \
+	defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)

...

Quoted 10 lines
arch/arm/mach-omap2/board-rx51-peripherals.c +6 -0
+static void __init board_onenand_init(void)
+{
+	gpmc_onenand_init(&board_onenand_data);
+}
+
+#endif
 
 void __init rx51_peripherals_init(void)
 {

arch/arm/mach-omap2/board-rx51-peripherals.c void __init rx51_peripherals_init(void) · line 469

Quoted 4 lines
arch/arm/mach-omap2/board-rx51-peripherals.c +1 -0
@@ -415,5 +466,6 @@ void __init rx51_peripherals_init(void)
 				ARRAY_SIZE(rx51_peripherals_devices));
 	rx51_i2c_init();
 	rx51_init_smc91x();
+	board_onenand_init();

This breaks without onenand support.

Quoted 14 lines
arch/arm/mach-omap2/gpmc-onenand.c new file +8 -0
new file mode 100644
index 0000000..712af59
@@ -0,0 +1,340 @@
+/*
+ * linux/arch/arm/mach-omap2/gpmc-onenand.c
+ *
+ * Copyright (C) 2006 - 2009 Nokia Corporation
+ * Contacts:	Juha Yrjola
+ *		Tony Lindgren
+ *
+ * This program is free software; you can redistribute it and/or modify

arch/arm/mach-omap2/gpmc-onenand.c line 18

Quoted 10 lines
arch/arm/mach-omap2/gpmc-onenand.c new file +10 -0
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/platform_device.h>
+#include <asm/mach/flash.h>
+#include <linux/mtd/onenand_regs.h>
+
+#include <linux/io.h>

linux/ includes together please (without asm/ includes mixed in).

arch/arm/mach-omap2/gpmc-onenand.c line 87

Quoted 9 lines
arch/arm/mach-omap2/gpmc-onenand.c new file +9 -0
+static unsigned short omap2_onenand_readw(void __iomem *addr)
+{
+	return readw(addr);
+}
+
+static void omap2_onenand_writew(unsigned short value, void __iomem *addr)
+{
+	writew(value, addr);
+}

These two are pointless. Just use readw/writew directly.

arch/arm/plat-omap/include/mach/onenand.h line 15

Quoted 12 lines
arch/arm/plat-omap/include/mach/onenand.h +2 -0
index 4649d30..94cde73 100644
@@ -9,8 +9,14 @@
  * published by the Free Software Foundation.
  */
 
+#include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 
+#ifndef __ASM_ARCH_OMAP_ONENAND_H__

This provides no protection against multiple includes on its own. You're missing a #define of this symbol.

Quoted 20 lines
arch/arm/plat-omap/include/mach/onenand.h +8 -2
+
+#define ONENAND_SYNC_READ	(1 << 0)
+#define ONENAND_SYNC_READWRITE	(1 << 1)
+
 struct omap_onenand_platform_data {
 	int			cs;
 	int			gpio_irq;
@@ -18,8 +24,27 @@ struct omap_onenand_platform_data {
 	int			nr_parts;
 	int                     (*onenand_setup)(void __iomem *, int freq);
 	int			dma_channel;
+	u8			flags;
 };
 
-int omap2_onenand_rephase(void);
-
 #define ONENAND_MAX_PARTITIONS 8
+
+#if defined(CONFIG_MTD_ONENAND_OMAP2) || \
+	defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)

arch/arm/plat-omap/include/mach/onenand.h struct omap_onenand_platform_data { · line 43

Quoted 10 lines
arch/arm/plat-omap/include/mach/onenand.h +10 -0
+
+extern void gpmc_onenand_init(struct omap_onenand_platform_data *d);
+
+#else
+
+#define board_onenand_data	NULL
+
+static inline void board_onenand_init(void)
+{
+}

Eww, you put it in a different file. Disgusting. Please put it in the _same_ file as the place it's used.

Quoted 13 lines
arch/arm/plat-omap/include/mach/onenand.h +7 -1
+
+static inline void gpmc_onenand_init(struct omap_onenand_platform_data *d)
+{
+}
+
+#endif
+#endif
 
 
-------------------------------------------------------------------
List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
FAQ:        http://www.arm.linux.org.uk/mailinglists/faq.php
Etiquette:  http://www.arm.linux.org.uk/mailinglists/etiquette.php
#32 lore raw

Re: [PATCH 09/10] ARM: OMAP2/3: Add generic smc91x support when connected to GPMC

In reply to Tony Lindgren
Quoted 3 lines · Tony Lindgren

Convert the board-rx51 smc91x code to be generic and make the boards to use it. This allows future recalculation of the timings when the source clock gets scaled.

Same complaint about splitting the stub function from where it's used - it's worse than wrapping the call in an ifdef itself.

#5 lore raw

Re: [PATCH 03/10] ARM: OMAP: Update contact address of I2C registration helper

In reply to Russell King - ARM Linux
Quoted 8 lines · On Mon, 25 May 2009 10:23:50 +0100 Russell King - ARM Linux…
Quoted 3 lines · Tony Lindgren

From: Jarkko Nikula <[email protected]>

This email address is going to expire soon so update it.

Should also be in MAINTAINERS, especially as that is being scripted to pull peoples contact information from that file (and git) automatically.

My expired old address removed from cc.

Is the arch/arm/plat-omap/i2c.c so important piece that it would need own entry in MAINTAINERS? I think arch/arm/*omap* would cover well enough most of the files.

Signature · 1 line
Jarkko
#10 lore raw

Re: [PATCH 05/10] ARM: OMAP1: Make 770 LCD work

In reply to Russell King - ARM Linux

Quoting Russell King - ARM Linux <[email protected]>:

Quoted 9 lines · Tony Lindgren
Quoted 2 lines

Make 770 LCD work by passing the clock from platform data. Also remove the old unused functions.

I don't like this - because its passing struct clk's through platform data. That's not how things are supposed to work.

The way PXA solves this problem is to have clock aliases - see clk_add_alias().

Interesting idea - I now have a prototype patch implementing this, which I'll send when I get home (otherwise it would be an "it compiles" "test" :)

There isn't a common definition of clk_add_alias() though - that symbol is defined in arch/arm/mach-pxa/clock.c, so I had to copy it into arch/arm/plat-omap/clock.c

author maintainer
#6 lore raw

Re: [PATCH 03/10] ARM: OMAP: Update contact address of I2C registration helper

In reply to Jarkko Nikula
Quoted 12 lines · Jarkko Nikula
Quoted 8 lines · On Mon, 25 May 2009 10:23:50 +0100 Russell King - ARM Linux…
Quoted 3 lines · Tony Lindgren

From: Jarkko Nikula <[email protected]>

This email address is going to expire soon so update it.

Should also be in MAINTAINERS, especially as that is being scripted to pull peoples contact information from that file (and git) automatically.

Quoted 5 lines

My expired old address removed from cc.

Is the arch/arm/plat-omap/i2c.c so important piece that it would need own entry in MAINTAINERS? I think arch/arm/*omap* would cover well enough most of the files.

Yeah we really should start hooking people up with maintainer role for the various omap stuff. I'll post a patch as patch 11/10 to this thread to start adding few.

Tony

author maintainer
#26 lore raw

Re: [PATCH 07/10] ARM: OMAP2/3: sDMA: Correct omap_request_dma_chain(), v2

In reply to Shilimkar, Santosh
Quoted 20 lines · Shilimkar, Santosh
Quoted 20 lines

-----Original Message-----
From: Russell King - ARM Linux [mailto:[email protected]]
Sent: Monday, May 25, 2009 3:04 PM
To: Tony Lindgren
Cc: [email protected]; [email protected]; Shilimkar, Santosh
Subject: Re: [PATCH 07/10] ARM: OMAP2/3: sDMA: Correct omap_request_dma_chain()

Quoted 3 lines · Tony Lindgren

From: Santosh Shilimkar <[email protected]>

Original OMAP DMA chaining design has chain_id as one of

the callback

Quoted 5 lines

parameters. Patch 538528de0cb256f65716ab2e9613d9e920f97fe2 broke the desing.

Change the callback to return the logical channel number and not chain_id.

Quoted 8 lines
Quoted 5 lines

This patch does not make a material change. It merely changes the name
used in a couple function pointer prototype. This has no impact on the
generated code - iow, it's cosmetic.

Yes it does look cosmetic but if you see the API signature, it corrects the callback parameters which actually the DMA lib sends.

The current API signature is misleading for chained DMA transfers where the actual driver passes 'channel number' as one of the callback parameter instead of chain_id which was the original design.

Here's this one with more descriptive comments.

Tony

Quoted 1 line

From eb76d1e31e2da419a66e16f90504ac3f8cdb6874 Mon Sep 17 00:00:00 2001

From: Santosh Shilimkar <[email protected]>
Date: Thu, 21 May 2009 09:11:31 -0700
Subject: [PATCH] ARM: OMAP2/3: sDMA: Correct omap_request_dma_chain(), v2

Original OMAP DMA chaining design had chain_id as one of the callback parameters. Patch 538528de0cb256f65716ab2e9613d9e920f97fe2 changed it to use logical channel instead.

Correct the naming for callback to also use logical channel number instead of the chain_id.

More details are on this email thread:

http://marc.info/?l=linux-omap&m=122961071931459&w=2

arch/arm/plat-omap/dma.c +1 -1
index 58d98ad..06e9cbe 100644
@@ -1220,7 +1220,7 @@ static void create_dma_lch_chain(int lch_head, int lch_queue)
  * 	     Failure: -EINVAL/-ENOMEM
  */
 int omap_request_dma_chain(int dev_id, const char *dev_name,
-			   void (*callback) (int chain_id, u16 ch_status,
+			   void (*callback) (int lch, u16 ch_status,
 					     void *data),
 			   int *chain_id, int no_of_chans, int chain_mode,
 			   struct omap_dma_channel_params params)
arch/arm/plat-omap/include/mach/dma.h +1 -1
index 35fefdb..19df76f 100644
@@ -532,7 +532,7 @@ extern int omap_get_dma_index(int lch, int *ei, int *fi);
 /* Chaining APIs */
 #ifndef CONFIG_ARCH_OMAP1
 extern int omap_request_dma_chain(int dev_id, const char *dev_name,
-				  void (*callback) (int chain_id, u16 ch_status,
+				  void (*callback) (int lch, u16 ch_status,
 						    void *data),
 				  int *chain_id, int no_of_chans,
 				  int chain_mode,
#11 lore raw

Re: [PATCH 05/10] ARM: OMAP1: Make 770 LCD work

In reply to Andrew de Quincey

Quoting Andrew de Quincey <[email protected]>:

Quoted 9 lines

Quoting Russell King - ARM Linux <[email protected]>:

Quoted 7 lines · Tony Lindgren
Quoted 2 lines

Make 770 LCD work by passing the clock from platform data. Also remove the old unused functions.

I don't like this - because its passing struct clk's through platform data. That's not how things are supposed to work.

Quoted 6 lines
Quoted 2 lines

The way PXA solves this problem is to have clock aliases - see clk_add_alias().

Interesting idea - I now have a prototype patch implementing this, which I'll send when I get home (otherwise it would be an "it compiles" "test" :)

There isn't a common definition of clk_add_alias() though - that symbol is defined in arch/arm/mach-pxa/clock.c, so I had to copy it into arch/arm/plat-omap/clock.c

Attached is a patch implementing this method. I don't like the duplication of the clk_alias code, but I imagine that could be resolved if this method was chosen....

arch/arm/mach-omap1/board-nokia770.c +12 -0
index 8780ca6..e70fc7c 100644
@@ -33,9 +33,11 @@
 #include <mach/common.h>
 #include <mach/dsp_common.h>
 #include <mach/omapfb.h>
+#include <mach/hwa742.h>
 #include <mach/lcd_mipid.h>
 #include <mach/mmc.h>
 #include <mach/usb.h>
+#include <mach/clock.h>
 
 #define ADS7846_PENDOWN_GPIO	15
 
@@ -163,6 +165,15 @@ static struct spi_board_info nokia770_spi_board_info[] __initdata = {
 	},
 };
 
+static struct hwa742_platform_data nokia770_hwa742_platform_data = {
+	.te_connected		= 1,
+};
+
+static void hwa742_dev_init(void)
+{
+	clk_add_alias("hwa_sys_ck", NULL, "bclk", NULL);
+	omapfb_set_ctrl_platform_data(&nokia770_hwa742_platform_data);
+}
 
 /* assume no Mini-AB port */
 
@@ -371,6 +382,7 @@ static void __init omap_nokia770_init(void)
 	omap_serial_init();
 	omap_register_i2c_bus(1, 100, NULL, 0);
 	omap_dsp_init();
+	hwa742_dev_init();
 	ads7846_dev_init();
 	mipid_dev_init();
 	omap_usb_init(&nokia770_usb_config);
arch/arm/plat-omap/clock.c +19 -0
index 29efc27..862eefd 100644
@@ -24,6 +24,7 @@
 #include <linux/debugfs.h>
 #include <linux/io.h>
 
+#include <asm/clkdev.h>
 #include <mach/clock.h>
 
 static LIST_HEAD(clocks);
@@ -359,6 +360,24 @@ static int __init clk_disable_unused(void)
 late_initcall(clk_disable_unused);
 #endif
 
+int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
+	struct device *dev)
+{
+	struct clk *r = clk_get(dev, id);
+	struct clk_lookup *l;
+
+	if (!r)
+		return -ENODEV;
+
+	l = clkdev_alloc(r, alias, alias_dev_name);
+	clk_put(r);
+	if (!l)
+		return -ENODEV;
+	clkdev_add(l);
+	return 0;
+}
+EXPORT_SYMBOL(clk_add_alias);												
+
 int __init clk_init(struct clk_functions * custom_clocks)
 {
 	if (!custom_clocks) {
arch/arm/plat-omap/include/mach/clock.h +2 -0
index 073a2c5..b53b047 100644
@@ -127,12 +127,14 @@ extern void propagate_rate(struct clk *clk);
 extern void recalculate_root_clocks(void);
 extern unsigned long followparent_recalc(struct clk *clk);
 extern void clk_enable_init_clocks(void);
+extern int clk_add_alias(const char *alias, const char *alias_dev_name, char *id, struct device *dev); 	
 #ifdef CONFIG_CPU_FREQ
 extern void clk_init_cpufreq_table(struct cpufreq_frequency_table **table);
 #endif
 
 extern const struct clkops clkops_null;
 
+
 /* Clock flags */
 /* bit 0 is free */
 #define RATE_FIXED		(1 << 1)	/* Fixed clock rate */
arch/arm/plat-omap/include/mach/hwa742.h +0 -4
index 577f492..886248d 100644
@@ -2,10 +2,6 @@
 #define _HWA742_H
 
 struct hwa742_platform_data {
-	void		(*power_up)(struct device *dev);
-	void		(*power_down)(struct device *dev);
-	unsigned long	(*get_clock_rate)(struct device *dev);
-
 	unsigned	te_connected:1;
 };
 
drivers/video/omap/hwa742.c +10 -16
index 8aa6e47..5d4f348 100644
@@ -133,8 +133,7 @@ struct {
 	struct lcd_ctrl_extif	*extif;
 	struct lcd_ctrl		*int_ctrl;
 
-	void			(*power_up)(struct device *dev);
-	void			(*power_down)(struct device *dev);
+	struct clk		*sys_ck;
 } hwa742;
 
 struct lcd_ctrl hwa742_ctrl;
@@ -915,14 +914,13 @@ static void hwa742_suspend(void)
 	hwa742_set_update_mode(OMAPFB_UPDATE_DISABLED);
 	/* Enable sleep mode */
 	hwa742_write_reg(HWA742_POWER_SAVE, 1 << 1);
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(hwa742.fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 }
 
 static void hwa742_resume(void)
 {
-	if (hwa742.power_up != NULL)
-		hwa742.power_up(hwa742.fbdev->dev);
+	clk_enable(hwa742.sys_ck);
+
 	/* Disable sleep mode */
 	hwa742_write_reg(HWA742_POWER_SAVE, 0);
 	while (1) {
@@ -955,14 +953,13 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 	omapfb_conf = fbdev->dev->platform_data;
 	ctrl_conf = omapfb_conf->ctrl_platform_data;
 
-	if (ctrl_conf == NULL || ctrl_conf->get_clock_rate == NULL) {
+	if (ctrl_conf == NULL) {
 		dev_err(fbdev->dev, "HWA742: missing platform data\n");
 		r = -ENOENT;
 		goto err1;
 	}
 
-	hwa742.power_down = ctrl_conf->power_down;
-	hwa742.power_up = ctrl_conf->power_up;
+	hwa742.sys_ck = clk_get(NULL, "hwa_sys_ck");
 
 	spin_lock_init(&hwa742.req_lock);
 
@@ -972,12 +969,11 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 	if ((r = hwa742.extif->init(fbdev)) < 0)
 		goto err2;
 
-	ext_clk = ctrl_conf->get_clock_rate(fbdev->dev);
+	ext_clk = clk_get_rate(hwa742.sys_ck);
 	if ((r = calc_extif_timings(ext_clk, &extif_mem_div)) < 0)
 		goto err3;
 	hwa742.extif->set_timings(&hwa742.reg_timings);
-	if (hwa742.power_up != NULL)
-		hwa742.power_up(fbdev->dev);
+	clk_enable(hwa742.sys_ck);
 
 	calc_hwa742_clk_rates(ext_clk, &sys_clk, &pix_clk);
 	if ((r = calc_extif_timings(sys_clk, &extif_mem_div)) < 0)
@@ -1040,8 +1036,7 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 
 	return 0;
 err4:
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 err3:
 	hwa742.extif->cleanup();
 err2:
@@ -1055,8 +1050,7 @@ static void hwa742_cleanup(void)
 	hwa742_set_update_mode(OMAPFB_UPDATE_DISABLED);
 	hwa742.extif->cleanup();
 	hwa742.int_ctrl->cleanup();
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(hwa742.fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 }
 
 struct lcd_ctrl hwa742_ctrl = {
author maintainer
#30 lore raw

Re: [PATCH 08/10] ARM: OMAP2/3: Add generic onenand support when connected to GPMC, v2

In reply to Russell King - ARM Linux
Quoted 48 lines · Russell King - ARM Linux
Quoted 2 lines · Tony Lindgren
(quoted diff) +2 -0
+#if defined(CONFIG_MTD_ONENAND_OMAP2) || \
+	defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)

...

Quoted 10 lines
(quoted diff) +6 -0
+static void __init board_onenand_init(void)
+{
+	gpmc_onenand_init(&board_onenand_data);
+}
+
+#endif
 
 void __init rx51_peripherals_init(void)
 {

Review void __init rx51_peripherals_init(void) · line 469

Quoted 4 lines
(quoted diff) +1 -0
@@ -415,5 +466,6 @@ void __init rx51_peripherals_init(void)
 				ARRAY_SIZE(rx51_peripherals_devices));
 	rx51_i2c_init();
 	rx51_init_smc91x();
+	board_onenand_init();

This breaks without onenand support.

Quoted 14 lines
arch/arm/mach-omap2/gpmc-onenand.c new file +8 -0
new file mode 100644
index 0000000..712af59
@@ -0,0 +1,340 @@
+/*
+ * linux/arch/arm/mach-omap2/gpmc-onenand.c
+ *
+ * Copyright (C) 2006 - 2009 Nokia Corporation
+ * Contacts:	Juha Yrjola
+ *		Tony Lindgren
+ *
+ * This program is free software; you can redistribute it and/or modify

arch/arm/mach-omap2/gpmc-onenand.c line 18

Quoted 10 lines
arch/arm/mach-omap2/gpmc-onenand.c new file +10 -0
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/platform_device.h>
+#include <asm/mach/flash.h>
+#include <linux/mtd/onenand_regs.h>
+
+#include <linux/io.h>

linux/ includes together please (without asm/ includes mixed in).

Quoted 11 lines

arch/arm/mach-omap2/gpmc-onenand.c line 27

Quoted 9 lines
arch/arm/mach-omap2/gpmc-onenand.c new file +9 -0
+static unsigned short omap2_onenand_readw(void __iomem *addr)
+{
+	return readw(addr);
+}
+
+static void omap2_onenand_writew(unsigned short value, void __iomem *addr)
+{
+	writew(value, addr);
+}

These two are pointless. Just use readw/writew directly.

Updated.

Quoted 8 lines
Quoted 8 lines
arch/arm/plat-omap/include/mach/onenand.h +0 -0
index 4649d30..94cde73 100644
@@ -9,8 +9,14 @@
  * published by the Free Software Foundation.
  */
 
Quoted 7 lines

arch/arm/plat-omap/include/mach/onenand.h line 15

Quoted 4 lines
arch/arm/plat-omap/include/mach/onenand.h +2 -0
+#include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 
+#ifndef __ASM_ARCH_OMAP_ONENAND_H__

This provides no protection against multiple includes on its own. You're missing a #define of this symbol.

Removed, it should not be needed here.

Quoted 34 lines
Quoted 20 lines
arch/arm/plat-omap/include/mach/onenand.h +8 -2
+
+#define ONENAND_SYNC_READ	(1 << 0)
+#define ONENAND_SYNC_READWRITE	(1 << 1)
+
 struct omap_onenand_platform_data {
 	int			cs;
 	int			gpio_irq;
@@ -18,8 +24,27 @@ struct omap_onenand_platform_data {
 	int			nr_parts;
 	int                     (*onenand_setup)(void __iomem *, int freq);
 	int			dma_channel;
+	u8			flags;
 };
 
-int omap2_onenand_rephase(void);
-
 #define ONENAND_MAX_PARTITIONS 8
+
+#if defined(CONFIG_MTD_ONENAND_OMAP2) || \
+	defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)

arch/arm/plat-omap/include/mach/onenand.h struct omap_onenand_platform_data { · line 43

Quoted 10 lines
arch/arm/plat-omap/include/mach/onenand.h +10 -0
+
+extern void gpmc_onenand_init(struct omap_onenand_platform_data *d);
+
+#else
+
+#define board_onenand_data	NULL
+
+static inline void board_onenand_init(void)
+{
+}

Eww, you put it in a different file. Disgusting. Please put it in the _same_ file as the place it's used.

Quoted 7 lines

arch/arm/plat-omap/include/mach/onenand.h struct omap_onenand_platform_data { · line 50

Quoted 7 lines
arch/arm/plat-omap/include/mach/onenand.h +7 -0
+
+static inline void gpmc_onenand_init(struct omap_onenand_platform_data *d)
+{
+}
+
+#endif
+#endif

Moved so it's local to each board-*.c file.

Updated patch below.

Regards,

Tony

Quoted 1 line

From 1cea2b823fffd69d4e1d7d9686e489bc5410ae0e Mon Sep 17 00:00:00 2001

From: Juha Yrjola <[email protected]>
Date: Thu, 21 May 2009 09:11:32 -0700
Subject: [PATCH] ARM: OMAP2/3: Add generic onenand support when connected to GPMC

Add generic onenand support when connected to GPMC and make the boards to use it.

The patch has been modified to make it more generic to support all the boards with GPMC. The patch also remove unused prototype for omap2_onenand_rephase(void).

Note that board-apollon.c is currently using the MTD_ONENAND_GENERIC and setting the GPMC timings in the bootloader. Setting the GPMC timings in the bootloader will not allow supporting frequency scaling for the onenand source clock.

arch/arm/configs/rx51_defconfig +1 -1
index 593102d..eb2cb31 100644
@@ -282,7 +282,7 @@ CONFIG_ALIGNMENT_TRAP=y
 #
 CONFIG_ZBOOT_ROM_TEXT=0x0
 CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="init=/sbin/preinit ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs rw console=ttyMTD5"
+CONFIG_CMDLINE="init=/sbin/preinit ubi.mtd=rootfs root=ubi0:rootfs rootfstype=ubifs rootflags=bulk_read,no_chk_data_crc rw console=ttyMTD,log console=tty0"
 # CONFIG_XIP_KERNEL is not set
 # CONFIG_KEXEC is not set
 
arch/arm/mach-omap2/Makefile +3 -0
index bf3827a..11f7f66 100644
@@ -58,3 +58,6 @@ obj-$(CONFIG_MACH_NOKIA_RX51)		+= board-rx51.o \
 ifeq ($(CONFIG_USB_MUSB_SOC),y)
 obj-y					+= usb-musb.o
 endif
+
+onenand-$(CONFIG_MTD_ONENAND_OMAP2)	:= gpmc-onenand.o
+obj-y					+= $(onenand-m) $(onenand-y)
arch/arm/mach-omap2/board-rx51-peripherals.c +58 -0

75 lines not on this page · raw message

arch/arm/mach-omap2/gpmc-onenand.c new file +330 -0

330 lines not on this page · raw message

arch/arm/plat-omap/include/mach/onenand.h +20 -2
index 4649d30..72f433d 100644
@@ -9,8 +9,12 @@
  * published by the Free Software Foundation.
  */
 
+#include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 
+#define ONENAND_SYNC_READ	(1 << 0)
+#define ONENAND_SYNC_READWRITE	(1 << 1)
+
 struct omap_onenand_platform_data {
 	int			cs;
 	int			gpio_irq;
@@ -18,8 +22,22 @@ struct omap_onenand_platform_data {
 	int			nr_parts;
 	int                     (*onenand_setup)(void __iomem *, int freq);
 	int			dma_channel;
+	u8			flags;
 };
 
-int omap2_onenand_rephase(void);
-
 #define ONENAND_MAX_PARTITIONS 8
+
+#if defined(CONFIG_MTD_ONENAND_OMAP2) || \
+	defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
+
+extern void gpmc_onenand_init(struct omap_onenand_platform_data *d);
+
+#else
+
+#define board_onenand_data	NULL
+
+static inline void gpmc_onenand_init(struct omap_onenand_platform_data *d)
+{
+}
+
+#endif
author maintainer
#33 lore raw

Re: [PATCH 09/10] ARM: OMAP2/3: Add generic smc91x support when connected to GPMC, v2

In reply to Russell King - ARM Linux
Quoted 7 lines · Russell King - ARM Linux
Quoted 3 lines · Tony Lindgren

Convert the board-rx51 smc91x code to be generic and make the boards to use it. This allows future recalculation of the timings when the source clock gets scaled.

Same complaint about splitting the stub function from where it's used - it's worse than wrapping the call in an ifdef itself.

Here's this one updated to make it local for each board-*.c.

Tony

Quoted 1 line

From a9bf1f89964eb53ef47e64a67d090594e5202e58 Mon Sep 17 00:00:00 2001

From: Tony Lindgren <[email protected]>
Date: Mon, 25 May 2009 09:54:42 -0700
Subject: [PATCH] ARM: OMAP2/3: Add generic smc91x support when connected to GPMC

Convert the board-rx51 smc91x code to be generic and make the boards to use it. This allows future recalculation of the timings when the source clock gets scaled.

Also correct the rx51 interrupt to be IORESOURCE_IRQ_HIGHLEVEL.

Thanks to Paul Walmsley <[email protected]> for better GPMC timing calculations.

arch/arm/mach-omap2/Makefile +3 -0
index 11f7f66..e4f6f61 100644
@@ -61,3 +61,6 @@ endif
 
 onenand-$(CONFIG_MTD_ONENAND_OMAP2)	:= gpmc-onenand.o
 obj-y					+= $(onenand-m) $(onenand-y)
+
+smc91x-$(CONFIG_SMC91X)			:= gpmc-smc91x.o
+obj-y					+= $(smc91x-m) $(smc91x-y)
arch/arm/mach-omap2/board-2430sdp.c +22 -81

142 lines not on this page · raw message

arch/arm/mach-omap2/board-3430sdp.c +28 -56

127 lines not on this page · raw message

arch/arm/mach-omap2/board-rx51-peripherals.c +29 -117

170 lines not on this page · raw message

arch/arm/mach-omap2/gpmc-smc91x.c new file +189 -0

189 lines not on this page · raw message

arch/arm/plat-omap/include/mach/gpmc-smc91x.h new file +42 -0

42 lines not on this page · raw message

author maintainer
#35 lore raw

[PATCH 11/10] ARM: OMAP: Add some entries to MAINTAINERS

In reply to Tony Lindgren

Hi all,

Here are few omap entries to MAINTAINERS as discussed several times before.

Regards,

Tony

From 7b0476d90c713d7315161bbbfe7bdcd98f3f9853 Mon Sep 17 00:00:00 2001
From: Tony Lindgren <[email protected]>
Date: Mon, 25 May 2009 10:04:16 -0700
Subject: [PATCH] ARM: OMAP: Add some entries to MAINTAINERS

Add some entries to MAINTAINERS.

Also regroup all omap entries together, and remove an inactive MMC maintainers entry, and Jarkko Lavinen instead.

MAINTAINERS +63 -14
index 2b349ba..177f216 100644
@@ -4119,6 +4119,69 @@ S:	Maintained
 F:	drivers/video/riva/
 F:	drivers/video/nvidia/
 
+OMAP SUPPORT
+P:	Tony Lindgren <[email protected]>
+M:	[email protected]
+L:	[email protected]
+W:	http://www.muru.com/linux/omap/
+W:	http://linux.omap.com/
+T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git
+S:	Maintained
+F:	arch/arm/*omap*
+
+OMAP CLOCK FRAMEWORK SUPPORT
+P:	Paul Walmsley
+M:	[email protected]
+L:	[email protected]
+S:	Maintained
+F:	arch/arm/*omap*/*clock*
+
+OMAP POWER MANAGEMENT SUPPORT
+P:	Kevin Hilman
+M:	[email protected]
+L:	[email protected]
+S:	Maintained
+F:	arch/arm/*omap*/*pm*
+
+OMAP AUDIO SUPPORT
+P:	Jarkko Nikula
+M:	[email protected]
+L:	[email protected] (subscribers-only)
+L:	[email protected]
+S:	Maintained
+F:	sound/soc/omap/
+
+OMAP FRAMEBUFFER SUPPORT
+P:	Imre Deak
+M:	[email protected]
+L:	[email protected] (moderated for non-subscribers)
+L:	[email protected]
+S:	Maintained
+F:	drivers/video/omap/
+
+OMAP MMC SUPPORT
+P:	Jarkko Lavinen
+M:	[email protected]
+L:	[email protected]
+L:	[email protected]
+S:	Maintained
+F:	drivers/mmc/host/*omap*
+
+OMAP RANDOM NUMBER GENERATOR SUPPORT
+P:	Deepak Saxena
+M:	[email protected]
+S:	Maintained
+F:	drivers/char/hw_random/omap-rng.c
+
+OMAP USB SUPPORT
+P:	Felipe Balbi
+M:	[email protected]
+P:	David Brownell
+M:	[email protected]
+L:	[email protected]
+L:	[email protected]
+S:	Maintained
+
 OMFS FILESYSTEM
 P:	Bob Copeland
 M:	[email protected]
@@ -5507,20 +5570,6 @@ F:	drivers/misc/tifm*
 F:	drivers/mmc/host/tifm_sd.c
 F:	include/linux/tifm.h
 
-TI OMAP MMC INTERFACE DRIVER
-P:	Carlos Aguiar, Anderson Briglia and Syed Khasim
-M:	[email protected]
-W:	http://linux.omap.com
-W:	http://www.muru.com/linux/omap/
-S:	Maintained
-F:	drivers/mmc/host/omap.c
-
-TI OMAP RANDOM NUMBER GENERATOR SUPPORT
-P:	Deepak Saxena
-M:	[email protected]
-S:	Maintained
-F:	drivers/char/hw_random/omap-rng.c
-
 TIPC NETWORK LAYER
 P:	Per Liden
 M:	[email protected]
#27 lore raw

RE: [PATCH 07/10] ARM: OMAP2/3: sDMA: Correct omap_request_dma_chain(), v2

In reply to Tony Lindgren
Quoted 36 lines

-----Original Message-----
From: Tony Lindgren [mailto:[email protected]]
Sent: Monday, May 25, 2009 9:59 PM
To: Shilimkar, Santosh
Cc: Russell King - ARM Linux; [email protected]; [email protected]
Subject: Re: [PATCH 07/10] ARM: OMAP2/3: sDMA: Correct omap_request_dma_chain(), v2

Quoted 20 lines · Shilimkar, Santosh
Quoted 20 lines

-----Original Message-----
From: Russell King - ARM Linux [mailto:[email protected]]
Sent: Monday, May 25, 2009 3:04 PM
To: Tony Lindgren
Cc: [email protected]; [email protected]; Shilimkar, Santosh
Subject: Re: [PATCH 07/10] ARM: OMAP2/3: sDMA: Correct omap_request_dma_chain()

Quoted 3 lines · Tony Lindgren

From: Santosh Shilimkar <[email protected]>

Original OMAP DMA chaining design has chain_id as one of

the callback

Quoted 5 lines

parameters. Patch 538528de0cb256f65716ab2e9613d9e920f97fe2 broke the desing.

Change the callback to return the logical channel number and not chain_id.

Quoted 6 lines
Quoted 5 lines

This patch does not make a material change. It merely changes the name
used in a couple function pointer prototype. This has no impact on the
generated code - iow, it's cosmetic.

Yes it does look cosmetic but if you see the API signature,

Quoted 8 lines

it corrects the callback parameters which actually the DMA lib sends.

Quoted 2 lines

The current API signature is misleading for chained DMA

transfers where the actual driver passes 'channel number' as one of the callback parameter instead of chain_id which was the original design.

Here's this one with more descriptive comments.

Thanks Tony !!

Regards,
Santosh

author maintainer Applied
#36 lore raw
In reply to Tony Lindgren
Quoted 4 lines · Tony Lindgren

Hi all,

This series contains omap updates for review. There will be one more series after this for omap3 specific patches.

I've merged these into omap for-next branch.

Quoted 64 lines

Regards,

Tony

---

Eero Nurkkala (1):
ARM: OMAP: McBSP: Fix legacy interrupts to clear their status

Imre Deak (1):
ARM: OMAP2: 2430SDP: Add FB support to board file

Jarkko Nikula (1):
ARM: OMAP: Update contact address of I2C registration helper

Juha Yrjola (1):
ARM: OMAP2/3: Add generic onenand support when connected to GPMC

Mans Rullgard (1):
ARM: OMAP: Increase VMALLOC_END to allow 256MB RAM

Santosh Shilimkar (1):
ARM: OMAP2/3: sDMA: Correct omap_request_dma_chain()

Tomi Valkeinen (1):
ARM: OMAP2/3: DMA: implement trans copy and const fill

Tony Lindgren (3):
ARM: OMAP2/3: Add generic smc91x support when connected to GPMC
ARM: OMAP1: Make 770 LCD work
ARM: OMAP1: Misc clean-up

 arch/arm/configs/rx51_defconfig               |    2 
 arch/arm/mach-omap1/Kconfig                   |    1 
 arch/arm/mach-omap1/Makefile                  |    4 
 arch/arm/mach-omap1/board-nokia770.c          |   17 +
 arch/arm/mach-omap2/Makefile                  |    6 
 arch/arm/mach-omap2/board-2430sdp.c           |  112 ++------
 arch/arm/mach-omap2/board-3430sdp.c           |   78 ++----
 arch/arm/mach-omap2/board-rx51-peripherals.c  |  192 ++++++--------
 arch/arm/mach-omap2/gpmc-onenand.c            |  340 +++++++++++++++++++++++++
 arch/arm/mach-omap2/gpmc-smc91x.c             |  189 ++++++++++++++
 arch/arm/plat-omap/dma.c                      |   79 ++++--
 arch/arm/plat-omap/i2c.c                      |    2 
 arch/arm/plat-omap/include/mach/dma.h         |    3 
 arch/arm/plat-omap/include/mach/gpmc-smc91x.h |   46 +++
 arch/arm/plat-omap/include/mach/hwa742.h      |    5 
 arch/arm/plat-omap/include/mach/onenand.h     |   29 ++
 arch/arm/plat-omap/include/mach/vmalloc.h     |    2 
 arch/arm/plat-omap/mcbsp.c                    |   30 ++
 arch/arm/plat-omap/sram.c                     |    4 
 drivers/video/omap/hwa742.c                   |   26 +-
 20 files changed, 851 insertions(+), 316 deletions(-)
 create mode 100644 arch/arm/mach-omap2/gpmc-onenand.c
 create mode 100644 arch/arm/mach-omap2/gpmc-smc91x.c
 create mode 100644 arch/arm/plat-omap/include/mach/gpmc-smc91x.h
Signature · 5 lines
Signature
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
author maintainer
#12 lore raw

Re: [PATCH 05/10] ARM: OMAP1: Make 770 LCD work

In reply to Andrew de Quincey
Quoted 18 lines · Andrew de Quincey

Quoting Andrew de Quincey <[email protected]>:

Quoted 16 lines

Quoting Russell King - ARM Linux <[email protected]>:

Quoted 9 lines · Tony Lindgren
Quoted 2 lines

Make 770 LCD work by passing the clock from platform data. Also remove the old unused functions.

I don't like this - because its passing struct clk's through platform data. That's not how things are supposed to work.

The way PXA solves this problem is to have clock aliases - see clk_add_alias().

Interesting idea - I now have a prototype patch implementing this, which I'll send when I get home (otherwise it would be an "it compiles" "test" :)

Quoted 7 lines
Quoted 3 lines

There isn't a common definition of clk_add_alias() though - that symbol is defined in arch/arm/mach-pxa/clock.c, so I had to copy it into arch/arm/plat-omap/clock.c

Attached is a patch implementing this method. I don't like the duplication of the clk_alias code, but I imagine that could be resolved if this method was chosen....

Andrew, can you please reply with your Signed-off-by?

Thanks,

Tony

Quoted 195 lines
arch/arm/mach-omap1/board-nokia770.c +12 -0
index 8780ca6..e70fc7c 100644
@@ -33,9 +33,11 @@
 #include <mach/common.h>
 #include <mach/dsp_common.h>
 #include <mach/omapfb.h>
+#include <mach/hwa742.h>
 #include <mach/lcd_mipid.h>
 #include <mach/mmc.h>
 #include <mach/usb.h>
+#include <mach/clock.h>
 
 #define ADS7846_PENDOWN_GPIO	15
 
@@ -163,6 +165,15 @@ static struct spi_board_info nokia770_spi_board_info[] __initdata = {
 	},
 };
 
+static struct hwa742_platform_data nokia770_hwa742_platform_data = {
+	.te_connected		= 1,
+};
+
+static void hwa742_dev_init(void)
+{
+	clk_add_alias("hwa_sys_ck", NULL, "bclk", NULL);
+	omapfb_set_ctrl_platform_data(&nokia770_hwa742_platform_data);
+}
 
 /* assume no Mini-AB port */
 
@@ -371,6 +382,7 @@ static void __init omap_nokia770_init(void)
 	omap_serial_init();
 	omap_register_i2c_bus(1, 100, NULL, 0);
 	omap_dsp_init();
+	hwa742_dev_init();
 	ads7846_dev_init();
 	mipid_dev_init();
 	omap_usb_init(&nokia770_usb_config);
arch/arm/plat-omap/clock.c +19 -0
index 29efc27..862eefd 100644
@@ -24,6 +24,7 @@
 #include <linux/debugfs.h>
 #include <linux/io.h>
 
+#include <asm/clkdev.h>
 #include <mach/clock.h>
 
 static LIST_HEAD(clocks);
@@ -359,6 +360,24 @@ static int __init clk_disable_unused(void)
 late_initcall(clk_disable_unused);
 #endif
 
+int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
+	struct device *dev)
+{
+	struct clk *r = clk_get(dev, id);
+	struct clk_lookup *l;
+
+	if (!r)
+		return -ENODEV;
+
+	l = clkdev_alloc(r, alias, alias_dev_name);
+	clk_put(r);
+	if (!l)
+		return -ENODEV;
+	clkdev_add(l);
+	return 0;
+}
+EXPORT_SYMBOL(clk_add_alias);												
+
 int __init clk_init(struct clk_functions * custom_clocks)
 {
 	if (!custom_clocks) {
arch/arm/plat-omap/include/mach/clock.h +2 -0
index 073a2c5..b53b047 100644
@@ -127,12 +127,14 @@ extern void propagate_rate(struct clk *clk);
 extern void recalculate_root_clocks(void);
 extern unsigned long followparent_recalc(struct clk *clk);
 extern void clk_enable_init_clocks(void);
+extern int clk_add_alias(const char *alias, const char *alias_dev_name, char *id, struct device *dev); 	
 #ifdef CONFIG_CPU_FREQ
 extern void clk_init_cpufreq_table(struct cpufreq_frequency_table **table);
 #endif
 
 extern const struct clkops clkops_null;
 
+
 /* Clock flags */
 /* bit 0 is free */
 #define RATE_FIXED		(1 << 1)	/* Fixed clock rate */
arch/arm/plat-omap/include/mach/hwa742.h +0 -4
index 577f492..886248d 100644
@@ -2,10 +2,6 @@
 #define _HWA742_H
 
 struct hwa742_platform_data {
-	void		(*power_up)(struct device *dev);
-	void		(*power_down)(struct device *dev);
-	unsigned long	(*get_clock_rate)(struct device *dev);
-
 	unsigned	te_connected:1;
 };
 
drivers/video/omap/hwa742.c +10 -16
index 8aa6e47..5d4f348 100644
@@ -133,8 +133,7 @@ struct {
 	struct lcd_ctrl_extif	*extif;
 	struct lcd_ctrl		*int_ctrl;
 
-	void			(*power_up)(struct device *dev);
-	void			(*power_down)(struct device *dev);
+	struct clk		*sys_ck;
 } hwa742;
 
 struct lcd_ctrl hwa742_ctrl;
@@ -915,14 +914,13 @@ static void hwa742_suspend(void)
 	hwa742_set_update_mode(OMAPFB_UPDATE_DISABLED);
 	/* Enable sleep mode */
 	hwa742_write_reg(HWA742_POWER_SAVE, 1 << 1);
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(hwa742.fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 }
 
 static void hwa742_resume(void)
 {
-	if (hwa742.power_up != NULL)
-		hwa742.power_up(hwa742.fbdev->dev);
+	clk_enable(hwa742.sys_ck);
+
 	/* Disable sleep mode */
 	hwa742_write_reg(HWA742_POWER_SAVE, 0);
 	while (1) {
@@ -955,14 +953,13 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 	omapfb_conf = fbdev->dev->platform_data;
 	ctrl_conf = omapfb_conf->ctrl_platform_data;
 
-	if (ctrl_conf == NULL || ctrl_conf->get_clock_rate == NULL) {
+	if (ctrl_conf == NULL) {
 		dev_err(fbdev->dev, "HWA742: missing platform data\n");
 		r = -ENOENT;
 		goto err1;
 	}
 
-	hwa742.power_down = ctrl_conf->power_down;
-	hwa742.power_up = ctrl_conf->power_up;
+	hwa742.sys_ck = clk_get(NULL, "hwa_sys_ck");
 
 	spin_lock_init(&hwa742.req_lock);
 
@@ -972,12 +969,11 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 	if ((r = hwa742.extif->init(fbdev)) < 0)
 		goto err2;
 
-	ext_clk = ctrl_conf->get_clock_rate(fbdev->dev);
+	ext_clk = clk_get_rate(hwa742.sys_ck);
 	if ((r = calc_extif_timings(ext_clk, &extif_mem_div)) < 0)
 		goto err3;
 	hwa742.extif->set_timings(&hwa742.reg_timings);
-	if (hwa742.power_up != NULL)
-		hwa742.power_up(fbdev->dev);
+	clk_enable(hwa742.sys_ck);
 
 	calc_hwa742_clk_rates(ext_clk, &sys_clk, &pix_clk);
 	if ((r = calc_extif_timings(sys_clk, &extif_mem_div)) < 0)
@@ -1040,8 +1036,7 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 
 	return 0;
 err4:
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 err3:
 	hwa742.extif->cleanup();
 err2:
@@ -1055,8 +1050,7 @@ static void hwa742_cleanup(void)
 	hwa742_set_update_mode(OMAPFB_UPDATE_DISABLED);
 	hwa742.extif->cleanup();
 	hwa742.int_ctrl->cleanup();
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(hwa742.fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 }
 
 struct lcd_ctrl hwa742_ctrl = {
#13 lore raw

Re: [PATCH 05/10] ARM: OMAP1: Make 770 LCD work

Quoting Tony Lindgren <[email protected]>:

Quoted 23 lines · Andrew de Quincey
Quoted 22 lines

Quoting Andrew de Quincey <[email protected]>:

Quoted 19 lines

Quoting Russell King - ARM Linux <[email protected]>:

Quoted 9 lines · Tony Lindgren
Quoted 2 lines

Make 770 LCD work by passing the clock from platform data. Also remove the old unused functions.

I don't like this - because its passing struct clk's through platform data. That's not how things are supposed to work.

The way PXA solves this problem is to have clock aliases - see clk_add_alias().

Interesting idea - I now have a prototype patch implementing this, which I'll send when I get home (otherwise it would be an "it compiles" "test" :)

There isn't a common definition of clk_add_alias() though - that symbol is defined in arch/arm/mach-pxa/clock.c, so I had to copy it into arch/arm/plat-omap/clock.c

Quoted 5 lines
Quoted 3 lines

Attached is a patch implementing this method. I don't like the duplication of the clk_alias code, but I imagine that could be resolved if this method was chosen....

Andrew, can you please reply with your Signed-off-by?

Sure - sorry I was holding off in case there were any comments on the method...

author maintainer
#14 lore raw

Re: [PATCH 05/10] ARM: OMAP1: Make 770 LCD work, v2

Quoted 25 lines · Andrew de Quincey

Quoting Tony Lindgren <[email protected]>:

Quoted 23 lines · Andrew de Quincey
Quoted 22 lines

Quoting Andrew de Quincey <[email protected]>:

Quoted 19 lines

Quoting Russell King - ARM Linux <[email protected]>:

Quoted 9 lines · Tony Lindgren
Quoted 2 lines

Make 770 LCD work by passing the clock from platform data. Also remove the old unused functions.

I don't like this - because its passing struct clk's through platform data. That's not how things are supposed to work.

The way PXA solves this problem is to have clock aliases - see clk_add_alias().

Interesting idea - I now have a prototype patch implementing this, which I'll send when I get home (otherwise it would be an "it compiles" "test" :)

There isn't a common definition of clk_add_alias() though - that symbol is defined in arch/arm/mach-pxa/clock.c, so I had to copy it into arch/arm/plat-omap/clock.c

Quoted 8 lines
Quoted 5 lines
Quoted 3 lines

Attached is a patch implementing this method. I don't like the duplication of the clk_alias code, but I imagine that could be resolved if this method was chosen....

Andrew, can you please reply with your Signed-off-by?

Sure - sorry I was holding off in case there were any comments on the method...

I added a note about maybe moving the clk_add_alias() to arch/arm/common/clkdev.c later.

Also noticed there were some whitespace errors, updated version below.

Regards,

Tony

Quoted 2 lines

From ad4db2847911f5847efe678d3693ca13bd3ac2ea Mon Sep 17 00:00:00 2001
From: Andrew de Quincey <[email protected]>
Date: Thu, 28 May 2009 11:54:31 -0700
Subject: [PATCH] ARM: OMAP1: Make 770 LCD work

Make 770 LCD work by adding clk_add_alias().
Also remove the old unused functions.

Note that the clk_add_alias() could probably be moved to arch/arm/clkdev.c later on.

arch/arm/mach-omap1/board-nokia770.c +12 -0
@@ -33,9 +33,11 @@
 #include <mach/common.h>
 #include <mach/dsp_common.h>
 #include <mach/omapfb.h>
+#include <mach/hwa742.h>
 #include <mach/lcd_mipid.h>
 #include <mach/mmc.h>
 #include <mach/usb.h>
+#include <mach/clock.h>
 
 #define ADS7846_PENDOWN_GPIO	15
 
@@ -163,6 +165,15 @@ static struct spi_board_info nokia770_spi_board_info[] __initdata = {
 	},
 };
 
+static struct hwa742_platform_data nokia770_hwa742_platform_data = {
+	.te_connected		= 1,
+};
+
+static void hwa742_dev_init(void)
+{
+	clk_add_alias("hwa_sys_ck", NULL, "bclk", NULL);
+	omapfb_set_ctrl_platform_data(&nokia770_hwa742_platform_data);
+}
 
 /* assume no Mini-AB port */
 
@@ -371,6 +382,7 @@ static void __init omap_nokia770_init(void)
 	omap_serial_init();
 	omap_register_i2c_bus(1, 100, NULL, 0);
 	omap_dsp_init();
+	hwa742_dev_init();
 	ads7846_dev_init();
 	mipid_dev_init();
 	omap_usb_init(&nokia770_usb_config);
arch/arm/plat-omap/clock.c +19 -0
index 29efc27..d137d42 100644
@@ -24,6 +24,7 @@
 #include <linux/debugfs.h>
 #include <linux/io.h>
 
+#include <asm/clkdev.h>
 #include <mach/clock.h>
 
 static LIST_HEAD(clocks);
@@ -359,6 +360,24 @@ static int __init clk_disable_unused(void)
 late_initcall(clk_disable_unused);
 #endif
 
+int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
+	struct device *dev)
+{
+	struct clk *r = clk_get(dev, id);
+	struct clk_lookup *l;
+
+	if (!r)
+		return -ENODEV;
+
+	l = clkdev_alloc(r, alias, alias_dev_name);
+	clk_put(r);
+	if (!l)
+		return -ENODEV;
+	clkdev_add(l);
+	return 0;
+}
+EXPORT_SYMBOL(clk_add_alias);
+
 int __init clk_init(struct clk_functions * custom_clocks)
 {
 	if (!custom_clocks) {
arch/arm/plat-omap/include/mach/clock.h +2 -0
index 073a2c5..cf32d1b 100644
@@ -127,6 +127,8 @@ extern void propagate_rate(struct clk *clk);
 extern void recalculate_root_clocks(void);
 extern unsigned long followparent_recalc(struct clk *clk);
 extern void clk_enable_init_clocks(void);
+extern int clk_add_alias(const char *alias, const char *alias_dev_name,
+				char *id, struct device *dev);
 #ifdef CONFIG_CPU_FREQ
 extern void clk_init_cpufreq_table(struct cpufreq_frequency_table **table);
 #endif
arch/arm/plat-omap/include/mach/hwa742.h +0 -4
index 577f492..886248d 100644
@@ -2,10 +2,6 @@
 #define _HWA742_H
 
 struct hwa742_platform_data {
-	void		(*power_up)(struct device *dev);
-	void		(*power_down)(struct device *dev);
-	unsigned long	(*get_clock_rate)(struct device *dev);
-
 	unsigned	te_connected:1;
 };
 
drivers/video/omap/hwa742.c +10 -16
index 8aa6e47..5d4f348 100644
@@ -133,8 +133,7 @@ struct {
 	struct lcd_ctrl_extif	*extif;
 	struct lcd_ctrl		*int_ctrl;
 
-	void			(*power_up)(struct device *dev);
-	void			(*power_down)(struct device *dev);
+	struct clk		*sys_ck;
 } hwa742;
 
 struct lcd_ctrl hwa742_ctrl;
@@ -915,14 +914,13 @@ static void hwa742_suspend(void)
 	hwa742_set_update_mode(OMAPFB_UPDATE_DISABLED);
 	/* Enable sleep mode */
 	hwa742_write_reg(HWA742_POWER_SAVE, 1 << 1);
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(hwa742.fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 }
 
 static void hwa742_resume(void)
 {
-	if (hwa742.power_up != NULL)
-		hwa742.power_up(hwa742.fbdev->dev);
+	clk_enable(hwa742.sys_ck);
+
 	/* Disable sleep mode */
 	hwa742_write_reg(HWA742_POWER_SAVE, 0);
 	while (1) {
@@ -955,14 +953,13 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 	omapfb_conf = fbdev->dev->platform_data;
 	ctrl_conf = omapfb_conf->ctrl_platform_data;
 
-	if (ctrl_conf == NULL || ctrl_conf->get_clock_rate == NULL) {
+	if (ctrl_conf == NULL) {
 		dev_err(fbdev->dev, "HWA742: missing platform data\n");
 		r = -ENOENT;
 		goto err1;
 	}
 
-	hwa742.power_down = ctrl_conf->power_down;
-	hwa742.power_up = ctrl_conf->power_up;
+	hwa742.sys_ck = clk_get(NULL, "hwa_sys_ck");
 
 	spin_lock_init(&hwa742.req_lock);
 
@@ -972,12 +969,11 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 	if ((r = hwa742.extif->init(fbdev)) < 0)
 		goto err2;
 
-	ext_clk = ctrl_conf->get_clock_rate(fbdev->dev);
+	ext_clk = clk_get_rate(hwa742.sys_ck);
 	if ((r = calc_extif_timings(ext_clk, &extif_mem_div)) < 0)
 		goto err3;
 	hwa742.extif->set_timings(&hwa742.reg_timings);
-	if (hwa742.power_up != NULL)
-		hwa742.power_up(fbdev->dev);
+	clk_enable(hwa742.sys_ck);
 
 	calc_hwa742_clk_rates(ext_clk, &sys_clk, &pix_clk);
 	if ((r = calc_extif_timings(sys_clk, &extif_mem_div)) < 0)
@@ -1040,8 +1036,7 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 
 	return 0;
 err4:
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 err3:
 	hwa742.extif->cleanup();
 err2:
@@ -1055,8 +1050,7 @@ static void hwa742_cleanup(void)
 	hwa742_set_update_mode(OMAPFB_UPDATE_DISABLED);
 	hwa742.extif->cleanup();
 	hwa742.int_ctrl->cleanup();
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(hwa742.fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 }
 
 struct lcd_ctrl hwa742_ctrl = {
#16 lore raw

Re: [PATCH 05/10] ARM: OMAP1: Make 770 LCD work

In reply to Tony Lindgren
Quoted 23 lines · Tony Lindgren
Quoted 22 lines · Andrew de Quincey

Quoting Andrew de Quincey <[email protected]>:

Quoted 19 lines

Quoting Russell King - ARM Linux <[email protected]>:

Quoted 9 lines · Tony Lindgren
Quoted 2 lines

Make 770 LCD work by passing the clock from platform data. Also remove the old unused functions.

I don't like this - because its passing struct clk's through platform data. That's not how things are supposed to work.

The way PXA solves this problem is to have clock aliases - see clk_add_alias().

Interesting idea - I now have a prototype patch implementing this, which I'll send when I get home (otherwise it would be an "it compiles" "test" :)

There isn't a common definition of clk_add_alias() though - that symbol is defined in arch/arm/mach-pxa/clock.c, so I had to copy it into arch/arm/plat-omap/clock.c

Quoted 5 lines
Quoted 3 lines

Attached is a patch implementing this method. I don't like the duplication of the clk_alias code, but I imagine that could be resolved if this method was chosen....

Andrew, can you please reply with your Signed-off-by?

Actually, I'm very tempted to suggest that clk_add_alias() should go into arch/arm/common/clkdev.c if we're going to have more people use it.

#19 lore raw

Re: [PATCH 05/10] ARM: OMAP1: Make 770 LCD work

In reply to Tony Lindgren
Quoted 9 lines · Tony Lindgren
Quoted 9 lines
arch/arm/plat-omap/clock.c +9 -0
+int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
+	struct device *dev)
+{
+	struct clk *r = clk_get(dev, id);
+	struct clk_lookup *l;
+
+	if (!r)
+		return -ENODEV;
+
Quoted 8 lines

arch/arm/plat-omap/clock.c static int __init clk_disable_unused(void) · line 379

Quoted 8 lines
arch/arm/plat-omap/clock.c +8 -0
+	l = clkdev_alloc(r, alias, alias_dev_name);
+	clk_put(r);
+	if (!l)
+		return -ENODEV;
+	clkdev_add(l);
+	return 0;
+}
+EXPORT_SYMBOL(clk_add_alias);

Oh, and a really good thing to do would be to fix the error checking and returning in there (why did I miss it in the original PXA version...)

author maintainer
#20 lore raw

PATCH 1/1 ARM: Move clk_add_alias() to arch/arm/common/clkdev.c (Re: [PATCH 05/10] ARM: OMAP1: Make 770 LCD work)

Quoted 13 lines · Russell King - ARM Linux
Quoted 12 lines · Tony Lindgren
Quoted 12 lines
(quoted diff) +12 -0
+int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
+	struct device *dev)
+{
+	struct clk *r = clk_get(dev, id);
+	struct clk_lookup *l;
+
+	if (!r)
+		return -ENODEV;
+
+	l = clkdev_alloc(r, alias, alias_dev_name);
+	clk_put(r);
+	if (!l)
Quoted 8 lines
Quoted 5 lines

Review

Quoted 5 lines
(quoted diff) +5 -0
+		return -ENODEV;
+	clkdev_add(l);
+	return 0;
+}
+EXPORT_SYMBOL(clk_add_alias);

Oh, and a really good thing to do would be to fix the error checking and returning in there (why did I miss it in the original PXA version...)

How about this? The prototype is in clk.h now, is that OK?

Tony

From e4e651822967b0530a9d092894c04149e28efe39 Mon Sep 17 00:00:00 2001
From: Tony Lindgren <[email protected]>
Date: Thu, 28 May 2009 13:24:12 -0700
Subject: [PATCH] ARM: Move clk_add_alias() to arch/arm/common/clkdev.c

This can be used for other arm platforms too as discussed on the linux-arm-kernel list.

Also check the return value with IS_ERR and return PTR_ERR as suggested by Russell King.

arch/arm/common/clkdev.c +18 -0
index 5589444..f37afd9 100644
@@ -135,6 +135,24 @@ struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id,
 }
 EXPORT_SYMBOL(clkdev_alloc);
 
+int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
+	struct device *dev)
+{
+	struct clk *r = clk_get(dev, id);
+	struct clk_lookup *l;
+
+	if (IS_ERR(r))
+		return PTR_ERR(r);
+
+	l = clkdev_alloc(r, alias, alias_dev_name);
+	clk_put(r);
+	if (!l)
+		return -ENODEV;
+	clkdev_add(l);
+	return 0;
+}
+EXPORT_SYMBOL(clk_add_alias);
+
 /*
  * clkdev_drop - remove a clock dynamically allocated
  */
arch/arm/mach-pxa/clock.c +0 -17
index db52d2c..49ae382 100644
@@ -86,20 +86,3 @@ void clks_register(struct clk_lookup *clks, size_t num)
 	for (i = 0; i < num; i++)
 		clkdev_add(&clks[i]);
 }
-
-int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
-	struct device *dev)
-{
-	struct clk *r = clk_get(dev, id);
-	struct clk_lookup *l;
-
-	if (!r)
-		return -ENODEV;
-
-	l = clkdev_alloc(r, alias, alias_dev_name);
-	clk_put(r);
-	if (!l)
-		return -ENODEV;
-	clkdev_add(l);
-	return 0;
-}
include/linux/clk.h +13 -0
index 1db9bbf..1d37f42 100644
@@ -142,4 +142,17 @@ struct clk *clk_get_parent(struct clk *clk);
  */
 struct clk *clk_get_sys(const char *dev_id, const char *con_id);
 
+/**
+ * clk_add_alias - add a new clock alias
+ * @alias: name for clock alias
+ * @alias_dev_name: device name
+ * @id: platform specific clock name
+ * @dev: device
+ *
+ * Allows using generic clock names for drivers by adding a new alias.
+ * Assumes clkdev, see clkdev.h for more info.
+ */
+int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
+			struct device *dev);
+
 #endif
author maintainer
#15 lore raw

Re: [PATCH 05/10] ARM: OMAP1: Make 770 LCD work, v3

In reply to Tony Lindgren
Quoted 32 lines · Tony Lindgren
Quoted 31 lines · Andrew de Quincey

Quoting Tony Lindgren <[email protected]>:

Quoted 28 lines · Andrew de Quincey
Quoted 18 lines

Quoting Andrew de Quincey <[email protected]>:

Quoted 16 lines

Quoting Russell King - ARM Linux <[email protected]>:

Quoted 9 lines · Tony Lindgren
Quoted 2 lines

Make 770 LCD work by passing the clock from platform data. Also remove the old unused functions.

I don't like this - because its passing struct clk's through platform data. That's not how things are supposed to work.

The way PXA solves this problem is to have clock aliases - see clk_add_alias().

Interesting idea - I now have a prototype patch implementing this, which I'll send when I get home (otherwise it would be an "it compiles" "test" :)

Quoted 7 lines
Quoted 3 lines

There isn't a common definition of clk_add_alias() though - that symbol is defined in arch/arm/mach-pxa/clock.c, so I had to copy it into arch/arm/plat-omap/clock.c

Attached is a patch implementing this method. I don't like the duplication of the clk_alias code, but I imagine that could be resolved if this method was chosen....

Andrew, can you please reply with your Signed-off-by?

Quoted 7 lines
Quoted 2 lines

Sure - sorry I was holding off in case there were any comments on the method...

I added a note about maybe moving the clk_add_alias() to arch/arm/common/clkdev.c later.

Also noticed there were some whitespace errors, updated version below.

One more time with clk_add_alias() in a separate patch.

Tony

From b2b1702dccf8ab070ecf3fdb59c77c552bbc103f Mon Sep 17 00:00:00 2001
From: Andrew de Quincey <[email protected]>
Date: Thu, 28 May 2009 13:47:48 -0700
Subject: [PATCH] ARM: OMAP1: Make 770 LCD work

Make 770 LCD work by adding clk_add_alias().
Also remove the old unused functions.

Note that the clk_add_alias() could probably be moved to arch/arm/clkdev.c later on.

arch/arm/mach-omap1/board-nokia770.c +12 -0
index 8780ca6..e70fc7c 100644
@@ -33,9 +33,11 @@
 #include <mach/common.h>
 #include <mach/dsp_common.h>
 #include <mach/omapfb.h>
+#include <mach/hwa742.h>
 #include <mach/lcd_mipid.h>
 #include <mach/mmc.h>
 #include <mach/usb.h>
+#include <mach/clock.h>
 
 #define ADS7846_PENDOWN_GPIO	15
 
@@ -163,6 +165,15 @@ static struct spi_board_info nokia770_spi_board_info[] __initdata = {
 	},
 };
 
+static struct hwa742_platform_data nokia770_hwa742_platform_data = {
+	.te_connected		= 1,
+};
+
+static void hwa742_dev_init(void)
+{
+	clk_add_alias("hwa_sys_ck", NULL, "bclk", NULL);
+	omapfb_set_ctrl_platform_data(&nokia770_hwa742_platform_data);
+}
 
 /* assume no Mini-AB port */
 
@@ -371,6 +382,7 @@ static void __init omap_nokia770_init(void)
 	omap_serial_init();
 	omap_register_i2c_bus(1, 100, NULL, 0);
 	omap_dsp_init();
+	hwa742_dev_init();
 	ads7846_dev_init();
 	mipid_dev_init();
 	omap_usb_init(&nokia770_usb_config);
arch/arm/plat-omap/include/mach/hwa742.h +0 -4
index 577f492..886248d 100644
@@ -2,10 +2,6 @@
 #define _HWA742_H
 
 struct hwa742_platform_data {
-	void		(*power_up)(struct device *dev);
-	void		(*power_down)(struct device *dev);
-	unsigned long	(*get_clock_rate)(struct device *dev);
-
 	unsigned	te_connected:1;
 };
 
drivers/video/omap/hwa742.c +10 -16
index 8aa6e47..5d4f348 100644
@@ -133,8 +133,7 @@ struct {
 	struct lcd_ctrl_extif	*extif;
 	struct lcd_ctrl		*int_ctrl;
 
-	void			(*power_up)(struct device *dev);
-	void			(*power_down)(struct device *dev);
+	struct clk		*sys_ck;
 } hwa742;
 
 struct lcd_ctrl hwa742_ctrl;
@@ -915,14 +914,13 @@ static void hwa742_suspend(void)
 	hwa742_set_update_mode(OMAPFB_UPDATE_DISABLED);
 	/* Enable sleep mode */
 	hwa742_write_reg(HWA742_POWER_SAVE, 1 << 1);
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(hwa742.fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 }
 
 static void hwa742_resume(void)
 {
-	if (hwa742.power_up != NULL)
-		hwa742.power_up(hwa742.fbdev->dev);
+	clk_enable(hwa742.sys_ck);
+
 	/* Disable sleep mode */
 	hwa742_write_reg(HWA742_POWER_SAVE, 0);
 	while (1) {
@@ -955,14 +953,13 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 	omapfb_conf = fbdev->dev->platform_data;
 	ctrl_conf = omapfb_conf->ctrl_platform_data;
 
-	if (ctrl_conf == NULL || ctrl_conf->get_clock_rate == NULL) {
+	if (ctrl_conf == NULL) {
 		dev_err(fbdev->dev, "HWA742: missing platform data\n");
 		r = -ENOENT;
 		goto err1;
 	}
 
-	hwa742.power_down = ctrl_conf->power_down;
-	hwa742.power_up = ctrl_conf->power_up;
+	hwa742.sys_ck = clk_get(NULL, "hwa_sys_ck");
 
 	spin_lock_init(&hwa742.req_lock);
 
@@ -972,12 +969,11 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 	if ((r = hwa742.extif->init(fbdev)) < 0)
 		goto err2;
 
-	ext_clk = ctrl_conf->get_clock_rate(fbdev->dev);
+	ext_clk = clk_get_rate(hwa742.sys_ck);
 	if ((r = calc_extif_timings(ext_clk, &extif_mem_div)) < 0)
 		goto err3;
 	hwa742.extif->set_timings(&hwa742.reg_timings);
-	if (hwa742.power_up != NULL)
-		hwa742.power_up(fbdev->dev);
+	clk_enable(hwa742.sys_ck);
 
 	calc_hwa742_clk_rates(ext_clk, &sys_clk, &pix_clk);
 	if ((r = calc_extif_timings(sys_clk, &extif_mem_div)) < 0)
@@ -1040,8 +1036,7 @@ static int hwa742_init(struct omapfb_device *fbdev, int ext_mode,
 
 	return 0;
 err4:
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 err3:
 	hwa742.extif->cleanup();
 err2:
@@ -1055,8 +1050,7 @@ static void hwa742_cleanup(void)
 	hwa742_set_update_mode(OMAPFB_UPDATE_DISABLED);
 	hwa742.extif->cleanup();
 	hwa742.int_ctrl->cleanup();
-	if (hwa742.power_down != NULL)
-		hwa742.power_down(hwa742.fbdev->dev);
+	clk_disable(hwa742.sys_ck);
 }
 
 struct lcd_ctrl hwa742_ctrl = {
#17 lore raw

Re: [PATCH 05/10] ARM: OMAP1: Make 770 LCD work

In reply to Russell King - ARM Linux

Quoting Russell King - ARM Linux <[email protected]>:

Quoted 24 lines · Tony Lindgren
Quoted 23 lines · Andrew de Quincey
Quoted 22 lines

Quoting Andrew de Quincey <[email protected]>:

Quoted 19 lines

Quoting Russell King - ARM Linux <[email protected]>:

Quoted 9 lines · Tony Lindgren
Quoted 2 lines

Make 770 LCD work by passing the clock from platform data. Also remove the old unused functions.

I don't like this - because its passing struct clk's through platform data. That's not how things are supposed to work.

The way PXA solves this problem is to have clock aliases - see clk_add_alias().

Interesting idea - I now have a prototype patch implementing this, which I'll send when I get home (otherwise it would be an "it compiles" "test" :)

There isn't a common definition of clk_add_alias() though - that symbol is defined in arch/arm/mach-pxa/clock.c, so I had to copy it into arch/arm/plat-omap/clock.c

Quoted 8 lines
Quoted 5 lines
Quoted 3 lines

Attached is a patch implementing this method. I don't like the duplication of the clk_alias code, but I imagine that could be resolved if this method was chosen....

Andrew, can you please reply with your Signed-off-by?

Actually, I'm very tempted to suggest that clk_add_alias() should go into arch/arm/common/clkdev.c if we're going to have more people use it.

Cool!

Out of interest, what is the best practice way to pass platform specific GPIOs around? There are a number of other n770 related drivers I'm intending on cleaning up, several of which have GPIO numbers hardcoded in them. Should these be passed in platform structures, or is there something analogous to the clk_alias for GPIOs?

#18 lore raw

Re: [PATCH 05/10] ARM: OMAP1: Make 770 LCD work

Quoted 6 lines · Andrew de Quincey

Out of interest, what is the best practice way to pass platform specific GPIOs around? There are a number of other n770 related drivers I'm intending on cleaning up, several of which have GPIO numbers hardcoded in them. Should these be passed in platform structures, or is there something analogous to the clk_alias for GPIOs?

I was told that platform structures are the preferred way. For wl12xx (a wi-fi driver) I created a set_power function pointer which will control the power gpio line:

27 struct wl12xx_platform_data {
28 void (*set_power)(bool enable);
29 };

http://git.kernel.org/?p=linux/kernel/git/linville/wireless-testing.git;a=blob;f=include/linux/spi/wl12xx.h;h=11430cab2aad71242946ebfc7c0ce778d8bf26a1;hb=HEAD

And the irq is configured in the board file and provided to wl12xx with struct spi_device.irq. So wl12xx doesn't use gpio code at all, it's all done in the board file.

Please comment if this isn't the correct way to do this.

Signature · 1 line
Kalle Valo
author maintainer
#21 lore raw

Re: [PATCH] ARM: Move clk_add_alias() to arch/arm/common/clkdev.c (Re: [PATCH 05/10] ARM: OMAP1: Make 770 LCD work)

In reply to Tony Lindgren
Quoted 23 lines · Tony Lindgren
Quoted 13 lines · Russell King - ARM Linux
Quoted 12 lines · Tony Lindgren
Quoted 12 lines
arch/arm/common/clkdev.c +12 -0
+int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
+	struct device *dev)
+{
+	struct clk *r = clk_get(dev, id);
+	struct clk_lookup *l;
+
+	if (!r)
+		return -ENODEV;
+
+	l = clkdev_alloc(r, alias, alias_dev_name);
+	clk_put(r);
+	if (!l)
Quoted 8 lines
Quoted 5 lines

arch/arm/common/clkdev.c struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id, · line 154

Quoted 5 lines
arch/arm/common/clkdev.c +5 -0
+		return -ENODEV;
+	clkdev_add(l);
+	return 0;
+}
+EXPORT_SYMBOL(clk_add_alias);

Oh, and a really good thing to do would be to fix the error checking and returning in there (why did I miss it in the original PXA version...)

Quoted 1 line

How about this? The prototype is in clk.h now, is that OK?

Added to patch tracking as 5536/1.

Quoted 91 lines

Tony

From e4e651822967b0530a9d092894c04149e28efe39 Mon Sep 17 00:00:00 2001
From: Tony Lindgren <[email protected]>
Date: Thu, 28 May 2009 13:24:12 -0700
Subject: [PATCH] ARM: Move clk_add_alias() to arch/arm/common/clkdev.c

This can be used for other arm platforms too as discussed on the linux-arm-kernel list.

Also check the return value with IS_ERR and return PTR_ERR as suggested by Russell King.

arch/arm/common/clkdev.c +18 -0
index 5589444..f37afd9 100644
@@ -135,6 +135,24 @@ struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id,
 }
 EXPORT_SYMBOL(clkdev_alloc);
 
+int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
+	struct device *dev)
+{
+	struct clk *r = clk_get(dev, id);
+	struct clk_lookup *l;
+
+	if (IS_ERR(r))
+		return PTR_ERR(r);
+
+	l = clkdev_alloc(r, alias, alias_dev_name);
+	clk_put(r);
+	if (!l)
+		return -ENODEV;
+	clkdev_add(l);
+	return 0;
+}
+EXPORT_SYMBOL(clk_add_alias);
+
 /*
  * clkdev_drop - remove a clock dynamically allocated
  */
arch/arm/mach-pxa/clock.c +0 -17
index db52d2c..49ae382 100644
@@ -86,20 +86,3 @@ void clks_register(struct clk_lookup *clks, size_t num)
 	for (i = 0; i < num; i++)
 		clkdev_add(&clks[i]);
 }
-
-int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
-	struct device *dev)
-{
-	struct clk *r = clk_get(dev, id);
-	struct clk_lookup *l;
-
-	if (!r)
-		return -ENODEV;
-
-	l = clkdev_alloc(r, alias, alias_dev_name);
-	clk_put(r);
-	if (!l)
-		return -ENODEV;
-	clkdev_add(l);
-	return 0;
-}
include/linux/clk.h +13 -0
index 1db9bbf..1d37f42 100644
@@ -142,4 +142,17 @@ struct clk *clk_get_parent(struct clk *clk);
  */
 struct clk *clk_get_sys(const char *dev_id, const char *con_id);
 
+/**
+ * clk_add_alias - add a new clock alias
+ * @alias: name for clock alias
+ * @alias_dev_name: device name
+ * @id: platform specific clock name
+ * @dev: device
+ *
+ * Allows using generic clock names for drivers by adding a new alias.
+ * Assumes clkdev, see clkdev.h for more info.
+ */
+int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
+			struct device *dev);
+
 #endif