Message ID | 4EEA034C.9020800@atmel.com |
---|---|
State | New |
Headers | show |
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
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,
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
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/
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
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/
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
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,
(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/
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
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,
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
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 >
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/
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