Patchwork [Maverick] UBUNTU: SAUCE: Enable USB and Ethernet on the XM

login
register
mail settings
Submitter Lee Jones
Date July 20, 2010, 3:25 p.m.
Message ID <4C45BFD7.3060800@canonical.com>
Download mbox | patch
Permalink /patch/59334/
State Accepted
Delegated to: Leann Ogasawara
Headers show

Comments

Lee Jones - July 20, 2010, 3:25 p.m.
From a2f11a44e5834d75611c88af69036cfe26eddf05 Mon Sep 17 00:00:00 2001
From: Lee Jones <lee.jones@canonical.com>
Date: Tue, 20 Jul 2010 16:54:12 +0200
Subject: [PATCH] UBUNTU: SAUCE: Enable USB and Ethernet on the XM

Provide the required setup to enable USB Ethernet (usb0)
and USB host on the XM Beagleboard (A rev).

Signed-off-by: Lee Jones <lee.jones@canonical.com>
---
 arch/arm/mach-omap2/board-omap3beagle.c |   32 +++++++++++------
 arch/arm/plat-omap/include/plat/cpu.h   |   56 +++++++++++++++++++++++++++++++
 drivers/video/omap2/dss/dispc.c         |    4 +-
 drivers/video/omap2/dss/dpi.c           |    7 +++-
 4 files changed, 85 insertions(+), 14 deletions(-)
Tim Gardner - July 20, 2010, 4:06 p.m.
On 07/20/2010 05:25 PM, Lee Jones wrote:
>  From a2f11a44e5834d75611c88af69036cfe26eddf05 Mon Sep 17 00:00:00 2001
> From: Lee Jones<lee.jones@canonical.com>
> Date: Tue, 20 Jul 2010 16:54:12 +0200
> Subject: [PATCH] UBUNTU: SAUCE: Enable USB and Ethernet on the XM
>
> Provide the required setup to enable USB Ethernet (usb0)
> and USB host on the XM Beagleboard (A rev).
>
> Signed-off-by: Lee Jones<lee.jones@canonical.com>
> ---
>   arch/arm/mach-omap2/board-omap3beagle.c |   32 +++++++++++------
>   arch/arm/plat-omap/include/plat/cpu.h   |   56 +++++++++++++++++++++++++++++++
>   drivers/video/omap2/dss/dispc.c         |    4 +-
>   drivers/video/omap2/dss/dpi.c           |    7 +++-
>   4 files changed, 85 insertions(+), 14 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
> index 32565dc..7a1b351 100644
> --- a/arch/arm/mach-omap2/board-omap3beagle.c
> +++ b/arch/arm/mach-omap2/board-omap3beagle.c
> @@ -171,6 +171,11 @@ static void __init beagle_display_init(void)
>   {
>   	int r;
>
> +       if (cpu_is_omap3630())
> +               beagle_dvi_device.reset_gpio = 129;
> +       else
> +               beagle_dvi_device.reset_gpio = 170;
> +
>   	r = gpio_request(beagle_dvi_device.reset_gpio, "DVI reset");
>   	if (r<  0) {
>   		printk(KERN_ERR "Unable to get DVI reset GPIO\n");
> @@ -222,12 +227,22 @@ static int beagle_twl_gpio_setup(struct device *dev,
>   	 * power switch and overcurrent detect
>   	 */
>
> -	gpio_request(gpio + 1, "EHCI_nOC");
> -	gpio_direction_input(gpio + 1);
> -
> -	/* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
> -	gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
> -	gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
> +       if (cpu_is_omap3630()) {
> +               gpio_request(gpio + 1, "nDVI_PWR_EN");
> +               gpio_direction_output(gpio + 1, 0);
> +
> +               /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
> +               gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
> +               gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1);
> +       }
> +       else {
> +               gpio_request(gpio + 1, "EHCI_nOC");
> +               gpio_direction_input(gpio + 1);
> +
> +               /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
> +               gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
> +               gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
> +       }
>
>   	/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
>   	gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
> @@ -492,11 +507,6 @@ static void __init omap3_beagle_init(void)
>   			ARRAY_SIZE(omap3_beagle_devices));
>   	omap_serial_init();
>
> -	omap_mux_init_gpio(170, OMAP_PIN_INPUT);
> -	gpio_request(170, "DVI_nPD");
> -	/* REVISIT leave DVI powered down until it's needed ... */
> -	gpio_direction_output(170, true);
> -
>   	usb_musb_init(&musb_board_data);
>   	usb_ehci_init(&ehci_pdata);
>   	omap3beagle_flash_init();
> diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h
> index 7514174..5e76126 100644
> --- a/arch/arm/plat-omap/include/plat/cpu.h
> +++ b/arch/arm/plat-omap/include/plat/cpu.h
> @@ -389,6 +389,62 @@ IS_OMAP_TYPE(3517, 0x3517)
>   #define OMAP4430_REV_ES1_0	0x44300044
>
>   /*
> + * Silicon revisions
> + */
> +#define OMAP_ES_1_0		0x00
> +#define OMAP_ES_2_0		0x10
> +#define OMAP_ES_2_1		0x20
> +#define OMAP_ES_3_0		0x30
> +#define OMAP_ES_3_1		0x40
> +
> +#define OMAP_REV_MASK		0x0000ff00
> +#define OMAP_REV_BITS		((omap_rev()&  OMAP_REV_MASK)>>  8)
> +
> +#define OMAP_REV_IS(revid)					\
> +static inline u8 omap_rev_is_ ##revid (void)			\
> +{								\
> +	return (OMAP_REV_BITS == OMAP_ES_ ##revid) ? 1 : 0;	\
> +}
> +
> +#define OMAP_REV_LT(revid)					\
> +static inline u8 omap_rev_lt_ ##revid (void)			\
> +{								\
> +	return (OMAP_REV_BITS<  OMAP_ES_ ##revid) ? 1 : 0;	\
> +}
> +
> +#define OMAP_REV_LE(revid)					\
> +static inline u8 omap_rev_le_ ##revid (void)			\
> +{								\
> +	return (OMAP_REV_BITS<= OMAP_ES_ ##revid) ? 1 : 0;	\
> +}
> +
> +#define OMAP_REV_GT(revid)					\
> +static inline u8 omap_rev_gt_ ##revid (void)			\
> +{								\
> +	return (OMAP_REV_BITS>  OMAP_ES_ ##revid) ? 1 : 0;	\
> +}
> +
> +#define OMAP_REV_GE(revid)					\
> +static inline u8 omap_rev_ge_ ##revid (void)			\
> +{								\
> +	return (OMAP_REV_BITS>= OMAP_ES_ ##revid) ? 1 : 0;	\
> +}
> +
> +#define OMAP_REV_FUNCTIONS(revid)	\
> +	OMAP_REV_IS(revid)		\
> +	OMAP_REV_LT(revid)		\
> +	OMAP_REV_LE(revid)		\
> +	OMAP_REV_GT(revid)		\
> +	OMAP_REV_GE(revid)
> +
> +OMAP_REV_FUNCTIONS(1_0)
> +OMAP_REV_FUNCTIONS(2_0)
> +OMAP_REV_FUNCTIONS(2_1)
> +OMAP_REV_FUNCTIONS(3_0)
> +OMAP_REV_FUNCTIONS(3_1)
> +
> +/*
> +
>    * omap_chip bits
>    *
>    * CHIP_IS_OMAP{2420,2430,3430} indicate that a particular structure is
> diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
> index e777e35..6ba87d8 100644
> --- a/drivers/video/omap2/dss/dispc.c
> +++ b/drivers/video/omap2/dss/dispc.c
> @@ -2111,7 +2111,7 @@ void dispc_set_parallel_interface_mode(enum omap_parallel_interface_mode mode)
>   static bool _dispc_lcd_timings_ok(int hsw, int hfp, int hbp,
>   		int vsw, int vfp, int vbp)
>   {
> -	if (cpu_is_omap24xx() || omap_rev()<  OMAP3430_REV_ES3_0) {
> +	if (cpu_is_omap24xx() || (cpu_is_omap34xx()&&  omap_rev_lt_3_0())) {
>   		if (hsw<  1 || hsw>  64 ||
>   				hfp<  1 || hfp>  256 ||
>   				hbp<  1 || hbp>  256 ||
> @@ -2144,7 +2144,7 @@ static void _dispc_set_lcd_timings(int hsw, int hfp, int hbp,
>   {
>   	u32 timing_h, timing_v;
>
> -	if (cpu_is_omap24xx() || omap_rev()<  OMAP3430_REV_ES3_0) {
> +	if (cpu_is_omap24xx() || (cpu_is_omap34xx()&&  omap_rev_lt_3_0())) {
>   		timing_h = FLD_VAL(hsw-1, 5, 0) | FLD_VAL(hfp-1, 15, 8) |
>   			FLD_VAL(hbp-1, 27, 20);
>
> diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
> index 960e977..23047b6 100644
> --- a/drivers/video/omap2/dss/dpi.c
> +++ b/drivers/video/omap2/dss/dpi.c
> @@ -177,7 +177,12 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
>
>   #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
>   	dss_clk_enable(DSS_CLK_FCK2);
> -	r = dsi_pll_init(dssdev, 0, 1);
> +
> +	if (cpu_is_omap3630())
> +		r = dsi_pll_init(dssdev, 1, 1);
> +	else
> +		r = dsi_pll_init(dssdev, 0, 1);
> +
>   	if (r)
>   		goto err3;
>   #endif

So, where does this patch come from? Did you write the whole thing from 
scratch?

rtg
robertcnelson@gmail.com - July 20, 2010, 4:34 p.m.
On Tue, Jul 20, 2010 at 11:06 AM, Tim Gardner <tcanonical@tpi.com> wrote:
> On 07/20/2010 05:25 PM, Lee Jones wrote:
>>  From a2f11a44e5834d75611c88af69036cfe26eddf05 Mon Sep 17 00:00:00 2001
>> From: Lee Jones<lee.jones@canonical.com>
>> Date: Tue, 20 Jul 2010 16:54:12 +0200
>> Subject: [PATCH] UBUNTU: SAUCE: Enable USB and Ethernet on the XM
>>
>> Provide the required setup to enable USB Ethernet (usb0)
>> and USB host on the XM Beagleboard (A rev).
>>
>> Signed-off-by: Lee Jones<lee.jones@canonical.com>
>> ---
>>   arch/arm/mach-omap2/board-omap3beagle.c |   32 +++++++++++------
>>   arch/arm/plat-omap/include/plat/cpu.h   |   56 +++++++++++++++++++++++++++++++
>>   drivers/video/omap2/dss/dispc.c         |    4 +-
>>   drivers/video/omap2/dss/dpi.c           |    7 +++-
>>   4 files changed, 85 insertions(+), 14 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
>> index 32565dc..7a1b351 100644
>> --- a/arch/arm/mach-omap2/board-omap3beagle.c
>> +++ b/arch/arm/mach-omap2/board-omap3beagle.c
>> @@ -171,6 +171,11 @@ static void __init beagle_display_init(void)
>>   {
>>       int r;
>>
>> +       if (cpu_is_omap3630())
>> +               beagle_dvi_device.reset_gpio = 129;
>> +       else
>> +               beagle_dvi_device.reset_gpio = 170;
>> +
>>       r = gpio_request(beagle_dvi_device.reset_gpio, "DVI reset");
>>       if (r<  0) {
>>               printk(KERN_ERR "Unable to get DVI reset GPIO\n");
>> @@ -222,12 +227,22 @@ static int beagle_twl_gpio_setup(struct device *dev,
>>        * power switch and overcurrent detect
>>        */
>>
>> -     gpio_request(gpio + 1, "EHCI_nOC");
>> -     gpio_direction_input(gpio + 1);
>> -
>> -     /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
>> -     gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
>> -     gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
>> +       if (cpu_is_omap3630()) {
>> +               gpio_request(gpio + 1, "nDVI_PWR_EN");
>> +               gpio_direction_output(gpio + 1, 0);
>> +
>> +               /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
>> +               gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
>> +               gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1);
>> +       }
>> +       else {
>> +               gpio_request(gpio + 1, "EHCI_nOC");
>> +               gpio_direction_input(gpio + 1);
>> +
>> +               /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
>> +               gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
>> +               gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
>> +       }
>>
>>       /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
>>       gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
>> @@ -492,11 +507,6 @@ static void __init omap3_beagle_init(void)
>>                       ARRAY_SIZE(omap3_beagle_devices));
>>       omap_serial_init();
>>
>> -     omap_mux_init_gpio(170, OMAP_PIN_INPUT);
>> -     gpio_request(170, "DVI_nPD");
>> -     /* REVISIT leave DVI powered down until it's needed ... */
>> -     gpio_direction_output(170, true);
>> -
>>       usb_musb_init(&musb_board_data);
>>       usb_ehci_init(&ehci_pdata);
>>       omap3beagle_flash_init();
>> diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h
>> index 7514174..5e76126 100644
>> --- a/arch/arm/plat-omap/include/plat/cpu.h
>> +++ b/arch/arm/plat-omap/include/plat/cpu.h
>> @@ -389,6 +389,62 @@ IS_OMAP_TYPE(3517, 0x3517)
>>   #define OMAP4430_REV_ES1_0  0x44300044
>>
>>   /*
>> + * Silicon revisions
>> + */
>> +#define OMAP_ES_1_0          0x00
>> +#define OMAP_ES_2_0          0x10
>> +#define OMAP_ES_2_1          0x20
>> +#define OMAP_ES_3_0          0x30
>> +#define OMAP_ES_3_1          0x40
>> +
>> +#define OMAP_REV_MASK                0x0000ff00
>> +#define OMAP_REV_BITS                ((omap_rev()&  OMAP_REV_MASK)>>  8)
>> +
>> +#define OMAP_REV_IS(revid)                                   \
>> +static inline u8 omap_rev_is_ ##revid (void)                 \
>> +{                                                            \
>> +     return (OMAP_REV_BITS == OMAP_ES_ ##revid) ? 1 : 0;     \
>> +}
>> +
>> +#define OMAP_REV_LT(revid)                                   \
>> +static inline u8 omap_rev_lt_ ##revid (void)                 \
>> +{                                                            \
>> +     return (OMAP_REV_BITS<  OMAP_ES_ ##revid) ? 1 : 0;      \
>> +}
>> +
>> +#define OMAP_REV_LE(revid)                                   \
>> +static inline u8 omap_rev_le_ ##revid (void)                 \
>> +{                                                            \
>> +     return (OMAP_REV_BITS<= OMAP_ES_ ##revid) ? 1 : 0;      \
>> +}
>> +
>> +#define OMAP_REV_GT(revid)                                   \
>> +static inline u8 omap_rev_gt_ ##revid (void)                 \
>> +{                                                            \
>> +     return (OMAP_REV_BITS>  OMAP_ES_ ##revid) ? 1 : 0;      \
>> +}
>> +
>> +#define OMAP_REV_GE(revid)                                   \
>> +static inline u8 omap_rev_ge_ ##revid (void)                 \
>> +{                                                            \
>> +     return (OMAP_REV_BITS>= OMAP_ES_ ##revid) ? 1 : 0;      \
>> +}
>> +
>> +#define OMAP_REV_FUNCTIONS(revid)    \
>> +     OMAP_REV_IS(revid)              \
>> +     OMAP_REV_LT(revid)              \
>> +     OMAP_REV_LE(revid)              \
>> +     OMAP_REV_GT(revid)              \
>> +     OMAP_REV_GE(revid)
>> +
>> +OMAP_REV_FUNCTIONS(1_0)
>> +OMAP_REV_FUNCTIONS(2_0)
>> +OMAP_REV_FUNCTIONS(2_1)
>> +OMAP_REV_FUNCTIONS(3_0)
>> +OMAP_REV_FUNCTIONS(3_1)
>> +
>> +/*
>> +
>>    * omap_chip bits
>>    *
>>    * CHIP_IS_OMAP{2420,2430,3430} indicate that a particular structure is
>> diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
>> index e777e35..6ba87d8 100644
>> --- a/drivers/video/omap2/dss/dispc.c
>> +++ b/drivers/video/omap2/dss/dispc.c
>> @@ -2111,7 +2111,7 @@ void dispc_set_parallel_interface_mode(enum omap_parallel_interface_mode mode)
>>   static bool _dispc_lcd_timings_ok(int hsw, int hfp, int hbp,
>>               int vsw, int vfp, int vbp)
>>   {
>> -     if (cpu_is_omap24xx() || omap_rev()<  OMAP3430_REV_ES3_0) {
>> +     if (cpu_is_omap24xx() || (cpu_is_omap34xx()&&  omap_rev_lt_3_0())) {
>>               if (hsw<  1 || hsw>  64 ||
>>                               hfp<  1 || hfp>  256 ||
>>                               hbp<  1 || hbp>  256 ||
>> @@ -2144,7 +2144,7 @@ static void _dispc_set_lcd_timings(int hsw, int hfp, int hbp,
>>   {
>>       u32 timing_h, timing_v;
>>
>> -     if (cpu_is_omap24xx() || omap_rev()<  OMAP3430_REV_ES3_0) {
>> +     if (cpu_is_omap24xx() || (cpu_is_omap34xx()&&  omap_rev_lt_3_0())) {
>>               timing_h = FLD_VAL(hsw-1, 5, 0) | FLD_VAL(hfp-1, 15, 8) |
>>                       FLD_VAL(hbp-1, 27, 20);
>>
>> diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
>> index 960e977..23047b6 100644
>> --- a/drivers/video/omap2/dss/dpi.c
>> +++ b/drivers/video/omap2/dss/dpi.c
>> @@ -177,7 +177,12 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
>>
>>   #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
>>       dss_clk_enable(DSS_CLK_FCK2);
>> -     r = dsi_pll_init(dssdev, 0, 1);
>> +
>> +     if (cpu_is_omap3630())
>> +             r = dsi_pll_init(dssdev, 1, 1);
>> +     else
>> +             r = dsi_pll_init(dssdev, 0, 1);
>> +
>>       if (r)
>>               goto err3;
>>   #endif
>
> So, where does this patch come from? Did you write the whole thing from
> scratch?

You guys might want to cherry pick and keep them separated as they are
slowly heading upstream, and would make maintenance easier....

http://www.sakoman.com/cgi-bin/gitweb.cgi?p=linux-omap-2.6.git;a=shortlog;h=refs/heads/omap3-2.6.34

Regards,
Leann Ogasawara - July 21, 2010, 7:27 a.m.
On Tue, 2010-07-20 at 11:34 -0500, Robert Nelson wrote:
> On Tue, Jul 20, 2010 at 11:06 AM, Tim Gardner <tcanonical@tpi.com> wrote:
> > On 07/20/2010 05:25 PM, Lee Jones wrote:
> >>  From a2f11a44e5834d75611c88af69036cfe26eddf05 Mon Sep 17 00:00:00 2001
> >> From: Lee Jones<lee.jones@canonical.com>
> >> Date: Tue, 20 Jul 2010 16:54:12 +0200
> >> Subject: [PATCH] UBUNTU: SAUCE: Enable USB and Ethernet on the XM
> >>
> >> Provide the required setup to enable USB Ethernet (usb0)
> >> and USB host on the XM Beagleboard (A rev).
> >>
> >> Signed-off-by: Lee Jones<lee.jones@canonical.com>
> >> ---
> >>   arch/arm/mach-omap2/board-omap3beagle.c |   32 +++++++++++------
> >>   arch/arm/plat-omap/include/plat/cpu.h   |   56 +++++++++++++++++++++++++++++++
> >>   drivers/video/omap2/dss/dispc.c         |    4 +-
> >>   drivers/video/omap2/dss/dpi.c           |    7 +++-
> >>   4 files changed, 85 insertions(+), 14 deletions(-)
> >>
> >> diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
> >> index 32565dc..7a1b351 100644
> >> --- a/arch/arm/mach-omap2/board-omap3beagle.c
> >> +++ b/arch/arm/mach-omap2/board-omap3beagle.c
> >> @@ -171,6 +171,11 @@ static void __init beagle_display_init(void)
> >>   {
> >>       int r;
> >>
> >> +       if (cpu_is_omap3630())
> >> +               beagle_dvi_device.reset_gpio = 129;
> >> +       else
> >> +               beagle_dvi_device.reset_gpio = 170;
> >> +
> >>       r = gpio_request(beagle_dvi_device.reset_gpio, "DVI reset");
> >>       if (r<  0) {
> >>               printk(KERN_ERR "Unable to get DVI reset GPIO\n");
> >> @@ -222,12 +227,22 @@ static int beagle_twl_gpio_setup(struct device *dev,
> >>        * power switch and overcurrent detect
> >>        */
> >>
> >> -     gpio_request(gpio + 1, "EHCI_nOC");
> >> -     gpio_direction_input(gpio + 1);
> >> -
> >> -     /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
> >> -     gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
> >> -     gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
> >> +       if (cpu_is_omap3630()) {
> >> +               gpio_request(gpio + 1, "nDVI_PWR_EN");
> >> +               gpio_direction_output(gpio + 1, 0);
> >> +
> >> +               /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
> >> +               gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
> >> +               gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1);
> >> +       }
> >> +       else {
> >> +               gpio_request(gpio + 1, "EHCI_nOC");
> >> +               gpio_direction_input(gpio + 1);
> >> +
> >> +               /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
> >> +               gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
> >> +               gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
> >> +       }
> >>
> >>       /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
> >>       gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
> >> @@ -492,11 +507,6 @@ static void __init omap3_beagle_init(void)
> >>                       ARRAY_SIZE(omap3_beagle_devices));
> >>       omap_serial_init();
> >>
> >> -     omap_mux_init_gpio(170, OMAP_PIN_INPUT);
> >> -     gpio_request(170, "DVI_nPD");
> >> -     /* REVISIT leave DVI powered down until it's needed ... */
> >> -     gpio_direction_output(170, true);
> >> -
> >>       usb_musb_init(&musb_board_data);
> >>       usb_ehci_init(&ehci_pdata);
> >>       omap3beagle_flash_init();
> >> diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h
> >> index 7514174..5e76126 100644
> >> --- a/arch/arm/plat-omap/include/plat/cpu.h
> >> +++ b/arch/arm/plat-omap/include/plat/cpu.h
> >> @@ -389,6 +389,62 @@ IS_OMAP_TYPE(3517, 0x3517)
> >>   #define OMAP4430_REV_ES1_0  0x44300044
> >>
> >>   /*
> >> + * Silicon revisions
> >> + */
> >> +#define OMAP_ES_1_0          0x00
> >> +#define OMAP_ES_2_0          0x10
> >> +#define OMAP_ES_2_1          0x20
> >> +#define OMAP_ES_3_0          0x30
> >> +#define OMAP_ES_3_1          0x40
> >> +
> >> +#define OMAP_REV_MASK                0x0000ff00
> >> +#define OMAP_REV_BITS                ((omap_rev()&  OMAP_REV_MASK)>>  8)
> >> +
> >> +#define OMAP_REV_IS(revid)                                   \
> >> +static inline u8 omap_rev_is_ ##revid (void)                 \
> >> +{                                                            \
> >> +     return (OMAP_REV_BITS == OMAP_ES_ ##revid) ? 1 : 0;     \
> >> +}
> >> +
> >> +#define OMAP_REV_LT(revid)                                   \
> >> +static inline u8 omap_rev_lt_ ##revid (void)                 \
> >> +{                                                            \
> >> +     return (OMAP_REV_BITS<  OMAP_ES_ ##revid) ? 1 : 0;      \
> >> +}
> >> +
> >> +#define OMAP_REV_LE(revid)                                   \
> >> +static inline u8 omap_rev_le_ ##revid (void)                 \
> >> +{                                                            \
> >> +     return (OMAP_REV_BITS<= OMAP_ES_ ##revid) ? 1 : 0;      \
> >> +}
> >> +
> >> +#define OMAP_REV_GT(revid)                                   \
> >> +static inline u8 omap_rev_gt_ ##revid (void)                 \
> >> +{                                                            \
> >> +     return (OMAP_REV_BITS>  OMAP_ES_ ##revid) ? 1 : 0;      \
> >> +}
> >> +
> >> +#define OMAP_REV_GE(revid)                                   \
> >> +static inline u8 omap_rev_ge_ ##revid (void)                 \
> >> +{                                                            \
> >> +     return (OMAP_REV_BITS>= OMAP_ES_ ##revid) ? 1 : 0;      \
> >> +}
> >> +
> >> +#define OMAP_REV_FUNCTIONS(revid)    \
> >> +     OMAP_REV_IS(revid)              \
> >> +     OMAP_REV_LT(revid)              \
> >> +     OMAP_REV_LE(revid)              \
> >> +     OMAP_REV_GT(revid)              \
> >> +     OMAP_REV_GE(revid)
> >> +
> >> +OMAP_REV_FUNCTIONS(1_0)
> >> +OMAP_REV_FUNCTIONS(2_0)
> >> +OMAP_REV_FUNCTIONS(2_1)
> >> +OMAP_REV_FUNCTIONS(3_0)
> >> +OMAP_REV_FUNCTIONS(3_1)
> >> +
> >> +/*
> >> +
> >>    * omap_chip bits
> >>    *
> >>    * CHIP_IS_OMAP{2420,2430,3430} indicate that a particular structure is
> >> diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
> >> index e777e35..6ba87d8 100644
> >> --- a/drivers/video/omap2/dss/dispc.c
> >> +++ b/drivers/video/omap2/dss/dispc.c
> >> @@ -2111,7 +2111,7 @@ void dispc_set_parallel_interface_mode(enum omap_parallel_interface_mode mode)
> >>   static bool _dispc_lcd_timings_ok(int hsw, int hfp, int hbp,
> >>               int vsw, int vfp, int vbp)
> >>   {
> >> -     if (cpu_is_omap24xx() || omap_rev()<  OMAP3430_REV_ES3_0) {
> >> +     if (cpu_is_omap24xx() || (cpu_is_omap34xx()&&  omap_rev_lt_3_0())) {
> >>               if (hsw<  1 || hsw>  64 ||
> >>                               hfp<  1 || hfp>  256 ||
> >>                               hbp<  1 || hbp>  256 ||
> >> @@ -2144,7 +2144,7 @@ static void _dispc_set_lcd_timings(int hsw, int hfp, int hbp,
> >>   {
> >>       u32 timing_h, timing_v;
> >>
> >> -     if (cpu_is_omap24xx() || omap_rev()<  OMAP3430_REV_ES3_0) {
> >> +     if (cpu_is_omap24xx() || (cpu_is_omap34xx()&&  omap_rev_lt_3_0())) {
> >>               timing_h = FLD_VAL(hsw-1, 5, 0) | FLD_VAL(hfp-1, 15, 8) |
> >>                       FLD_VAL(hbp-1, 27, 20);
> >>
> >> diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
> >> index 960e977..23047b6 100644
> >> --- a/drivers/video/omap2/dss/dpi.c
> >> +++ b/drivers/video/omap2/dss/dpi.c
> >> @@ -177,7 +177,12 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
> >>
> >>   #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
> >>       dss_clk_enable(DSS_CLK_FCK2);
> >> -     r = dsi_pll_init(dssdev, 0, 1);
> >> +
> >> +     if (cpu_is_omap3630())
> >> +             r = dsi_pll_init(dssdev, 1, 1);
> >> +     else
> >> +             r = dsi_pll_init(dssdev, 0, 1);
> >> +
> >>       if (r)
> >>               goto err3;
> >>   #endif
> >
> > So, where does this patch come from? Did you write the whole thing from
> > scratch?
> 
> You guys might want to cherry pick and keep them separated as they are
> slowly heading upstream, and would make maintenance easier....
> 
> http://www.sakoman.com/cgi-bin/gitweb.cgi?p=linux-omap-2.6.git;a=shortlog;h=refs/heads/omap3-2.6.34

Thanks for the note Robert.  Lee, if these are indeed making their way
upstream, care to resend this as a series of patches maintaining their
provenance.  A pull request would be fine.  Was there also a bug in LP
that was tracking this issue?

Thanks,
Leann
Lee Jones - July 21, 2010, 8:21 a.m.
>>> So, where does this patch come from? Did you write the whole thing from
>>> scratch?

No, they were written by Steve Sakoman (CC'ed).

>> You guys might want to cherry pick and keep them separated as they are
>> slowly heading upstream, and would make maintenance easier....
>>
>> http://www.sakoman.com/cgi-bin/gitweb.cgi?p=linux-omap-2.6.git;a=shortlog;h=refs/heads/omap3-2.6.34

What he said. :)

Thanks Robert.

> Thanks for the note Robert.  Lee, if these are indeed making their way
> upstream, care to resend this as a series of patches maintaining their
> provenance.  A pull request would be fine.  Was there also a bug in LP
> that was tracking this issue?

They are going to go upstream, but are not being driven by me.

I assume Steve will be doing the pushing - unless you want me to Steve?

The pull request from my tree is at the bottom of this email anyway.

There was no LP bug. It was a request straight from the Linaro guys.

Would it make it easier if I did open a bug for it?

Kind regards,
Lee

============================= Pull request ===============================

The following changes since commit 94707988f7db590bf793c44529d8108d3166b962:

  UBUNTU: Ubuntu-2.6.35-9.14 (2010-07-16 15:33:55 -0700)

are available in the git repository at:
  git://kernel.ubuntu.com/lag/ubuntu-maverick.git usb-ethernet-xm

Lee Jones (1):
      UBUNTU: SAUCE: Enable USB and Ethernet on the XM

 arch/arm/mach-omap2/board-omap3beagle.c |   32 +++++++++++------
 arch/arm/plat-omap/include/plat/cpu.h   |   56 +++++++++++++++++++++++++++++++
 drivers/video/omap2/dss/dispc.c         |    4 +-
 drivers/video/omap2/dss/dpi.c           |    7 +++-
 4 files changed, 85 insertions(+), 14 deletions(-)
Lee Jones - July 21, 2010, 8:30 a.m.
> Was there also a bug in LP that was tracking this issue?

https://bugs.launchpad.net/bug/608095
Leann Ogasawara - July 21, 2010, 8:39 a.m.
On Wed, 2010-07-21 at 10:21 +0200, Lee Jones wrote:
> >>> So, where does this patch come from? Did you write the whole thing from
> >>> scratch?
> 
> No, they were written by Steve Sakoman (CC'ed).
> 
> >> You guys might want to cherry pick and keep them separated as they are
> >> slowly heading upstream, and would make maintenance easier....
> >>
> >> http://www.sakoman.com/cgi-bin/gitweb.cgi?p=linux-omap-2.6.git;a=shortlog;h=refs/heads/omap3-2.6.34
> 
> What he said. :)
> 
> Thanks Robert.
> 
> > Thanks for the note Robert.  Lee, if these are indeed making their way
> > upstream, care to resend this as a series of patches maintaining their
> > provenance.  A pull request would be fine.  Was there also a bug in LP
> > that was tracking this issue?
> 
> They are going to go upstream, but are not being driven by me.
> 
> I assume Steve will be doing the pushing - unless you want me to Steve?
> 
> The pull request from my tree is at the bottom of this email anyway.
> 
> There was no LP bug. It was a request straight from the Linaro guys.
> 
> Would it make it easier if I did open a bug for it?

It doesn't make it easier, just helpful for completeness sake.  There's
no need to open one if it doesn't exist.  If you've already done so,
just add the BugLink to the commits.

> ============================= Pull request ===============================
> 
> The following changes since commit 94707988f7db590bf793c44529d8108d3166b962:
> 
>   UBUNTU: Ubuntu-2.6.35-9.14 (2010-07-16 15:33:55 -0700)
> 
> are available in the git repository at:
>   git://kernel.ubuntu.com/lag/ubuntu-maverick.git usb-ethernet-xm
> 
> Lee Jones (1):
>       UBUNTU: SAUCE: Enable USB and Ethernet on the XM

I was actually expecting this to be separated into a series of four
patches as Steve has them in his tree.  Additionally, it would be good
to have Steve's SOB for the patches assuming he's signed off on them.

ARM: OMAP: Add macros for comparing silicon revision
OMAP: DSS2: check for both cpu type and revision, rather than just revision
OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX
ARM: OMAP: Beagle: support twl gpio differences on xM

>  arch/arm/mach-omap2/board-omap3beagle.c |   32 +++++++++++------
>  arch/arm/plat-omap/include/plat/cpu.h   |   56 +++++++++++++++++++++++++++++++
>  drivers/video/omap2/dss/dispc.c         |    4 +-
>  drivers/video/omap2/dss/dpi.c           |    7 +++-
>  4 files changed, 85 insertions(+), 14 deletions(-)

Thanks,
Leann
Lee Jones - July 21, 2010, 10:24 a.m.
> I was actually expecting this to be separated into a series of four
> patches as Steve has them in his tree.  Additionally, it would be good
> to have Steve's SOB for the patches assuming he's signed off on them.
> 
> ARM: OMAP: Add macros for comparing silicon revision
> OMAP: DSS2: check for both cpu type and revision, rather than just revision
> OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX
> ARM: OMAP: Beagle: support twl gpio differences on xM
> 
>>  arch/arm/mach-omap2/board-omap3beagle.c |   32 +++++++++++------
>>  arch/arm/plat-omap/include/plat/cpu.h   |   56 +++++++++++++++++++++++++++++++
>>  drivers/video/omap2/dss/dispc.c         |    4 +-
>>  drivers/video/omap2/dss/dpi.c           |    7 +++-
>>  4 files changed, 85 insertions(+), 14 deletions(-)

Does something more like this suit better?

The following changes since commit 707b5c94446b820cd2f9c0f1917eb41ed5621459:

  Revert "UBUNTU: SAUCE: ensure vga16fb loads if no other driver claims the VGA device" (2010-07-20 18:21:29 +0200)

are available in the git repository at:
  git://kernel.ubuntu.com/lag/ubuntu-maverick.git lp608095-usb-ethernet-xm

Lee Jones (4):
      UBUNTU: SAUCE: ARM: OMAP: Add macros for comparing silicon revision
      UBUNTU: SAUCE: OMAP: DSS2: check for both cpu type and revision, rather than just revision
      UBUNTU: SAUCE: OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX
      UBUNTU: SAUCE: ARM: OMAP: Beagle: support twl gpio differences on xM

 arch/arm/mach-omap2/board-omap3beagle.c |   32 +++++++++++------
 arch/arm/plat-omap/include/plat/cpu.h   |   56 +++++++++++++++++++++++++++++++
 drivers/video/omap2/dss/dispc.c         |    4 +-
 drivers/video/omap2/dss/dpi.c           |    7 +++-
 4 files changed, 85 insertions(+), 14 deletions(-)
Leann Ogasawara - July 21, 2010, 12:52 p.m.
On Wed, 2010-07-21 at 12:24 +0200, Lee Jones wrote:
> > I was actually expecting this to be separated into a series of four
> > patches as Steve has them in his tree.  Additionally, it would be good
> > to have Steve's SOB for the patches assuming he's signed off on them.
> > 
> > ARM: OMAP: Add macros for comparing silicon revision
> > OMAP: DSS2: check for both cpu type and revision, rather than just revision
> > OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX
> > ARM: OMAP: Beagle: support twl gpio differences on xM
> > 
> >>  arch/arm/mach-omap2/board-omap3beagle.c |   32 +++++++++++------
> >>  arch/arm/plat-omap/include/plat/cpu.h   |   56 +++++++++++++++++++++++++++++++
> >>  drivers/video/omap2/dss/dispc.c         |    4 +-
> >>  drivers/video/omap2/dss/dpi.c           |    7 +++-
> >>  4 files changed, 85 insertions(+), 14 deletions(-)
> 
> Does something more like this suit better?
> 
> The following changes since commit 707b5c94446b820cd2f9c0f1917eb41ed5621459:
> 
>   Revert "UBUNTU: SAUCE: ensure vga16fb loads if no other driver claims the VGA device" (2010-07-20 18:21:29 +0200)
> 
> are available in the git repository at:
>   git://kernel.ubuntu.com/lag/ubuntu-maverick.git lp608095-usb-ethernet-xm
> 
> Lee Jones (4):
>       UBUNTU: SAUCE: ARM: OMAP: Add macros for comparing silicon revision
>       UBUNTU: SAUCE: OMAP: DSS2: check for both cpu type and revision, rather than just revision
>       UBUNTU: SAUCE: OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX
>       UBUNTU: SAUCE: ARM: OMAP: Beagle: support twl gpio differences on xM

Thanks Lee.

Steve, I noticed your SOB was missing from the patches.  Care to sign
off on these?  I noticed the first patch, "ARM: OMAP: Add macros for
comparing silicon revision", was "Adapted from arago project patch by
Sanjeev Premi".  I assume the remaining three were authored by yourself?
I also assume you'll be working to push these upstream or should Lee
provide some assistance?

Thanks,
Leann


>  arch/arm/mach-omap2/board-omap3beagle.c |   32 +++++++++++------
>  arch/arm/plat-omap/include/plat/cpu.h   |   56 +++++++++++++++++++++++++++++++
>  drivers/video/omap2/dss/dispc.c         |    4 +-
>  drivers/video/omap2/dss/dpi.c           |    7 +++-
>  4 files changed, 85 insertions(+), 14 deletions(-)
> 
> 
>
Steve Sakoman - July 21, 2010, 9:11 p.m.
On Wed, Jul 21, 2010 at 5:52 AM, Leann Ogasawara
<leann.ogasawara@canonical.com> wrote:
> On Wed, 2010-07-21 at 12:24 +0200, Lee Jones wrote:
>> > I was actually expecting this to be separated into a series of four
>> > patches as Steve has them in his tree.  Additionally, it would be good
>> > to have Steve's SOB for the patches assuming he's signed off on them.
>> >
>> > ARM: OMAP: Add macros for comparing silicon revision
>> > OMAP: DSS2: check for both cpu type and revision, rather than just revision
>> > OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX
>> > ARM: OMAP: Beagle: support twl gpio differences on xM

Sure thing:

Signed-off-by: Steve Sakoman <steve@sakoman.com>

> Steve, I noticed your SOB was missing from the patches.  Care to sign
> off on these?

Done above.

> I noticed the first patch, "ARM: OMAP: Add macros for
> comparing silicon revision", was "Adapted from arago project patch by
> Sanjeev Premi".  I assume the remaining three were authored by yourself?

Correct

> I also assume you'll be working to push these upstream or should Lee
> provide some assistance?

I am in the process of re-basing these patches for 2.6.35 and will
submit that series.

My Beagle xM has memory issues, so I am really not able to seriously
test anything since RAM is suspect.  I've asked Jason to supply me
with a good xM when they are available.

I am testing 37xx changes on a 37XX Overo prototype, which doesn't
seem to have RAM issues.

Regards,

Steve
Lee Jones - July 27, 2010, 1:18 p.m.
On 21/07/10 22:11, Steve Sakoman wrote:
> On Wed, Jul 21, 2010 at 5:52 AM, Leann Ogasawara
> <leann.ogasawara@canonical.com> wrote:
>> On Wed, 2010-07-21 at 12:24 +0200, Lee Jones wrote:
>>>> I was actually expecting this to be separated into a series of four
>>>> patches as Steve has them in his tree.  Additionally, it would be good
>>>> to have Steve's SOB for the patches assuming he's signed off on them.
>>>>
>>>> ARM: OMAP: Add macros for comparing silicon revision
>>>> OMAP: DSS2: check for both cpu type and revision, rather than just revision
>>>> OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX
>>>> ARM: OMAP: Beagle: support twl gpio differences on xM
> 
> Sure thing:
> 
> Signed-off-by: Steve Sakoman <steve@sakoman.com>

Can these be applied to the kernel now?
Leann Ogasawara - July 27, 2010, 11:39 p.m.
Applied to Maverick linux master.

Thanks,
Leann

On Wed, 2010-07-21 at 12:24 +0200, Lee Jones wrote: 
> > I was actually expecting this to be separated into a series of four
> > patches as Steve has them in his tree.  Additionally, it would be good
> > to have Steve's SOB for the patches assuming he's signed off on them.
> > 
> > ARM: OMAP: Add macros for comparing silicon revision
> > OMAP: DSS2: check for both cpu type and revision, rather than just revision
> > OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX
> > ARM: OMAP: Beagle: support twl gpio differences on xM
> > 
> >>  arch/arm/mach-omap2/board-omap3beagle.c |   32 +++++++++++------
> >>  arch/arm/plat-omap/include/plat/cpu.h   |   56 +++++++++++++++++++++++++++++++
> >>  drivers/video/omap2/dss/dispc.c         |    4 +-
> >>  drivers/video/omap2/dss/dpi.c           |    7 +++-
> >>  4 files changed, 85 insertions(+), 14 deletions(-)
> 
> Does something more like this suit better?
> 
> The following changes since commit 707b5c94446b820cd2f9c0f1917eb41ed5621459:
> 
>   Revert "UBUNTU: SAUCE: ensure vga16fb loads if no other driver claims the VGA device" (2010-07-20 18:21:29 +0200)
> 
> are available in the git repository at:
>   git://kernel.ubuntu.com/lag/ubuntu-maverick.git lp608095-usb-ethernet-xm
> 
> Lee Jones (4):
>       UBUNTU: SAUCE: ARM: OMAP: Add macros for comparing silicon revision
>       UBUNTU: SAUCE: OMAP: DSS2: check for both cpu type and revision, rather than just revision
>       UBUNTU: SAUCE: OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX
>       UBUNTU: SAUCE: ARM: OMAP: Beagle: support twl gpio differences on xM
> 
>  arch/arm/mach-omap2/board-omap3beagle.c |   32 +++++++++++------
>  arch/arm/plat-omap/include/plat/cpu.h   |   56 +++++++++++++++++++++++++++++++
>  drivers/video/omap2/dss/dispc.c         |    4 +-
>  drivers/video/omap2/dss/dpi.c           |    7 +++-
>  4 files changed, 85 insertions(+), 14 deletions(-)
> 
> 
>

Patch

diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
index 32565dc..7a1b351 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -171,6 +171,11 @@  static void __init beagle_display_init(void)
 {
 	int r;
 
+       if (cpu_is_omap3630())
+               beagle_dvi_device.reset_gpio = 129;
+       else
+               beagle_dvi_device.reset_gpio = 170;
+
 	r = gpio_request(beagle_dvi_device.reset_gpio, "DVI reset");
 	if (r < 0) {
 		printk(KERN_ERR "Unable to get DVI reset GPIO\n");
@@ -222,12 +227,22 @@  static int beagle_twl_gpio_setup(struct device *dev,
 	 * power switch and overcurrent detect
 	 */
 
-	gpio_request(gpio + 1, "EHCI_nOC");
-	gpio_direction_input(gpio + 1);
-
-	/* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
-	gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
-	gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
+       if (cpu_is_omap3630()) {
+               gpio_request(gpio + 1, "nDVI_PWR_EN");
+               gpio_direction_output(gpio + 1, 0);
+ 
+               /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
+               gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
+               gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1);
+       }
+       else {
+               gpio_request(gpio + 1, "EHCI_nOC");
+               gpio_direction_input(gpio + 1);
+
+               /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
+               gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
+               gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
+       }
 
 	/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
 	gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
@@ -492,11 +507,6 @@  static void __init omap3_beagle_init(void)
 			ARRAY_SIZE(omap3_beagle_devices));
 	omap_serial_init();
 
-	omap_mux_init_gpio(170, OMAP_PIN_INPUT);
-	gpio_request(170, "DVI_nPD");
-	/* REVISIT leave DVI powered down until it's needed ... */
-	gpio_direction_output(170, true);
-
 	usb_musb_init(&musb_board_data);
 	usb_ehci_init(&ehci_pdata);
 	omap3beagle_flash_init();
diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h
index 7514174..5e76126 100644
--- a/arch/arm/plat-omap/include/plat/cpu.h
+++ b/arch/arm/plat-omap/include/plat/cpu.h
@@ -389,6 +389,62 @@  IS_OMAP_TYPE(3517, 0x3517)
 #define OMAP4430_REV_ES1_0	0x44300044
 
 /*
+ * Silicon revisions
+ */
+#define OMAP_ES_1_0		0x00
+#define OMAP_ES_2_0		0x10
+#define OMAP_ES_2_1		0x20
+#define OMAP_ES_3_0		0x30
+#define OMAP_ES_3_1		0x40
+
+#define OMAP_REV_MASK		0x0000ff00
+#define OMAP_REV_BITS		((omap_rev() & OMAP_REV_MASK) >> 8)
+
+#define OMAP_REV_IS(revid)					\
+static inline u8 omap_rev_is_ ##revid (void)			\
+{								\
+	return (OMAP_REV_BITS == OMAP_ES_ ##revid) ? 1 : 0;	\
+}
+
+#define OMAP_REV_LT(revid)					\
+static inline u8 omap_rev_lt_ ##revid (void)			\
+{								\
+	return (OMAP_REV_BITS < OMAP_ES_ ##revid) ? 1 : 0;	\
+}
+
+#define OMAP_REV_LE(revid)					\
+static inline u8 omap_rev_le_ ##revid (void)			\
+{								\
+	return (OMAP_REV_BITS <= OMAP_ES_ ##revid) ? 1 : 0;	\
+}
+
+#define OMAP_REV_GT(revid)					\
+static inline u8 omap_rev_gt_ ##revid (void)			\
+{								\
+	return (OMAP_REV_BITS > OMAP_ES_ ##revid) ? 1 : 0;	\
+}
+
+#define OMAP_REV_GE(revid)					\
+static inline u8 omap_rev_ge_ ##revid (void)			\
+{								\
+	return (OMAP_REV_BITS >= OMAP_ES_ ##revid) ? 1 : 0;	\
+}
+
+#define OMAP_REV_FUNCTIONS(revid)	\
+	OMAP_REV_IS(revid)		\
+	OMAP_REV_LT(revid)		\
+	OMAP_REV_LE(revid)		\
+	OMAP_REV_GT(revid)		\
+	OMAP_REV_GE(revid)
+
+OMAP_REV_FUNCTIONS(1_0)
+OMAP_REV_FUNCTIONS(2_0)
+OMAP_REV_FUNCTIONS(2_1)
+OMAP_REV_FUNCTIONS(3_0)
+OMAP_REV_FUNCTIONS(3_1)
+
+/*
+
  * omap_chip bits
  *
  * CHIP_IS_OMAP{2420,2430,3430} indicate that a particular structure is
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index e777e35..6ba87d8 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -2111,7 +2111,7 @@  void dispc_set_parallel_interface_mode(enum omap_parallel_interface_mode mode)
 static bool _dispc_lcd_timings_ok(int hsw, int hfp, int hbp,
 		int vsw, int vfp, int vbp)
 {
-	if (cpu_is_omap24xx() || omap_rev() < OMAP3430_REV_ES3_0) {
+	if (cpu_is_omap24xx() || (cpu_is_omap34xx() && omap_rev_lt_3_0())) {
 		if (hsw < 1 || hsw > 64 ||
 				hfp < 1 || hfp > 256 ||
 				hbp < 1 || hbp > 256 ||
@@ -2144,7 +2144,7 @@  static void _dispc_set_lcd_timings(int hsw, int hfp, int hbp,
 {
 	u32 timing_h, timing_v;
 
-	if (cpu_is_omap24xx() || omap_rev() < OMAP3430_REV_ES3_0) {
+	if (cpu_is_omap24xx() || (cpu_is_omap34xx() && omap_rev_lt_3_0())) {
 		timing_h = FLD_VAL(hsw-1, 5, 0) | FLD_VAL(hfp-1, 15, 8) |
 			FLD_VAL(hbp-1, 27, 20);
 
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
index 960e977..23047b6 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/omap2/dss/dpi.c
@@ -177,7 +177,12 @@  int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
 
 #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
 	dss_clk_enable(DSS_CLK_FCK2);
-	r = dsi_pll_init(dssdev, 0, 1);
+
+	if (cpu_is_omap3630())
+		r = dsi_pll_init(dssdev, 1, 1);
+	else
+		r = dsi_pll_init(dssdev, 0, 1);
+
 	if (r)
 		goto err3;
 #endif