* [PATCH 1/3] I.MX clko: Using strtol function instead strtoul for getting argument for clko source @ 2012-06-07 13:00 Alexander Shiyan 2012-06-07 13:00 ` [PATCH 2/3] i.MX clko: Added support for more than one CLKO outputs Alexander Shiyan ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Alexander Shiyan @ 2012-06-07 13:00 UTC (permalink / raw) To: barebox Signed-off-by: Alexander Shiyan <shc_work@mail.ru> --- arch/arm/mach-imx/clko.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/arch/arm/mach-imx/clko.c b/arch/arm/mach-imx/clko.c index 0e4fbcc..8e568d2 100644 --- a/arch/arm/mach-imx/clko.c +++ b/arch/arm/mach-imx/clko.c @@ -14,7 +14,7 @@ static int do_clko(int argc, char *argv[]) div = simple_strtoul(optarg, NULL, 0); break; case 's': - src = simple_strtoul(optarg, NULL, 0); + src = simple_strtol(optarg, NULL, 0); break; } } -- 1.7.3.4 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/3] i.MX clko: Added support for more than one CLKO outputs 2012-06-07 13:00 [PATCH 1/3] I.MX clko: Using strtol function instead strtoul for getting argument for clko source Alexander Shiyan @ 2012-06-07 13:00 ` Alexander Shiyan 2012-06-25 7:26 ` Sascha Hauer 2012-06-07 13:00 ` [PATCH 3/3] i.MX51: Added support for "clko" command Alexander Shiyan 2012-06-07 17:35 ` [PATCH 1/3] I.MX clko: Using strtol function instead strtoul for getting argument for clko source Sascha Hauer 2 siblings, 1 reply; 9+ messages in thread From: Alexander Shiyan @ 2012-06-07 13:00 UTC (permalink / raw) To: barebox Signed-off-by: Alexander Shiyan <shc_work@mail.ru> --- arch/arm/mach-imx/clko.c | 16 ++++++++++------ arch/arm/mach-imx/include/mach/clock.h | 4 ++-- arch/arm/mach-imx/speed-imx21.c | 10 +++++++--- arch/arm/mach-imx/speed-imx25.c | 10 ++++++++-- arch/arm/mach-imx/speed-imx27.c | 11 +++++++++-- arch/arm/mach-imx/speed-imx35.c | 10 ++++++++-- 6 files changed, 44 insertions(+), 17 deletions(-) diff --git a/arch/arm/mach-imx/clko.c b/arch/arm/mach-imx/clko.c index 8e568d2..4c5df71 100644 --- a/arch/arm/mach-imx/clko.c +++ b/arch/arm/mach-imx/clko.c @@ -6,10 +6,13 @@ static int do_clko(int argc, char *argv[]) { - int opt, div = 0, src = -2, ret; + int opt, div = 0, src = -2, num = 1, ret; - while((opt = getopt(argc, argv, "d:s:")) > 0) { + while((opt = getopt(argc, argv, "n:d:s:")) > 0) { switch(opt) { + case 'n': + num = simple_strtoul(optarg, NULL, 0); + break; case 'd': div = simple_strtoul(optarg, NULL, 0); break; @@ -23,15 +26,15 @@ static int do_clko(int argc, char *argv[]) return COMMAND_ERROR_USAGE; if (src == -1) { - imx_clko_set_src(-1); + imx_clko_set_src(num, -1); return 0; } if (src != -2) - imx_clko_set_src(src); + imx_clko_set_src(num, src); if (div != 0) { - ret = imx_clko_set_div(div); + ret = imx_clko_set_div(num, div); if (ret != div) printf("limited divider to %d\n", ret); } @@ -42,7 +45,8 @@ static int do_clko(int argc, char *argv[]) static __maybe_unused char cmd_clko_help[] = "Usage: clko [OPTION]...\n" "Route different signals to the i.MX clko pin\n" -" -d <div> Divider\n" +" -n <num> Number of CLKO-line (Default 1)\n" +" -d <div> Divider\n" " -s <source> Clock select. See Ref. Manual for valid sources. Use -1\n" " for disabling clock output\n"; diff --git a/arch/arm/mach-imx/include/mach/clock.h b/arch/arm/mach-imx/include/mach/clock.h index 1082178..4b8fdd9 100644 --- a/arch/arm/mach-imx/include/mach/clock.h +++ b/arch/arm/mach-imx/include/mach/clock.h @@ -31,8 +31,8 @@ ulong imx_get_i2cclk(void); ulong imx_get_mmcclk(void); ulong imx_get_cspiclk(void); -int imx_clko_set_div(int div); -void imx_clko_set_src(int src); +int imx_clko_set_div(int num, int div); +void imx_clko_set_src(int num, int src); void imx_dump_clocks(void); diff --git a/arch/arm/mach-imx/speed-imx21.c b/arch/arm/mach-imx/speed-imx21.c index 6ab1dca..6b44efa 100644 --- a/arch/arm/mach-imx/speed-imx21.c +++ b/arch/arm/mach-imx/speed-imx21.c @@ -162,9 +162,13 @@ void imx_dump_clocks(void) * Returns the new divider (which may be smaller * than the desired one) */ -int imx_clko_set_div(int div) +int imx_clko_set_div(int num, int div) { ulong pcdr; + + if (num != 1) + return; + div--; div &= 0x7; @@ -178,11 +182,11 @@ int imx_clko_set_div(int div) /* * Set the clock source for the CLKO pin */ -void imx_clko_set_src(int src) +void imx_clko_set_src(int num, int src) { unsigned long ccsr; - if (src < 0) { + if (src < 0 || num != 1) { return; } diff --git a/arch/arm/mach-imx/speed-imx25.c b/arch/arm/mach-imx/speed-imx25.c index f6dcacb..b5c9822 100644 --- a/arch/arm/mach-imx/speed-imx25.c +++ b/arch/arm/mach-imx/speed-imx25.c @@ -111,10 +111,13 @@ void imx_dump_clocks(void) * the new divider (which may be smaller * than the desired one) */ -int imx_clko_set_div(int div) +int imx_clko_set_div(int num, int div) { unsigned long mcr = readl(IMX_CCM_BASE + 0x64); + if (num != 1) + return; + div -= 1; div &= 0x3f; @@ -129,10 +132,13 @@ int imx_clko_set_div(int div) /* * Set the clock source for the CLKO pin */ -void imx_clko_set_src(int src) +void imx_clko_set_src(int num, int src) { unsigned long mcr = readl(IMX_CCM_BASE + 0x64); + if (num != 1) + return; + if (src < 0) { mcr &= ~(1 << 30); writel(mcr, IMX_CCM_BASE + 0x64); diff --git a/arch/arm/mach-imx/speed-imx27.c b/arch/arm/mach-imx/speed-imx27.c index aba5097..6c66344 100644 --- a/arch/arm/mach-imx/speed-imx27.c +++ b/arch/arm/mach-imx/speed-imx27.c @@ -189,9 +189,13 @@ void imx_dump_clocks(void) * the new divider (which may be smaller * than the desired one) */ -int imx_clko_set_div(int div) +int imx_clko_set_div(int num, int div) { ulong pcdr; + + if (num != 1) + return; + div--; div &= 0x7; @@ -205,10 +209,13 @@ int imx_clko_set_div(int div) /* * Set the clock source for the CLKO pin */ -void imx_clko_set_src(int src) +void imx_clko_set_src(int num, int src) { unsigned long ccsr; + if (num != 1) + return; + if (src < 0) { PCDR0 &= ~(1 << 25); return; diff --git a/arch/arm/mach-imx/speed-imx35.c b/arch/arm/mach-imx/speed-imx35.c index 1e1c39f..28cd1b1 100644 --- a/arch/arm/mach-imx/speed-imx35.c +++ b/arch/arm/mach-imx/speed-imx35.c @@ -203,10 +203,13 @@ void imx_dump_clocks(void) * the new divider (which may be smaller * than the desired one) */ -int imx_clko_set_div(int div) +int imx_clko_set_div(int num, int div) { unsigned long cosr = readl(IMX_CCM_BASE + CCM_COSR); + if (num != 1) + return; + div -= 1; div &= 0x3f; @@ -221,10 +224,13 @@ int imx_clko_set_div(int div) /* * Set the clock source for the CLKO pin */ -void imx_clko_set_src(int src) +void imx_clko_set_src(int num, int src) { unsigned long cosr = readl(IMX_CCM_BASE + CCM_COSR); + if (num != 1) + return; + if (src < 0) { cosr &= ~(1 << 5); writel(cosr, IMX_CCM_BASE + CCM_COSR); -- 1.7.3.4 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] i.MX clko: Added support for more than one CLKO outputs 2012-06-07 13:00 ` [PATCH 2/3] i.MX clko: Added support for more than one CLKO outputs Alexander Shiyan @ 2012-06-25 7:26 ` Sascha Hauer 2012-06-25 8:54 ` [PATCH] i.MX clko: Checking for clko-line properly Alexander Shiyan 0 siblings, 1 reply; 9+ messages in thread From: Sascha Hauer @ 2012-06-25 7:26 UTC (permalink / raw) To: Alexander Shiyan; +Cc: barebox Hi Alexander, This patch introduces several build warnings and also has a problem with error checking. Could you update it? Thanks Sascha On Thu, Jun 07, 2012 at 05:00:50PM +0400, Alexander Shiyan wrote: > > --- > if (div != 0) { > - ret = imx_clko_set_div(div); > + ret = imx_clko_set_div(num, div); > if (ret != div) > printf("limited divider to %d\n", ret); Up to this patch imx_clko_set_div only returned the real divider, but with this patch it can also return errors, so you have to check for them. "limited divider to -22" would be quite confusing for the reader. > +++ b/arch/arm/mach-imx/speed-imx21.c > @@ -162,9 +162,13 @@ void imx_dump_clocks(void) > * Returns the new divider (which may be smaller > * than the desired one) > */ > -int imx_clko_set_div(int div) > +int imx_clko_set_div(int num, int div) > { > ulong pcdr; > + > + if (num != 1) > + return; > + arch/arm/mach-imx/speed-imx21.c: In function 'imx_clko_set_div': arch/arm/mach-imx/speed-imx21.c:170:3: warning: 'return' with no value, in function returning non-void [-Wreturn-type] > diff --git a/arch/arm/mach-imx/speed-imx25.c b/arch/arm/mach-imx/speed-imx25.c > index f6dcacb..b5c9822 100644 > --- a/arch/arm/mach-imx/speed-imx25.c > +++ b/arch/arm/mach-imx/speed-imx25.c > @@ -111,10 +111,13 @@ void imx_dump_clocks(void) > * the new divider (which may be smaller > * than the desired one) > */ > -int imx_clko_set_div(int div) > +int imx_clko_set_div(int num, int div) > { > unsigned long mcr = readl(IMX_CCM_BASE + 0x64); > > + if (num != 1) > + return; arch/arm/mach-imx/speed-imx25.c: In function 'imx_clko_set_div': arch/arm/mach-imx/speed-imx25.c:119:3: warning: 'return' with no value, in function returning non-void [-Wreturn-type] > diff --git a/arch/arm/mach-imx/speed-imx27.c b/arch/arm/mach-imx/speed-imx27.c > index aba5097..6c66344 100644 > --- a/arch/arm/mach-imx/speed-imx27.c > +++ b/arch/arm/mach-imx/speed-imx27.c > @@ -189,9 +189,13 @@ void imx_dump_clocks(void) > * the new divider (which may be smaller > * than the desired one) > */ > -int imx_clko_set_div(int div) > +int imx_clko_set_div(int num, int div) > { > ulong pcdr; > + > + if (num != 1) > + return; arch/arm/mach-imx/speed-imx27.c: In function 'imx_clko_set_div': arch/arm/mach-imx/speed-imx27.c:197:3: warning: 'return' with no value, in function returning non-void [-Wreturn-type] > diff --git a/arch/arm/mach-imx/speed-imx35.c b/arch/arm/mach-imx/speed-imx35.c > index 1e1c39f..28cd1b1 100644 > --- a/arch/arm/mach-imx/speed-imx35.c > +++ b/arch/arm/mach-imx/speed-imx35.c > @@ -203,10 +203,13 @@ void imx_dump_clocks(void) > * the new divider (which may be smaller > * than the desired one) > */ > -int imx_clko_set_div(int div) > +int imx_clko_set_div(int num, int div) > { > unsigned long cosr = readl(IMX_CCM_BASE + CCM_COSR); > > + if (num != 1) > + return; arch/arm/mach-imx/speed-imx35.c: In function 'imx_clko_set_div': arch/arm/mach-imx/speed-imx35.c:211:3: warning: 'return' with no value, in function returning non-void [-Wreturn-type] -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH] i.MX clko: Checking for clko-line properly 2012-06-25 7:26 ` Sascha Hauer @ 2012-06-25 8:54 ` Alexander Shiyan 2012-06-25 12:21 ` Sascha Hauer 0 siblings, 1 reply; 9+ messages in thread From: Alexander Shiyan @ 2012-06-25 8:54 UTC (permalink / raw) To: barebox This patch adds a check for the correct number of CLKO-line. Signed-off-by: Alexander Shiyan <shc_work@mail.ru> --- arch/arm/mach-imx/clko.c | 6 ++++-- arch/arm/mach-imx/speed-imx21.c | 3 ++- arch/arm/mach-imx/speed-imx25.c | 3 ++- arch/arm/mach-imx/speed-imx27.c | 3 ++- arch/arm/mach-imx/speed-imx35.c | 3 ++- arch/arm/mach-imx/speed-imx51.c | 3 ++- 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/arch/arm/mach-imx/clko.c b/arch/arm/mach-imx/clko.c index 4c5df71..aeafaa9 100644 --- a/arch/arm/mach-imx/clko.c +++ b/arch/arm/mach-imx/clko.c @@ -35,8 +35,10 @@ static int do_clko(int argc, char *argv[]) if (div != 0) { ret = imx_clko_set_div(num, div); - if (ret != div) - printf("limited divider to %d\n", ret); + if (ret < 0) + printf("CLKO-line %i not supported.\n", num); + else if (ret != div) + printf("Divider limited to %d.\n", ret); } return 0; diff --git a/arch/arm/mach-imx/speed-imx21.c b/arch/arm/mach-imx/speed-imx21.c index 6b44efa..4729583 100644 --- a/arch/arm/mach-imx/speed-imx21.c +++ b/arch/arm/mach-imx/speed-imx21.c @@ -16,6 +16,7 @@ */ #include <common.h> +#include <asm-generic/errno.h> #include <mach/imx-regs.h> #include <mach/generic.h> #include <mach/clock.h> @@ -167,7 +168,7 @@ int imx_clko_set_div(int num, int div) ulong pcdr; if (num != 1) - return; + return -ENODEV; div--; div &= 0x7; diff --git a/arch/arm/mach-imx/speed-imx25.c b/arch/arm/mach-imx/speed-imx25.c index b5c9822..ed14113 100644 --- a/arch/arm/mach-imx/speed-imx25.c +++ b/arch/arm/mach-imx/speed-imx25.c @@ -1,4 +1,5 @@ #include <common.h> +#include <asm-generic/errno.h> #include <mach/imx-regs.h> #include <io.h> #include <mach/clock.h> @@ -116,7 +117,7 @@ int imx_clko_set_div(int num, int div) unsigned long mcr = readl(IMX_CCM_BASE + 0x64); if (num != 1) - return; + return -ENODEV; div -= 1; div &= 0x3f; diff --git a/arch/arm/mach-imx/speed-imx27.c b/arch/arm/mach-imx/speed-imx27.c index 6c66344..644fd04 100644 --- a/arch/arm/mach-imx/speed-imx27.c +++ b/arch/arm/mach-imx/speed-imx27.c @@ -16,6 +16,7 @@ */ #include <common.h> +#include <asm-generic/errno.h> #include <mach/imx-regs.h> #include <mach/generic.h> #include <mach/clock.h> @@ -194,7 +195,7 @@ int imx_clko_set_div(int num, int div) ulong pcdr; if (num != 1) - return; + return -ENODEV; div--; div &= 0x7; diff --git a/arch/arm/mach-imx/speed-imx35.c b/arch/arm/mach-imx/speed-imx35.c index 28cd1b1..2b707aa 100644 --- a/arch/arm/mach-imx/speed-imx35.c +++ b/arch/arm/mach-imx/speed-imx35.c @@ -16,6 +16,7 @@ */ #include <common.h> +#include <asm-generic/errno.h> #include <mach/imx-regs.h> #include <io.h> #include <mach/clock.h> @@ -208,7 +209,7 @@ int imx_clko_set_div(int num, int div) unsigned long cosr = readl(IMX_CCM_BASE + CCM_COSR); if (num != 1) - return; + return -ENODEV; div -= 1; div &= 0x3f; diff --git a/arch/arm/mach-imx/speed-imx51.c b/arch/arm/mach-imx/speed-imx51.c index f716346..63d4932 100644 --- a/arch/arm/mach-imx/speed-imx51.c +++ b/arch/arm/mach-imx/speed-imx51.c @@ -1,6 +1,7 @@ #include <common.h> #include <io.h> #include <asm-generic/div64.h> +#include <asm-generic/errno.h> #include <mach/imx51-regs.h> #include <mach/clock-imx51_53.h> @@ -251,7 +252,7 @@ int imx_clko_set_div(int num, int div) ccm_writel(ccosr, MX5_CCM_CCOSR); break; default: - break; + return -ENODEV; } return div + 1; -- 1.7.3.4 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] i.MX clko: Checking for clko-line properly 2012-06-25 8:54 ` [PATCH] i.MX clko: Checking for clko-line properly Alexander Shiyan @ 2012-06-25 12:21 ` Sascha Hauer 0 siblings, 0 replies; 9+ messages in thread From: Sascha Hauer @ 2012-06-25 12:21 UTC (permalink / raw) To: Alexander Shiyan; +Cc: barebox On Mon, Jun 25, 2012 at 12:54:58PM +0400, Alexander Shiyan wrote: > This patch adds a check for the correct number of CLKO-line. Squashed into the original commit causing the failure Thanks Sascha > > Signed-off-by: Alexander Shiyan <shc_work@mail.ru> > --- > arch/arm/mach-imx/clko.c | 6 ++++-- > arch/arm/mach-imx/speed-imx21.c | 3 ++- > arch/arm/mach-imx/speed-imx25.c | 3 ++- > arch/arm/mach-imx/speed-imx27.c | 3 ++- > arch/arm/mach-imx/speed-imx35.c | 3 ++- > arch/arm/mach-imx/speed-imx51.c | 3 ++- > 6 files changed, 14 insertions(+), 7 deletions(-) > > diff --git a/arch/arm/mach-imx/clko.c b/arch/arm/mach-imx/clko.c > index 4c5df71..aeafaa9 100644 > --- a/arch/arm/mach-imx/clko.c > +++ b/arch/arm/mach-imx/clko.c > @@ -35,8 +35,10 @@ static int do_clko(int argc, char *argv[]) > > if (div != 0) { > ret = imx_clko_set_div(num, div); > - if (ret != div) > - printf("limited divider to %d\n", ret); > + if (ret < 0) > + printf("CLKO-line %i not supported.\n", num); > + else if (ret != div) > + printf("Divider limited to %d.\n", ret); > } > > return 0; > diff --git a/arch/arm/mach-imx/speed-imx21.c b/arch/arm/mach-imx/speed-imx21.c > index 6b44efa..4729583 100644 > --- a/arch/arm/mach-imx/speed-imx21.c > +++ b/arch/arm/mach-imx/speed-imx21.c > @@ -16,6 +16,7 @@ > */ > > #include <common.h> > +#include <asm-generic/errno.h> > #include <mach/imx-regs.h> > #include <mach/generic.h> > #include <mach/clock.h> > @@ -167,7 +168,7 @@ int imx_clko_set_div(int num, int div) > ulong pcdr; > > if (num != 1) > - return; > + return -ENODEV; > > div--; > div &= 0x7; > diff --git a/arch/arm/mach-imx/speed-imx25.c b/arch/arm/mach-imx/speed-imx25.c > index b5c9822..ed14113 100644 > --- a/arch/arm/mach-imx/speed-imx25.c > +++ b/arch/arm/mach-imx/speed-imx25.c > @@ -1,4 +1,5 @@ > #include <common.h> > +#include <asm-generic/errno.h> > #include <mach/imx-regs.h> > #include <io.h> > #include <mach/clock.h> > @@ -116,7 +117,7 @@ int imx_clko_set_div(int num, int div) > unsigned long mcr = readl(IMX_CCM_BASE + 0x64); > > if (num != 1) > - return; > + return -ENODEV; > > div -= 1; > div &= 0x3f; > diff --git a/arch/arm/mach-imx/speed-imx27.c b/arch/arm/mach-imx/speed-imx27.c > index 6c66344..644fd04 100644 > --- a/arch/arm/mach-imx/speed-imx27.c > +++ b/arch/arm/mach-imx/speed-imx27.c > @@ -16,6 +16,7 @@ > */ > > #include <common.h> > +#include <asm-generic/errno.h> > #include <mach/imx-regs.h> > #include <mach/generic.h> > #include <mach/clock.h> > @@ -194,7 +195,7 @@ int imx_clko_set_div(int num, int div) > ulong pcdr; > > if (num != 1) > - return; > + return -ENODEV; > > div--; > div &= 0x7; > diff --git a/arch/arm/mach-imx/speed-imx35.c b/arch/arm/mach-imx/speed-imx35.c > index 28cd1b1..2b707aa 100644 > --- a/arch/arm/mach-imx/speed-imx35.c > +++ b/arch/arm/mach-imx/speed-imx35.c > @@ -16,6 +16,7 @@ > */ > > #include <common.h> > +#include <asm-generic/errno.h> > #include <mach/imx-regs.h> > #include <io.h> > #include <mach/clock.h> > @@ -208,7 +209,7 @@ int imx_clko_set_div(int num, int div) > unsigned long cosr = readl(IMX_CCM_BASE + CCM_COSR); > > if (num != 1) > - return; > + return -ENODEV; > > div -= 1; > div &= 0x3f; > diff --git a/arch/arm/mach-imx/speed-imx51.c b/arch/arm/mach-imx/speed-imx51.c > index f716346..63d4932 100644 > --- a/arch/arm/mach-imx/speed-imx51.c > +++ b/arch/arm/mach-imx/speed-imx51.c > @@ -1,6 +1,7 @@ > #include <common.h> > #include <io.h> > #include <asm-generic/div64.h> > +#include <asm-generic/errno.h> > #include <mach/imx51-regs.h> > #include <mach/clock-imx51_53.h> > > @@ -251,7 +252,7 @@ int imx_clko_set_div(int num, int div) > ccm_writel(ccosr, MX5_CCM_CCOSR); > break; > default: > - break; > + return -ENODEV; > } > > return div + 1; > -- > 1.7.3.4 > > > _______________________________________________ > barebox mailing list > barebox@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/barebox > -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/3] i.MX51: Added support for "clko" command 2012-06-07 13:00 [PATCH 1/3] I.MX clko: Using strtol function instead strtoul for getting argument for clko source Alexander Shiyan 2012-06-07 13:00 ` [PATCH 2/3] i.MX clko: Added support for more than one CLKO outputs Alexander Shiyan @ 2012-06-07 13:00 ` Alexander Shiyan 2012-06-07 17:35 ` [PATCH 1/3] I.MX clko: Using strtol function instead strtoul for getting argument for clko source Sascha Hauer 2 siblings, 0 replies; 9+ messages in thread From: Alexander Shiyan @ 2012-06-07 13:00 UTC (permalink / raw) To: barebox Signed-off-by: Alexander Shiyan <shc_work@mail.ru> --- arch/arm/mach-imx/Kconfig | 2 +- arch/arm/mach-imx/speed-imx51.c | 69 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletions(-) diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 564e2fe..3d84d63 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -517,7 +517,7 @@ menu "i.MX specific settings " config IMX_CLKO bool "clko command" - depends on ARCH_IMX21 || ARCH_IMX27 || ARCH_IMX35 || ARCH_IMX25 + depends on ARCH_IMX21 || ARCH_IMX27 || ARCH_IMX35 || ARCH_IMX25 || ARCH_IMX51 help The i.MX SoCs have a Pin which can output different reference frequencies. Say y here if you want to have the clko command which lets you select the diff --git a/arch/arm/mach-imx/speed-imx51.c b/arch/arm/mach-imx/speed-imx51.c index 8d1ecf3..f716346 100644 --- a/arch/arm/mach-imx/speed-imx51.c +++ b/arch/arm/mach-imx/speed-imx51.c @@ -9,6 +9,11 @@ static u32 ccm_readl(u32 ofs) return readl(MX51_CCM_BASE_ADDR + ofs); } +static void ccm_writel(u32 val, u32 ofs) +{ + writel(val, MX51_CCM_BASE_ADDR + ofs); +} + static unsigned long ckil_get_rate(void) { return 32768; @@ -221,6 +226,70 @@ unsigned long imx_get_usbclk(void) return rate / (prediv * podf); } +/* + * Set the divider of the CLKO pin. Returns + * the new divider (which may be smaller + * than the desired one) + */ +int imx_clko_set_div(int num, int div) +{ + u32 ccosr = ccm_readl(MX5_CCM_CCOSR); + + div--; + + switch (num) { + case 1: + div &= 0x7; + ccosr &= ~(0x7 << 4); + ccosr |= div << 4; + ccm_writel(ccosr, MX5_CCM_CCOSR); + break; + case 2: + div &= 0x7; + ccosr &= ~(0x7 << 21); + ccosr |= div << 21; + ccm_writel(ccosr, MX5_CCM_CCOSR); + break; + default: + break; + } + + return div + 1; +} + +/* + * Set the clock source for the CLKO pin + */ +void imx_clko_set_src(int num, int src) +{ + u32 ccosr = ccm_readl(MX5_CCM_CCOSR); + + switch (num) { + case 1: + if (src < 0) { + ccosr &= ~(1 << 7); + break; + } + ccosr &= ~0xf; + ccosr |= src & 0xf; + ccosr |= 1 << 7; + break; + case 2: + if (src < 0) { + ccosr &= ~(1 << 24); + break; + } + ccosr &= ~(0x1f << 16); + ccosr |= (src & 0x1f) << 16; + ccosr |= 1 << 24; + break; + default: + return; + } + + ccm_writel(ccosr, MX5_CCM_CCOSR); +} + void imx_dump_clocks(void) { printf("pll1: %ld\n", pll1_main_get_rate()); -- 1.7.3.4 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/3] I.MX clko: Using strtol function instead strtoul for getting argument for clko source 2012-06-07 13:00 [PATCH 1/3] I.MX clko: Using strtol function instead strtoul for getting argument for clko source Alexander Shiyan 2012-06-07 13:00 ` [PATCH 2/3] i.MX clko: Added support for more than one CLKO outputs Alexander Shiyan 2012-06-07 13:00 ` [PATCH 3/3] i.MX51: Added support for "clko" command Alexander Shiyan @ 2012-06-07 17:35 ` Sascha Hauer 2012-06-08 6:29 ` Alexander Shiyan 2 siblings, 1 reply; 9+ messages in thread From: Sascha Hauer @ 2012-06-07 17:35 UTC (permalink / raw) To: Alexander Shiyan; +Cc: barebox On Thu, Jun 07, 2012 at 05:00:49PM +0400, Alexander Shiyan wrote: > > Signed-off-by: Alexander Shiyan <shc_work@mail.ru> > --- > arch/arm/mach-imx/clko.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > Can you please add an explanation why this change is done? I assume that -1 can be used to disable clko, but the commit log should mention this. Sascha > diff --git a/arch/arm/mach-imx/clko.c b/arch/arm/mach-imx/clko.c > index 0e4fbcc..8e568d2 100644 > --- a/arch/arm/mach-imx/clko.c > +++ b/arch/arm/mach-imx/clko.c > @@ -14,7 +14,7 @@ static int do_clko(int argc, char *argv[]) > div = simple_strtoul(optarg, NULL, 0); > break; > case 's': > - src = simple_strtoul(optarg, NULL, 0); > + src = simple_strtol(optarg, NULL, 0); > break; > } > } > -- > 1.7.3.4 > > > _______________________________________________ > barebox mailing list > barebox@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/barebox > -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/3] I.MX clko: Using strtol function instead strtoul for getting argument for clko source 2012-06-07 17:35 ` [PATCH 1/3] I.MX clko: Using strtol function instead strtoul for getting argument for clko source Sascha Hauer @ 2012-06-08 6:29 ` Alexander Shiyan 2012-06-08 6:35 ` Sascha Hauer 0 siblings, 1 reply; 9+ messages in thread From: Alexander Shiyan @ 2012-06-08 6:29 UTC (permalink / raw) To: barebox This change is necessary because valid source argument for the clko command can be negative. Signed-off-by: Alexander Shiyan <shc_work@mail.ru> --- arch/arm/mach-imx/clko.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/arch/arm/mach-imx/clko.c b/arch/arm/mach-imx/clko.c index 0e4fbcc..8e568d2 100644 --- a/arch/arm/mach-imx/clko.c +++ b/arch/arm/mach-imx/clko.c @@ -14,7 +14,7 @@ static int do_clko(int argc, char *argv[]) div = simple_strtoul(optarg, NULL, 0); break; case 's': - src = simple_strtoul(optarg, NULL, 0); + src = simple_strtol(optarg, NULL, 0); break; } } -- 1.7.3.4 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/3] I.MX clko: Using strtol function instead strtoul for getting argument for clko source 2012-06-08 6:29 ` Alexander Shiyan @ 2012-06-08 6:35 ` Sascha Hauer 0 siblings, 0 replies; 9+ messages in thread From: Sascha Hauer @ 2012-06-08 6:35 UTC (permalink / raw) To: Alexander Shiyan; +Cc: barebox On Fri, Jun 08, 2012 at 10:29:52AM +0400, Alexander Shiyan wrote: > This change is necessary because valid source argument for the clko command > can be negative. > > Signed-off-by: Alexander Shiyan <shc_work@mail.ru> Applied, thanks Sascha > --- > arch/arm/mach-imx/clko.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/arch/arm/mach-imx/clko.c b/arch/arm/mach-imx/clko.c > index 0e4fbcc..8e568d2 100644 > --- a/arch/arm/mach-imx/clko.c > +++ b/arch/arm/mach-imx/clko.c > @@ -14,7 +14,7 @@ static int do_clko(int argc, char *argv[]) > div = simple_strtoul(optarg, NULL, 0); > break; > case 's': > - src = simple_strtoul(optarg, NULL, 0); > + src = simple_strtol(optarg, NULL, 0); > break; > } > } > -- > 1.7.3.4 > > > _______________________________________________ > barebox mailing list > barebox@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/barebox > -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2012-06-25 12:21 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-06-07 13:00 [PATCH 1/3] I.MX clko: Using strtol function instead strtoul for getting argument for clko source Alexander Shiyan 2012-06-07 13:00 ` [PATCH 2/3] i.MX clko: Added support for more than one CLKO outputs Alexander Shiyan 2012-06-25 7:26 ` Sascha Hauer 2012-06-25 8:54 ` [PATCH] i.MX clko: Checking for clko-line properly Alexander Shiyan 2012-06-25 12:21 ` Sascha Hauer 2012-06-07 13:00 ` [PATCH 3/3] i.MX51: Added support for "clko" command Alexander Shiyan 2012-06-07 17:35 ` [PATCH 1/3] I.MX clko: Using strtol function instead strtoul for getting argument for clko source Sascha Hauer 2012-06-08 6:29 ` Alexander Shiyan 2012-06-08 6:35 ` Sascha Hauer
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox