mbox

[GIT,PULL] at91: devices and boards files update for 3.3

Message ID 4EEA034C.9020800@atmel.com
State New
Headers show

Pull-request

git://github.com/at91linux/linux-at91.git for-arnd-3.3-device_board

Message

Nicolas Ferre Dec. 15, 2011, 2:25 p.m. UTC
Arnd, Olof,

This pull request adds the ISI to the sam9m10g45 board. As ISI has 
been waited for a long time on AT91, I think it is not possible to wait
for the DT support. Moreover, DT support for this camera sensor + ISI 
soc interface seems not so trivial and will certainly need a handful of 
kernel releases before being stabilized.
Other changes are quite simple and self-explanatory...

The following changes since commit dc47ce90c3a822cd7c9e9339fe4d5f61dcb26b50:

  Linux 3.2-rc5 (2011-12-09 15:09:32 -0800)

are available in the git repository at:
  git://github.com/at91linux/linux-at91.git for-arnd-3.3-device_board

Hong Xu (1):
      ARM: at91: Update struct atmel_nand_data to support PMECC

Josh Wu (2):
      ARM: at91: add clock selection parameter for at91_add_device_isi()
      ARM: at91: add Atmel ISI and ov2640 support on sam9m10g45 board

Nicolas Ferre (2):
      ARM: at91/dma: remove platform data from DMA controller
      ARM: at91/dma: DMA controller registering with DT support

 arch/arm/mach-at91/at91sam9263_devices.c |   13 +++-
 arch/arm/mach-at91/at91sam9g45_devices.c |  113 +++++++++++++++++++++++++++---
 arch/arm/mach-at91/at91sam9rl_devices.c  |    8 +--
 arch/arm/mach-at91/board-sam9m10g45ek.c  |   80 ++++++++++++++++++++-
 arch/arm/mach-at91/include/mach/board.h  |    6 ++-
 5 files changed, 198 insertions(+), 22 deletions(-)

Thanks, best regards,

Comments

Olof Johansson Dec. 16, 2011, 7:06 a.m. UTC | #1
Hi,

On Thu, Dec 15, 2011 at 6:25 AM, Nicolas Ferre <nicolas.ferre@atmel.com> wrote:
> Arnd, Olof,
>
> This pull request adds the ISI to the sam9m10g45 board. As ISI has
> been waited for a long time on AT91, I think it is not possible to wait
> for the DT support. Moreover, DT support for this camera sensor + ISI
> soc interface seems not so trivial and will certainly need a handful of
> kernel releases before being stabilized.
> Other changes are quite simple and self-explanatory...
>
> The following changes since commit dc47ce90c3a822cd7c9e9339fe4d5f61dcb26b50:
>
>  Linux 3.2-rc5 (2011-12-09 15:09:32 -0800)
>
> are available in the git repository at:
>  git://github.com/at91linux/linux-at91.git for-arnd-3.3-device_board

Sure, since you removed a defconfig I'm OK with a small amount of
board addition for ISI.

However, I noticed that it doesn't build with at91sam9g45_defconfig:

arch/arm/mach-at91/board-sam9m10g45ek.c:195: error: unknown field
'full_mode' specified in initializer
arch/arm/mach-at91/board-sam9m10g45ek.c:195: warning: excess elements
in struct initializer
arch/arm/mach-at91/board-sam9m10g45ek.c:195: warning: (near
initialization for 'isi_data')
arch/arm/mach-at91/board-sam9m10g45ek.c:198: error: unknown field
'mck_hz' specified in initializer


Please fixup and send fresh request.

-Olof
Nicolas Ferre Dec. 16, 2011, 4:37 p.m. UTC | #2
On 12/16/2011 08:06 AM, Olof Johansson :
> Hi,
> 
> On Thu, Dec 15, 2011 at 6:25 AM, Nicolas Ferre <nicolas.ferre@atmel.com> wrote:
>> Arnd, Olof,
>>
>> This pull request adds the ISI to the sam9m10g45 board. As ISI has
>> been waited for a long time on AT91, I think it is not possible to wait
>> for the DT support. Moreover, DT support for this camera sensor + ISI
>> soc interface seems not so trivial and will certainly need a handful of
>> kernel releases before being stabilized.
>> Other changes are quite simple and self-explanatory...
>>
>> The following changes since commit dc47ce90c3a822cd7c9e9339fe4d5f61dcb26b50:
>>
>>  Linux 3.2-rc5 (2011-12-09 15:09:32 -0800)
>>
>> are available in the git repository at:
>>  git://github.com/at91linux/linux-at91.git for-arnd-3.3-device_board
> 
> Sure, since you removed a defconfig I'm OK with a small amount of
> board addition for ISI.
> 
> However, I noticed that it doesn't build with at91sam9g45_defconfig:
> 
> arch/arm/mach-at91/board-sam9m10g45ek.c:195: error: unknown field
> 'full_mode' specified in initializer
> arch/arm/mach-at91/board-sam9m10g45ek.c:195: warning: excess elements
> in struct initializer
> arch/arm/mach-at91/board-sam9m10g45ek.c:195: warning: (near
> initialization for 'isi_data')
> arch/arm/mach-at91/board-sam9m10g45ek.c:198: error: unknown field
> 'mck_hz' specified in initializer
>
> Please fixup and send fresh request.

Olof,

Yes, this ISI driver addition is also dependent on an update of the ISI
driver itself that will certainly be included in 3.3 by Guennadi using
v4L2 path.

So, do we have to wait for its inclusion in linux-next or maybe we can
manage this little out-of-sync situation during the 3.3 life cycle...

ISI is a "several times reworked" and "long-awaited" driver and I really
would like to see it included in mainline soon...

Best regards,
Olof Johansson Dec. 16, 2011, 9:03 p.m. UTC | #3
Hi Nicolas,

On Fri, Dec 16, 2011 at 8:37 AM, Nicolas Ferre <nicolas.ferre@atmel.com> wrote:

> Yes, this ISI driver addition is also dependent on an update of the ISI
> driver itself that will certainly be included in 3.3 by Guennadi using
> v4L2 path.
>
> So, do we have to wait for its inclusion in linux-next or maybe we can
> manage this little out-of-sync situation during the 3.3 life cycle...
>
> ISI is a "several times reworked" and "long-awaited" driver and I really
> would like to see it included in mainline soon...

I don't see why code that is known to be broken should be added to the kernel.

The way these things are normally handled is that once Guennadi has
the patch on a stable branch, we can add that branch as a dependency
that your code requires. So we pull that in as a dependency and apply
your code on top of it (or, if it is just one or two patches, that
they are are cherry-picked into your branch in the same way).

But that requires that he picks up the v4l patches and keeps it in a
stable, small, branch and that said branch gets merged in the 3.3
merge window before the branch containing these at91 changes do.

Guennadi, sound reasonable to you?


-Olof
Guennadi Liakhovetski Dec. 17, 2011, 6:34 p.m. UTC | #4
Hi Olof

On Fri, 16 Dec 2011, Olof Johansson wrote:

> Hi Nicolas,
> 
> On Fri, Dec 16, 2011 at 8:37 AM, Nicolas Ferre <nicolas.ferre@atmel.com> wrote:
> 
> > Yes, this ISI driver addition is also dependent on an update of the ISI
> > driver itself that will certainly be included in 3.3 by Guennadi using
> > v4L2 path.
> >
> > So, do we have to wait for its inclusion in linux-next or maybe we can
> > manage this little out-of-sync situation during the 3.3 life cycle...
> >
> > ISI is a "several times reworked" and "long-awaited" driver and I really
> > would like to see it included in mainline soon...
> 
> I don't see why code that is known to be broken should be added to the kernel.
> 
> The way these things are normally handled is that once Guennadi has
> the patch on a stable branch, we can add that branch as a dependency
> that your code requires. So we pull that in as a dependency and apply
> your code on top of it (or, if it is just one or two patches, that
> they are are cherry-picked into your branch in the same way).
> 
> But that requires that he picks up the v4l patches and keeps it in a
> stable, small, branch and that said branch gets merged in the 3.3
> merge window before the branch containing these at91 changes do.
> 
> Guennadi, sound reasonable to you?

I'm not sure what you call a "stable" branch. If you mean a branch in some 
tree somewhere (like my tree on linuxtv.org) then I wouldn't yet use that. 
I think, there are two ways to handle this:

1. Safe from the dependency and synchronisation PoV, but might cause 
problems during merge. One of the patches gets an ack from the respective 
maintainer but gets merged together with the other patch via the "wrong" 
tree. E.g., someone from at91 could ack this patch and I could apply it to 
V4L together with the actual ISI patch.

2. Each patch goes via its own tree, but we make sure, that at91 tree is 
pushed to Linus after the V4L tree. This is more "correct" - each patch is 
merged via its respective tree, but if the V4L tree is merged near the end 
of the merge interval, it might be difficult for at91 to hit the remaining 
window.

I'm ok with either of the above.

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
Olof Johansson Dec. 17, 2011, 11:42 p.m. UTC | #5
Hi,

On Sat, Dec 17, 2011 at 10:34 AM, Guennadi Liakhovetski
<g.liakhovetski@gmx.de> wrote:
> Hi Olof
>
> On Fri, 16 Dec 2011, Olof Johansson wrote:
>
>> Hi Nicolas,
>>
>> On Fri, Dec 16, 2011 at 8:37 AM, Nicolas Ferre <nicolas.ferre@atmel.com> wrote:
>>
>> > Yes, this ISI driver addition is also dependent on an update of the ISI
>> > driver itself that will certainly be included in 3.3 by Guennadi using
>> > v4L2 path.
>> >
>> > So, do we have to wait for its inclusion in linux-next or maybe we can
>> > manage this little out-of-sync situation during the 3.3 life cycle...
>> >
>> > ISI is a "several times reworked" and "long-awaited" driver and I really
>> > would like to see it included in mainline soon...
>>
>> I don't see why code that is known to be broken should be added to the kernel.
>>
>> The way these things are normally handled is that once Guennadi has
>> the patch on a stable branch, we can add that branch as a dependency
>> that your code requires. So we pull that in as a dependency and apply
>> your code on top of it (or, if it is just one or two patches, that
>> they are are cherry-picked into your branch in the same way).
>>
>> But that requires that he picks up the v4l patches and keeps it in a
>> stable, small, branch and that said branch gets merged in the 3.3
>> merge window before the branch containing these at91 changes do.
>>
>> Guennadi, sound reasonable to you?
>
> I'm not sure what you call a "stable" branch. If you mean a branch in some
> tree somewhere (like my tree on linuxtv.org) then I wouldn't yet use that.
> I think, there are two ways to handle this:

When I say "stable" branch, I mean a topic branch that is staged for
3.3, pulled into a for-next branch that is picked up by linux-next and
that *will not be rebased* before the merge window. In other words,
patches that have been staged and won't be touched before they go in.
It would them match case (2) below, but it would also allow us to
merge in either a branch pull of said stable staging branch as a base
for the at91 patch -- if the V4L code is merged before the at91 branch
then git will handle it nicely.

> 1. Safe from the dependency and synchronisation PoV, but might cause
> problems during merge. One of the patches gets an ack from the respective
> maintainer but gets merged together with the other patch via the "wrong"
> tree. E.g., someone from at91 could ack this patch and I could apply it to
> V4L together with the actual ISI patch.
>
> 2. Each patch goes via its own tree, but we make sure, that at91 tree is
> pushed to Linus after the V4L tree. This is more "correct" - each patch is
> merged via its respective tree, but if the V4L tree is merged near the end
> of the merge interval, it might be difficult for at91 to hit the remaining
> window.
>
> I'm ok with either of the above.

Since we're trying to keep the amount of board code addition to a
minimum on ARM right now, I would prefer if all changes to said code
goes through arm-soc mostly to keep an eye on just what goes in, which
means (2). Do you normally get the v4l tree merged very late during
the merge window?

We can keep one late-merge branch in arm-soc that contain patches with
external and possibly late dependencies and submit that branch last,
but it would be good if we had a bit of margin to get it in. :)


-Olof
Guennadi Liakhovetski Dec. 18, 2011, 12:08 a.m. UTC | #6
On Sat, 17 Dec 2011, Olof Johansson wrote:

> Hi,
> 
> On Sat, Dec 17, 2011 at 10:34 AM, Guennadi Liakhovetski
> <g.liakhovetski@gmx.de> wrote:
> > Hi Olof
> >
> > On Fri, 16 Dec 2011, Olof Johansson wrote:
> >
> >> Hi Nicolas,
> >>
> >> On Fri, Dec 16, 2011 at 8:37 AM, Nicolas Ferre <nicolas.ferre@atmel.com> wrote:
> >>
> >> > Yes, this ISI driver addition is also dependent on an update of the ISI
> >> > driver itself that will certainly be included in 3.3 by Guennadi using
> >> > v4L2 path.
> >> >
> >> > So, do we have to wait for its inclusion in linux-next or maybe we can
> >> > manage this little out-of-sync situation during the 3.3 life cycle...
> >> >
> >> > ISI is a "several times reworked" and "long-awaited" driver and I really
> >> > would like to see it included in mainline soon...
> >>
> >> I don't see why code that is known to be broken should be added to the kernel.
> >>
> >> The way these things are normally handled is that once Guennadi has
> >> the patch on a stable branch, we can add that branch as a dependency
> >> that your code requires. So we pull that in as a dependency and apply
> >> your code on top of it (or, if it is just one or two patches, that
> >> they are are cherry-picked into your branch in the same way).
> >>
> >> But that requires that he picks up the v4l patches and keeps it in a
> >> stable, small, branch and that said branch gets merged in the 3.3
> >> merge window before the branch containing these at91 changes do.
> >>
> >> Guennadi, sound reasonable to you?
> >
> > I'm not sure what you call a "stable" branch. If you mean a branch in some
> > tree somewhere (like my tree on linuxtv.org) then I wouldn't yet use that.
> > I think, there are two ways to handle this:
> 
> When I say "stable" branch, I mean a topic branch that is staged for
> 3.3, pulled into a for-next branch that is picked up by linux-next and
> that *will not be rebased* before the merge window. In other words,
> patches that have been staged and won't be touched before they go in.

Yeah, but it's only the actual Linus' tree, that is really stable, you 
know;-)

> It would them match case (2) below, but it would also allow us to
> merge in either a branch pull of said stable staging branch as a base
> for the at91 patch -- if the V4L code is merged before the at91 branch
> then git will handle it nicely.
> 
> > 1. Safe from the dependency and synchronisation PoV, but might cause
> > problems during merge. One of the patches gets an ack from the respective
> > maintainer but gets merged together with the other patch via the "wrong"
> > tree. E.g., someone from at91 could ack this patch and I could apply it to
> > V4L together with the actual ISI patch.
> >
> > 2. Each patch goes via its own tree, but we make sure, that at91 tree is
> > pushed to Linus after the V4L tree. This is more "correct" - each patch is
> > merged via its respective tree, but if the V4L tree is merged near the end
> > of the merge interval, it might be difficult for at91 to hit the remaining
> > window.
> >
> > I'm ok with either of the above.
> 
> Since we're trying to keep the amount of board code addition to a
> minimum on ARM right now, I would prefer if all changes to said code
> goes through arm-soc mostly to keep an eye on just what goes in, which
> means (2).

That's exactly why I said "with an ack" - I certainly wouldn't take a 
patch for outside of v4l without suitable acks.

> Do you normally get the v4l tree merged very late during
> the merge window?

IIRC, normally Mauro is trying to push v4l twice per merge window, so, it 
would be my task then to manage it in the first pull request.

> We can keep one late-merge branch in arm-soc that contain patches with
> external and possibly late dependencies and submit that branch last,
> but it would be good if we had a bit of margin to get it in. :)

Ok, let's try this.

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
Olof Johansson Dec. 20, 2011, 4:32 a.m. UTC | #7
On Sat, Dec 17, 2011 at 4:08 PM, Guennadi Liakhovetski
<g.liakhovetski@gmx.de> wrote:

>> We can keep one late-merge branch in arm-soc that contain patches with
>> external and possibly late dependencies and submit that branch last,
>> but it would be good if we had a bit of margin to get it in. :)
>
> Ok, let's try this.

Sounds good. Let us know when the stable branch is available. Nicolas,
please prepare your branch as soon as possible once you have that info
and send a pull request -- we still want the code into arm-soc
branches very soon.


Thanks!

-Olof
Nicolas Ferre Jan. 3, 2012, 10:49 a.m. UTC | #8
On 12/20/2011 05:32 AM, Olof Johansson :
> On Sat, Dec 17, 2011 at 4:08 PM, Guennadi Liakhovetski
> <g.liakhovetski@gmx.de> wrote:
> 
>>> We can keep one late-merge branch in arm-soc that contain patches with
>>> external and possibly late dependencies and submit that branch last,
>>> but it would be good if we had a bit of margin to get it in. :)
>>
>> Ok, let's try this.
> 
> Sounds good. Let us know when the stable branch is available. Nicolas,
> please prepare your branch as soon as possible once you have that info
> and send a pull request -- we still want the code into arm-soc
> branches very soon.

Olof, Guennadi,

I rebase today this branch on top of:
git://linuxtv.org/gliakhovetski/v4l-dvb.git for-3.3

I send another pull request real-soon-now...
Will it be still possible to make it for 3.3 merge window?

Best regards,
Guennadi Liakhovetski Jan. 3, 2012, 10:59 a.m. UTC | #9
(added Mauro and linux-media to CC)

On Tue, 3 Jan 2012, Nicolas Ferre wrote:

> On 12/20/2011 05:32 AM, Olof Johansson :
> > On Sat, Dec 17, 2011 at 4:08 PM, Guennadi Liakhovetski
> > <g.liakhovetski@gmx.de> wrote:
> > 
> >>> We can keep one late-merge branch in arm-soc that contain patches with
> >>> external and possibly late dependencies and submit that branch last,
> >>> but it would be good if we had a bit of margin to get it in. :)
> >>
> >> Ok, let's try this.
> > 
> > Sounds good. Let us know when the stable branch is available. Nicolas,
> > please prepare your branch as soon as possible once you have that info
> > and send a pull request -- we still want the code into arm-soc
> > branches very soon.
> 
> Olof, Guennadi,
> 
> I rebase today this branch on top of:
> git://linuxtv.org/gliakhovetski/v4l-dvb.git for-3.3
> 
> I send another pull request real-soon-now...
> Will it be still possible to make it for 3.3 merge window?

Looks like Mauro still hasn't pulled my branch in. I did ask him on IRC to 
do this and to push to Linus asap, but maybe he has missed that, I really 
should have mentioned that in the pull request. Mauro, could you, please, 
pull and include my branch in your first pull request for Linus for 3.3?

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
Arnd Bergmann Jan. 3, 2012, 9:39 p.m. UTC | #10
On Tuesday 03 January 2012, Nicolas Ferre wrote:
> Arnd, Olof,
> 
> According to our discussion with Olof and Guennadi, I rebased this pull request
> on top of V4L git tree:
> git://linuxtv.org/gliakhovetski/v4l-dvb.git for-3.3
> (v3.2-rc2-262-g7a13e73 today)
> 
> This pull request adds some bits to at91 devices and board files. The ISI driver
> is the biggest part and does not have DT support. As ISI has been waited for a 
> long time on AT91, I think it is not possible to wait for the DT support. Moreover, 
> DT support for this camera sensor + ISI soc interface seems not so trivial and 
> will certainly need a handful of kernel releases before being stabilized.
> 
> The following changes since commit 7a13e733707d9cc1225ba07274360da2be9984cb:
> 
>   media i.MX27 camera: Fix field_count handling. (2011-12-29 09:20:04 +0100)
> 
> are available in the git repository at:
>   git://github.com/at91linux/linux-at91.git for-arnd-3.3-device_boardV2

Hi Nicolas,

Looks all good to me. I've pulled it into the next/drivers2 branch even though
your patches are not really all driver specific. However, the drivers2 branch
already holds some samsung changes that have dependencies on external branches,
so I can nicely group these together.

How we end up submitting these will depend on the timing of dependencies during
the merge window.

	Arnd
Nicolas Ferre Jan. 4, 2012, 9:20 a.m. UTC | #11
On 01/03/2012 10:39 PM, Arnd Bergmann :
> On Tuesday 03 January 2012, Nicolas Ferre wrote:
>> Arnd, Olof,
>>
>> According to our discussion with Olof and Guennadi, I rebased this pull request
>> on top of V4L git tree:
>> git://linuxtv.org/gliakhovetski/v4l-dvb.git for-3.3
>> (v3.2-rc2-262-g7a13e73 today)
>>
>> This pull request adds some bits to at91 devices and board files. The ISI driver
>> is the biggest part and does not have DT support. As ISI has been waited for a 
>> long time on AT91, I think it is not possible to wait for the DT support. Moreover, 
>> DT support for this camera sensor + ISI soc interface seems not so trivial and 
>> will certainly need a handful of kernel releases before being stabilized.
>>
>> The following changes since commit 7a13e733707d9cc1225ba07274360da2be9984cb:
>>
>>   media i.MX27 camera: Fix field_count handling. (2011-12-29 09:20:04 +0100)
>>
>> are available in the git repository at:
>>   git://github.com/at91linux/linux-at91.git for-arnd-3.3-device_boardV2
> 
> Hi Nicolas,
> 
> Looks all good to me. I've pulled it into the next/drivers2 branch even though
> your patches are not really all driver specific. However, the drivers2 branch
> already holds some samsung changes that have dependencies on external branches,
> so I can nicely group these together.
> 
> How we end up submitting these will depend on the timing of dependencies during
> the merge window.

Ok, very nice. I will keep monitoring it also.

Thanks a lot, best regards,
Russell King - ARM Linux Jan. 5, 2012, 5:09 p.m. UTC | #12
clk_prepare/clk_unprepare?

On Thu, Jan 05, 2012 at 05:55:17PM +0100, Guennadi Liakhovetski wrote:
> From: Josh Wu <josh.wu@atmel.com>
> 
> This patch
> - add ISI_MCK clock enable/disable code.
> - change field name in isi_platform_data structure
> 
> Signed-off-by: Josh Wu <josh.wu@atmel.com>
> [g.liakhovetski@gmx.de: fix label names]
> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> Acked-by: Mauro Carvalho Chehab <mchehab@redhat.com>
> ---
> 
> Arnd, please, pull this patch via your tree to avoid having to wait for 
> the V4L tree, Mauro has acked it.
> 
>  drivers/media/video/atmel-isi.c |   31 +++++++++++++++++++++++++++++--
>  include/media/atmel-isi.h       |    4 +++-
>  2 files changed, 32 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/media/video/atmel-isi.c b/drivers/media/video/atmel-isi.c
> index b25bd7b..9fe4519 100644
> --- a/drivers/media/video/atmel-isi.c
> +++ b/drivers/media/video/atmel-isi.c
> @@ -90,7 +90,10 @@ struct atmel_isi {
>  	struct isi_dma_desc		dma_desc[MAX_BUFFER_NUM];
>  
>  	struct completion		complete;
> +	/* ISI peripherial clock */
>  	struct clk			*pclk;
> +	/* ISI_MCK, feed to camera sensor to generate pixel clock */
> +	struct clk			*mck;
>  	unsigned int			irq;
>  
>  	struct isi_platform_data	*pdata;
> @@ -766,6 +769,12 @@ static int isi_camera_add_device(struct soc_camera_device *icd)
>  	if (ret)
>  		return ret;
>  
> +	ret = clk_enable(isi->mck);
> +	if (ret) {
> +		clk_disable(isi->pclk);
> +		return ret;
> +	}
> +
>  	isi->icd = icd;
>  	dev_dbg(icd->parent, "Atmel ISI Camera driver attached to camera %d\n",
>  		 icd->devnum);
> @@ -779,6 +788,7 @@ static void isi_camera_remove_device(struct soc_camera_device *icd)
>  
>  	BUG_ON(icd != isi->icd);
>  
> +	clk_disable(isi->mck);
>  	clk_disable(isi->pclk);
>  	isi->icd = NULL;
>  
> @@ -874,7 +884,7 @@ static int isi_camera_set_bus_param(struct soc_camera_device *icd)
>  
>  	if (isi->pdata->has_emb_sync)
>  		cfg1 |= ISI_CFG1_EMB_SYNC;
> -	if (isi->pdata->isi_full_mode)
> +	if (isi->pdata->full_mode)
>  		cfg1 |= ISI_CFG1_FULL_MODE;
>  
>  	isi_writel(isi, ISI_CTRL, ISI_CTRL_DIS);
> @@ -912,6 +922,7 @@ static int __devexit atmel_isi_remove(struct platform_device *pdev)
>  			isi->fb_descriptors_phys);
>  
>  	iounmap(isi->regs);
> +	clk_put(isi->mck);
>  	clk_put(isi->pclk);
>  	kfree(isi);
>  
> @@ -930,7 +941,7 @@ static int __devinit atmel_isi_probe(struct platform_device *pdev)
>  	struct isi_platform_data *pdata;
>  
>  	pdata = dev->platform_data;
> -	if (!pdata || !pdata->data_width_flags) {
> +	if (!pdata || !pdata->data_width_flags || !pdata->mck_hz) {
>  		dev_err(&pdev->dev,
>  			"No config available for Atmel ISI\n");
>  		return -EINVAL;
> @@ -959,6 +970,19 @@ static int __devinit atmel_isi_probe(struct platform_device *pdev)
>  	INIT_LIST_HEAD(&isi->video_buffer_list);
>  	INIT_LIST_HEAD(&isi->dma_desc_head);
>  
> +	/* Get ISI_MCK, provided by programmable clock or external clock */
> +	isi->mck = clk_get(dev, "isi_mck");
> +	if (IS_ERR(isi->mck)) {
> +		dev_err(dev, "Failed to get isi_mck\n");
> +		ret = PTR_ERR(isi->mck);
> +		goto err_clk_get;
> +	}
> +
> +	/* Set ISI_MCK's frequency, it should be faster than pixel clock */
> +	ret = clk_set_rate(isi->mck, pdata->mck_hz);
> +	if (ret < 0)
> +		goto err_set_mck_rate;
> +
>  	isi->p_fb_descriptors = dma_alloc_coherent(&pdev->dev,
>  				sizeof(struct fbd) * MAX_BUFFER_NUM,
>  				&isi->fb_descriptors_phys,
> @@ -1034,6 +1058,9 @@ err_alloc_ctx:
>  			isi->p_fb_descriptors,
>  			isi->fb_descriptors_phys);
>  err_alloc_descriptors:
> +err_set_mck_rate:
> +	clk_put(isi->mck);
> +err_clk_get:
>  	kfree(isi);
>  err_alloc_isi:
>  	clk_put(pclk);
> diff --git a/include/media/atmel-isi.h b/include/media/atmel-isi.h
> index 26cece5..6568230 100644
> --- a/include/media/atmel-isi.h
> +++ b/include/media/atmel-isi.h
> @@ -110,10 +110,12 @@ struct isi_platform_data {
>  	u8 hsync_act_low;
>  	u8 vsync_act_low;
>  	u8 pclk_act_falling;
> -	u8 isi_full_mode;
> +	u8 full_mode;
>  	u32 data_width_flags;
>  	/* Using for ISI_CFG1 */
>  	u32 frate;
> +	/* Using for ISI_MCK */
> +	u32 mck_hz;
>  };
>  
>  #endif /* __ATMEL_ISI_H__ */
> -- 
> 1.7.2.5
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Nicolas Ferre Jan. 5, 2012, 5:15 p.m. UTC | #13
On 01/05/2012 06:09 PM, Russell King - ARM Linux :
> clk_prepare/clk_unprepare?

Right, Guennadi, this modification has already made by Josh and it was the second patch of this series:
"[PATCH v3 2/2] [media] V4L: atmel-isi: add clk_prepare()/clk_unprepare() functions"

Moreover, I thought that both of them should go through v4l git tree?...
If it is not the case anymore, I think that Olof and Arnd prefer to pull from git better than individual patches.

Best regards,

> On Thu, Jan 05, 2012 at 05:55:17PM +0100, Guennadi Liakhovetski wrote:
>> From: Josh Wu <josh.wu@atmel.com>
>>
>> This patch
>> - add ISI_MCK clock enable/disable code.
>> - change field name in isi_platform_data structure
>>
>> Signed-off-by: Josh Wu <josh.wu@atmel.com>
>> [g.liakhovetski@gmx.de: fix label names]
>> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
>> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
>> Acked-by: Mauro Carvalho Chehab <mchehab@redhat.com>
>> ---
>>
>> Arnd, please, pull this patch via your tree to avoid having to wait for 
>> the V4L tree, Mauro has acked it.
>>
>>  drivers/media/video/atmel-isi.c |   31 +++++++++++++++++++++++++++++--
>>  include/media/atmel-isi.h       |    4 +++-
>>  2 files changed, 32 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/media/video/atmel-isi.c b/drivers/media/video/atmel-isi.c
>> index b25bd7b..9fe4519 100644
>> --- a/drivers/media/video/atmel-isi.c
>> +++ b/drivers/media/video/atmel-isi.c
>> @@ -90,7 +90,10 @@ struct atmel_isi {
>>  	struct isi_dma_desc		dma_desc[MAX_BUFFER_NUM];
>>  
>>  	struct completion		complete;
>> +	/* ISI peripherial clock */
>>  	struct clk			*pclk;
>> +	/* ISI_MCK, feed to camera sensor to generate pixel clock */
>> +	struct clk			*mck;
>>  	unsigned int			irq;
>>  
>>  	struct isi_platform_data	*pdata;
>> @@ -766,6 +769,12 @@ static int isi_camera_add_device(struct soc_camera_device *icd)
>>  	if (ret)
>>  		return ret;
>>  
>> +	ret = clk_enable(isi->mck);
>> +	if (ret) {
>> +		clk_disable(isi->pclk);
>> +		return ret;
>> +	}
>> +
>>  	isi->icd = icd;
>>  	dev_dbg(icd->parent, "Atmel ISI Camera driver attached to camera %d\n",
>>  		 icd->devnum);
>> @@ -779,6 +788,7 @@ static void isi_camera_remove_device(struct soc_camera_device *icd)
>>  
>>  	BUG_ON(icd != isi->icd);
>>  
>> +	clk_disable(isi->mck);
>>  	clk_disable(isi->pclk);
>>  	isi->icd = NULL;
>>  
>> @@ -874,7 +884,7 @@ static int isi_camera_set_bus_param(struct soc_camera_device *icd)
>>  
>>  	if (isi->pdata->has_emb_sync)
>>  		cfg1 |= ISI_CFG1_EMB_SYNC;
>> -	if (isi->pdata->isi_full_mode)
>> +	if (isi->pdata->full_mode)
>>  		cfg1 |= ISI_CFG1_FULL_MODE;
>>  
>>  	isi_writel(isi, ISI_CTRL, ISI_CTRL_DIS);
>> @@ -912,6 +922,7 @@ static int __devexit atmel_isi_remove(struct platform_device *pdev)
>>  			isi->fb_descriptors_phys);
>>  
>>  	iounmap(isi->regs);
>> +	clk_put(isi->mck);
>>  	clk_put(isi->pclk);
>>  	kfree(isi);
>>  
>> @@ -930,7 +941,7 @@ static int __devinit atmel_isi_probe(struct platform_device *pdev)
>>  	struct isi_platform_data *pdata;
>>  
>>  	pdata = dev->platform_data;
>> -	if (!pdata || !pdata->data_width_flags) {
>> +	if (!pdata || !pdata->data_width_flags || !pdata->mck_hz) {
>>  		dev_err(&pdev->dev,
>>  			"No config available for Atmel ISI\n");
>>  		return -EINVAL;
>> @@ -959,6 +970,19 @@ static int __devinit atmel_isi_probe(struct platform_device *pdev)
>>  	INIT_LIST_HEAD(&isi->video_buffer_list);
>>  	INIT_LIST_HEAD(&isi->dma_desc_head);
>>  
>> +	/* Get ISI_MCK, provided by programmable clock or external clock */
>> +	isi->mck = clk_get(dev, "isi_mck");
>> +	if (IS_ERR(isi->mck)) {
>> +		dev_err(dev, "Failed to get isi_mck\n");
>> +		ret = PTR_ERR(isi->mck);
>> +		goto err_clk_get;
>> +	}
>> +
>> +	/* Set ISI_MCK's frequency, it should be faster than pixel clock */
>> +	ret = clk_set_rate(isi->mck, pdata->mck_hz);
>> +	if (ret < 0)
>> +		goto err_set_mck_rate;
>> +
>>  	isi->p_fb_descriptors = dma_alloc_coherent(&pdev->dev,
>>  				sizeof(struct fbd) * MAX_BUFFER_NUM,
>>  				&isi->fb_descriptors_phys,
>> @@ -1034,6 +1058,9 @@ err_alloc_ctx:
>>  			isi->p_fb_descriptors,
>>  			isi->fb_descriptors_phys);
>>  err_alloc_descriptors:
>> +err_set_mck_rate:
>> +	clk_put(isi->mck);
>> +err_clk_get:
>>  	kfree(isi);
>>  err_alloc_isi:
>>  	clk_put(pclk);
>> diff --git a/include/media/atmel-isi.h b/include/media/atmel-isi.h
>> index 26cece5..6568230 100644
>> --- a/include/media/atmel-isi.h
>> +++ b/include/media/atmel-isi.h
>> @@ -110,10 +110,12 @@ struct isi_platform_data {
>>  	u8 hsync_act_low;
>>  	u8 vsync_act_low;
>>  	u8 pclk_act_falling;
>> -	u8 isi_full_mode;
>> +	u8 full_mode;
>>  	u32 data_width_flags;
>>  	/* Using for ISI_CFG1 */
>>  	u32 frate;
>> +	/* Using for ISI_MCK */
>> +	u32 mck_hz;
>>  };
>>  
>>  #endif /* __ATMEL_ISI_H__ */
>> -- 
>> 1.7.2.5
>>
>>
>> _______________________________________________
>> linux-arm-kernel mailing list
>> linux-arm-kernel@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
Guennadi Liakhovetski Jan. 5, 2012, 5:21 p.m. UTC | #14
On Thu, 5 Jan 2012, Nicolas Ferre wrote:

> On 01/05/2012 06:09 PM, Russell King - ARM Linux :
> > clk_prepare/clk_unprepare?
> 
> Right, Guennadi, this modification has already made by Josh and it was the second patch of this series:
> "[PATCH v3 2/2] [media] V4L: atmel-isi: add clk_prepare()/clk_unprepare() functions"

Right, but not for this patch... I'll let him fix it here too.

> Moreover, I thought that both of them should go through v4l git tree?...

It could, but another arm patch depends on this one, so, we decided, it 
would be easier to pull also this one via arm.

> If it is not the case anymore, I think that Olof and Arnd prefer to pull 
> from git better than individual patches.

Hm, this shouldn't be a problem normally...

Thanks
Guennadi

> 
> Best regards,
> 
> > On Thu, Jan 05, 2012 at 05:55:17PM +0100, Guennadi Liakhovetski wrote:
> >> From: Josh Wu <josh.wu@atmel.com>
> >>
> >> This patch
> >> - add ISI_MCK clock enable/disable code.
> >> - change field name in isi_platform_data structure
> >>
> >> Signed-off-by: Josh Wu <josh.wu@atmel.com>
> >> [g.liakhovetski@gmx.de: fix label names]
> >> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> >> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> >> Acked-by: Mauro Carvalho Chehab <mchehab@redhat.com>
> >> ---
> >>
> >> Arnd, please, pull this patch via your tree to avoid having to wait for 
> >> the V4L tree, Mauro has acked it.
> >>
> >>  drivers/media/video/atmel-isi.c |   31 +++++++++++++++++++++++++++++--
> >>  include/media/atmel-isi.h       |    4 +++-
> >>  2 files changed, 32 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/drivers/media/video/atmel-isi.c b/drivers/media/video/atmel-isi.c
> >> index b25bd7b..9fe4519 100644
> >> --- a/drivers/media/video/atmel-isi.c
> >> +++ b/drivers/media/video/atmel-isi.c
> >> @@ -90,7 +90,10 @@ struct atmel_isi {
> >>  	struct isi_dma_desc		dma_desc[MAX_BUFFER_NUM];
> >>  
> >>  	struct completion		complete;
> >> +	/* ISI peripherial clock */
> >>  	struct clk			*pclk;
> >> +	/* ISI_MCK, feed to camera sensor to generate pixel clock */
> >> +	struct clk			*mck;
> >>  	unsigned int			irq;
> >>  
> >>  	struct isi_platform_data	*pdata;
> >> @@ -766,6 +769,12 @@ static int isi_camera_add_device(struct soc_camera_device *icd)
> >>  	if (ret)
> >>  		return ret;
> >>  
> >> +	ret = clk_enable(isi->mck);
> >> +	if (ret) {
> >> +		clk_disable(isi->pclk);
> >> +		return ret;
> >> +	}
> >> +
> >>  	isi->icd = icd;
> >>  	dev_dbg(icd->parent, "Atmel ISI Camera driver attached to camera %d\n",
> >>  		 icd->devnum);
> >> @@ -779,6 +788,7 @@ static void isi_camera_remove_device(struct soc_camera_device *icd)
> >>  
> >>  	BUG_ON(icd != isi->icd);
> >>  
> >> +	clk_disable(isi->mck);
> >>  	clk_disable(isi->pclk);
> >>  	isi->icd = NULL;
> >>  
> >> @@ -874,7 +884,7 @@ static int isi_camera_set_bus_param(struct soc_camera_device *icd)
> >>  
> >>  	if (isi->pdata->has_emb_sync)
> >>  		cfg1 |= ISI_CFG1_EMB_SYNC;
> >> -	if (isi->pdata->isi_full_mode)
> >> +	if (isi->pdata->full_mode)
> >>  		cfg1 |= ISI_CFG1_FULL_MODE;
> >>  
> >>  	isi_writel(isi, ISI_CTRL, ISI_CTRL_DIS);
> >> @@ -912,6 +922,7 @@ static int __devexit atmel_isi_remove(struct platform_device *pdev)
> >>  			isi->fb_descriptors_phys);
> >>  
> >>  	iounmap(isi->regs);
> >> +	clk_put(isi->mck);
> >>  	clk_put(isi->pclk);
> >>  	kfree(isi);
> >>  
> >> @@ -930,7 +941,7 @@ static int __devinit atmel_isi_probe(struct platform_device *pdev)
> >>  	struct isi_platform_data *pdata;
> >>  
> >>  	pdata = dev->platform_data;
> >> -	if (!pdata || !pdata->data_width_flags) {
> >> +	if (!pdata || !pdata->data_width_flags || !pdata->mck_hz) {
> >>  		dev_err(&pdev->dev,
> >>  			"No config available for Atmel ISI\n");
> >>  		return -EINVAL;
> >> @@ -959,6 +970,19 @@ static int __devinit atmel_isi_probe(struct platform_device *pdev)
> >>  	INIT_LIST_HEAD(&isi->video_buffer_list);
> >>  	INIT_LIST_HEAD(&isi->dma_desc_head);
> >>  
> >> +	/* Get ISI_MCK, provided by programmable clock or external clock */
> >> +	isi->mck = clk_get(dev, "isi_mck");
> >> +	if (IS_ERR(isi->mck)) {
> >> +		dev_err(dev, "Failed to get isi_mck\n");
> >> +		ret = PTR_ERR(isi->mck);
> >> +		goto err_clk_get;
> >> +	}
> >> +
> >> +	/* Set ISI_MCK's frequency, it should be faster than pixel clock */
> >> +	ret = clk_set_rate(isi->mck, pdata->mck_hz);
> >> +	if (ret < 0)
> >> +		goto err_set_mck_rate;
> >> +
> >>  	isi->p_fb_descriptors = dma_alloc_coherent(&pdev->dev,
> >>  				sizeof(struct fbd) * MAX_BUFFER_NUM,
> >>  				&isi->fb_descriptors_phys,
> >> @@ -1034,6 +1058,9 @@ err_alloc_ctx:
> >>  			isi->p_fb_descriptors,
> >>  			isi->fb_descriptors_phys);
> >>  err_alloc_descriptors:
> >> +err_set_mck_rate:
> >> +	clk_put(isi->mck);
> >> +err_clk_get:
> >>  	kfree(isi);
> >>  err_alloc_isi:
> >>  	clk_put(pclk);
> >> diff --git a/include/media/atmel-isi.h b/include/media/atmel-isi.h
> >> index 26cece5..6568230 100644
> >> --- a/include/media/atmel-isi.h
> >> +++ b/include/media/atmel-isi.h
> >> @@ -110,10 +110,12 @@ struct isi_platform_data {
> >>  	u8 hsync_act_low;
> >>  	u8 vsync_act_low;
> >>  	u8 pclk_act_falling;
> >> -	u8 isi_full_mode;
> >> +	u8 full_mode;
> >>  	u32 data_width_flags;
> >>  	/* Using for ISI_CFG1 */
> >>  	u32 frate;
> >> +	/* Using for ISI_MCK */
> >> +	u32 mck_hz;
> >>  };
> >>  
> >>  #endif /* __ATMEL_ISI_H__ */
> >> -- 
> >> 1.7.2.5
> >>
> >>
> >> _______________________________________________
> >> linux-arm-kernel mailing list
> >> linux-arm-kernel@lists.infradead.org
> >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> > 
> 
> 
> -- 
> Nicolas Ferre
> 

---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
Josh Wu Jan. 6, 2012, 5:49 a.m. UTC | #15
Hi, Guennadi

On Friday, January 06, 2012 1:22 AM, Guennadi Liakhovetski wrote:

> On Thu, 5 Jan 2012, Nicolas Ferre wrote:

>> On 01/05/2012 06:09 PM, Russell King - ARM Linux :
>> > clk_prepare/clk_unprepare?
>> 
>> Right, Guennadi, this modification has already made by Josh and it
was the second patch of this series:
>> "[PATCH v3 2/2] [media] V4L: atmel-isi: add
clk_prepare()/clk_unprepare() functions"

> Right, but not for this patch... I'll let him fix it here too.

I checked the second patch: "[PATCH v3 2/2] [media] V4L: atmel-isi: add
clk_prepare()/clk_unprepare() functions", it can be applied after this
patch in the branch for-3.3 in your git tree.

Could you give me more details about that I need to fix in the second
patch?

Best Regards,
Josh Wu

>> Moreover, I thought that both of them should go through v4l git
tree?...

> It could, but another arm patch depends on this one, so, we decided,
it 
> would be easier to pull also this one via arm.

>> If it is not the case anymore, I think that Olof and Arnd prefer to
pull 
>> from git better than individual patches.

> Hm, this shouldn't be a problem normally...

> Thanks
> Guennadi

>> 
>> Best regards,
>> 
>> > On Thu, Jan 05, 2012 at 05:55:17PM +0100, Guennadi Liakhovetski
wrote:
>> >> From: Josh Wu <josh.wu@atmel.com>
>> >>
>> >> This patch
>> >> - add ISI_MCK clock enable/disable code.
>> >> - change field name in isi_platform_data structure
>> >>
>> >> Signed-off-by: Josh Wu <josh.wu@atmel.com>
>> >> [g.liakhovetski@gmx.de: fix label names]
>> >> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
>> >> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
>> >> Acked-by: Mauro Carvalho Chehab <mchehab@redhat.com>
>> >> ---
>> >>
>> >> Arnd, please, pull this patch via your tree to avoid having to
wait for 
>> >> the V4L tree, Mauro has acked it.
>> >>
>> >>  drivers/media/video/atmel-isi.c |   31
+++++++++++++++++++++++++++++--
>> >>  include/media/atmel-isi.h       |    4 +++-
>> >>  2 files changed, 32 insertions(+), 3 deletions(-)
>> >>
>> >> diff --git a/drivers/media/video/atmel-isi.c
b/drivers/media/video/atmel-isi.c
>> >> index b25bd7b..9fe4519 100644
>> >> --- a/drivers/media/video/atmel-isi.c
>> >> +++ b/drivers/media/video/atmel-isi.c
>> >> @@ -90,7 +90,10 @@ struct atmel_isi {
>> >>  	struct isi_dma_desc		dma_desc[MAX_BUFFER_NUM];
>> >>  
>> >>  	struct completion		complete;
>> >> +	/* ISI peripherial clock */
>> >>  	struct clk			*pclk;
>> >> +	/* ISI_MCK, feed to camera sensor to generate pixel clock */
>> >> +	struct clk			*mck;
>> >>  	unsigned int			irq;
>> >>  
>> >>  	struct isi_platform_data	*pdata;
>> >> @@ -766,6 +769,12 @@ static int isi_camera_add_device(struct
soc_camera_device *icd)
>> >>  	if (ret)
>> >>  		return ret;
>> >>  
>> >> +	ret = clk_enable(isi->mck);
>> >> +	if (ret) {
>> >> +		clk_disable(isi->pclk);
>> >> +		return ret;
>> >> +	}
>> >> +
>> >>  	isi->icd = icd;
>> >>  	dev_dbg(icd->parent, "Atmel ISI Camera driver attached to camera
%d\n",
>> >>  		 icd->devnum);
>> >> @@ -779,6 +788,7 @@ static void isi_camera_remove_device(struct
soc_camera_device *icd)
>> >>  
>> >>  	BUG_ON(icd != isi->icd);
>> >>  
>> >> +	clk_disable(isi->mck);
>> >>  	clk_disable(isi->pclk);
>> >>  	isi->icd = NULL;
>> >>  
>> >> @@ -874,7 +884,7 @@ static int isi_camera_set_bus_param(struct
soc_camera_device *icd)
>> >>  
>> >>  	if (isi->pdata->has_emb_sync)
>> >>  		cfg1 |= ISI_CFG1_EMB_SYNC;
>> >> -	if (isi->pdata->isi_full_mode)
>> >> +	if (isi->pdata->full_mode)
>> >>  		cfg1 |= ISI_CFG1_FULL_MODE;
>> >>  
>> >>  	isi_writel(isi, ISI_CTRL, ISI_CTRL_DIS);
>> >> @@ -912,6 +922,7 @@ static int __devexit atmel_isi_remove(struct
platform_device *pdev)
>> >>  			isi->fb_descriptors_phys);
>> >>  
>> >>  	iounmap(isi->regs);
>> >> +	clk_put(isi->mck);
>> >>  	clk_put(isi->pclk);
>> >>  	kfree(isi);
>> >>  
>> >> @@ -930,7 +941,7 @@ static int __devinit atmel_isi_probe(struct
platform_device *pdev)
>> >>  	struct isi_platform_data *pdata;
>> >>  
>> >>  	pdata = dev->platform_data;
>> >> -	if (!pdata || !pdata->data_width_flags) {
>> >> +	if (!pdata || !pdata->data_width_flags || !pdata->mck_hz) {
>> >>  		dev_err(&pdev->dev,
>> >>  			"No config available for Atmel ISI\n");
>> >>  		return -EINVAL;
>> >> @@ -959,6 +970,19 @@ static int __devinit atmel_isi_probe(struct
platform_device *pdev)
>> >>  	INIT_LIST_HEAD(&isi->video_buffer_list);
>> >>  	INIT_LIST_HEAD(&isi->dma_desc_head);
>> >>  
>> >> +	/* Get ISI_MCK, provided by programmable clock or external clock
*/
>> >> +	isi->mck = clk_get(dev, "isi_mck");
>> >> +	if (IS_ERR(isi->mck)) {
>> >> +		dev_err(dev, "Failed to get isi_mck\n");
>> >> +		ret = PTR_ERR(isi->mck);
>> >> +		goto err_clk_get;
>> >> +	}
>> >> +
>> >> +	/* Set ISI_MCK's frequency, it should be faster than pixel clock
*/
>> >> +	ret = clk_set_rate(isi->mck, pdata->mck_hz);
>> >> +	if (ret < 0)
>> >> +		goto err_set_mck_rate;
>> >> +
>> >>  	isi->p_fb_descriptors = dma_alloc_coherent(&pdev->dev,
>> >>  				sizeof(struct fbd) * MAX_BUFFER_NUM,
>> >>  				&isi->fb_descriptors_phys,
>> >> @@ -1034,6 +1058,9 @@ err_alloc_ctx:
>> >>  			isi->p_fb_descriptors,
>> >>  			isi->fb_descriptors_phys);
>> >>  err_alloc_descriptors:
>> >> +err_set_mck_rate:
>> >> +	clk_put(isi->mck);
>> >> +err_clk_get:
>> >>  	kfree(isi);
>> >>  err_alloc_isi:
>> >>  	clk_put(pclk);
>> >> diff --git a/include/media/atmel-isi.h b/include/media/atmel-isi.h
>> >> index 26cece5..6568230 100644
>> >> --- a/include/media/atmel-isi.h
>> >> +++ b/include/media/atmel-isi.h
>> >> @@ -110,10 +110,12 @@ struct isi_platform_data {
>> >>  	u8 hsync_act_low;
>> >>  	u8 vsync_act_low;
>> >>  	u8 pclk_act_falling;
>> >> -	u8 isi_full_mode;
>> >> +	u8 full_mode;
>> >>  	u32 data_width_flags;
>> >>  	/* Using for ISI_CFG1 */
>> >>  	u32 frate;
>> >> +	/* Using for ISI_MCK */
>> >> +	u32 mck_hz;
>> >>  };
>> >>  
>> >>  #endif /* __ATMEL_ISI_H__ */
>> >> -- 
>> >> 1.7.2.5
>> >>
>> >>
>> >> _______________________________________________
>> >> linux-arm-kernel mailing list
>> >> linux-arm-kernel@lists.infradead.org
>> >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>> > 
>> 
>> 
>> -- 
>> Nicolas Ferre
>> 

> ---
> Guennadi Liakhovetski, Ph.D.
> Freelance Open-Source Software Developer
> http://www.open-technology.de/

> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel