All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tony Lindgren <tony@atomide.com>
To: Andrew de Quincey <adq_dvb@lidskialf.net>
Cc: Felipe Balbi <felipe.balbi@nokia.com>,
	"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>
Subject: Re: Patch "REMOVE OMAP LEGACY CODE: Reset mach-omap1/board-*.c files to mainline" breaks nokia770
Date: Thu, 14 May 2009 16:26:50 -0700	[thread overview]
Message-ID: <20090514232649.GY5593@atomide.com> (raw)
In-Reply-To: <20090515001855.11164yyhzqzya58g@lidskialf.net>

* Andrew de Quincey <adq_dvb@lidskialf.net> [090514 16:19]:
> Quoting Tony Lindgren <tony@atomide.com>:
>
>> * Felipe Balbi <felipe.balbi@nokia.com> [090514 01:15]:
>>> On Thu, May 14, 2009 at 03:44:14AM +0200, ext Tony Lindgren wrote:
>>> > * Felipe Balbi <felipe.balbi@nokia.com> [090513 17:33]:
>>> > > On Thu, May 14, 2009 at 01:46:51AM +0200, ext Andrew de Quincey wrote:
>>> > > > Hi, I've just discovered that the patch at:
>>> > > >
>>> > > >  
>>> http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.git;a=commitdiff;h=3eae3ea7c443fc4330574dffea65b6f2f53a2574
>>> > > >
>>> > > > Breaks the nokia770's framebuffer as it removes the platform data for
>>> > > > the HWA742 LCD controller.
>>> > > >
>>> > > > As the patch says "Patches against the mainline tree are welcome to
>>> > > > add back the missing functionality if needed!", I'm happy to do this.
>>> > > >
>>> > > > However, since I'm fairly new to the linux-omap project, is simply
>>> > > > extracting the removed nokia770 code and generating a patch against
>>> > > > the mainline kernel sufficient? or is there a newer style of some sort
>>> > > > that should be adopted for this?
>>> > >
>>> > > You can start by generating the new patch against mainline and running
>>> > > scripts/checkpatch.pl, then you should probably find out if there are
>>> > > any API changes and stuff like that. Then send the patch to lkml ccing
>>> > > linux-omap and let's see what comments do you get from those guys :-)
>>> >
>>> > Please change the code to pass the struct clock to  
>>> drivers/video/omap/hwa742.c
>>> > in hwa742_platform_data. The hw742.c can just do standard  
>>> clk_enable/disable
>>> > there. Otherwise we won't be able to get this missing part to the mainline
>>> > kernel.
>>>
>>> how about clkdev then ? are we gonna support that for omap1 still ?
>>
>> Yeah the clkdev is there, but in the case of the LCD the clock can be
>> any clock, so we cannot set just one "fck" for all the omap1 LCD panels.
>>
>> In this case the "bclk" is used for the LCD, but "bclk" could be used
>> for other devices as well, not just LCD.
>
> Hi, is the attached patch the sort of thing you had in mind? This is  
> against linux-omap-2.6, latest git.

Hey, that's pretty cool! Just one comment below.

> Unfortunately, both mainline linux-2.6 and linux-omap-2.6 gits lock up  
> on bootup before the LCD is initialised. However, the linux-omap 2.6.29 
> that is compiled by openembedded still boots ok, and with the attached 
> patch applied, the LCD works again!

OK, good to hear. Need to debug that then.

> I guess my next task is to figure out why the mainline kernels freeze;  
> I've seen that before, and it seemed to be something to do with changes 
> to the mcbsp support.

OK

> Reinstate HWA742 platform data for nokia 770 platform.
> 
> Signed-off-by: Andrew de Quincey <adq_dvb@lidskialf.net>
> 
> diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c
> index 8780ca6..df5f38b 100644
> --- a/arch/arm/mach-omap1/board-nokia770.c
> +++ b/arch/arm/mach-omap1/board-nokia770.c
> @@ -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,26 @@ 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 int hwa742_get_clocks(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");
> +		return PTR_ERR(nokia770_hwa742_platform_data.sys_ck);
> +	}
> +	return 0;
> +}
> +
> +static void hwa742_dev_init(void)
> +{
> +	hwa742_get_clocks();
> +	omapfb_set_ctrl_platform_data(&nokia770_hwa742_platform_data);
> +}

You can now get rid of the hwa742_get_clocks(), and move that code
to hwa742_dev_init() instead.

Regards,

Tony

  
>  /* assume no Mini-AB port */
>  
> @@ -371,6 +392,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);
> diff --git a/arch/arm/plat-omap/include/mach/hwa742.h b/arch/arm/plat-omap/include/mach/hwa742.h
> index 577f492..c00e05d 100644
> --- a/arch/arm/plat-omap/include/mach/hwa742.h
> +++ b/arch/arm/plat-omap/include/mach/hwa742.h
> @@ -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;
>  };
>  
> diff --git a/drivers/video/omap/hwa742.c b/drivers/video/omap/hwa742.c
> index 8aa6e47..1230476 100644
> --- a/drivers/video/omap/hwa742.c
> +++ b/drivers/video/omap/hwa742.c
> @@ -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 = {

  reply	other threads:[~2009-05-14 23:26 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-13 23:46 Patch "REMOVE OMAP LEGACY CODE: Reset mach-omap1/board-*.c files to mainline" breaks nokia770 Andrew de Quincey
2009-05-14  0:23 ` Felipe Balbi
2009-05-14  1:44   ` Tony Lindgren
2009-05-14  8:04     ` Felipe Balbi
2009-05-14 15:30       ` Tony Lindgren
2009-05-14 23:18         ` Andrew de Quincey
2009-05-14 23:26           ` Tony Lindgren [this message]
2009-05-14 23:37             ` Andrew de Quincey
2009-05-14 23:57               ` Tony Lindgren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090514232649.GY5593@atomide.com \
    --to=tony@atomide.com \
    --cc=adq_dvb@lidskialf.net \
    --cc=felipe.balbi@nokia.com \
    --cc=linux-omap@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.