[PATCH v3 02/16] clk: exynos5420: add clocks for ISP block

Alim Akhtar alim.akhtar at gmail.com
Thu Apr 24 21:44:44 PDT 2014


Hi Shaik,

On Thu, Apr 24, 2014 at 6:33 PM, Shaik Ameer Basha
<shaik.ameer at samsung.com> wrote:
> This patch adds missing clocks for ISP block
>
> Signed-off-by: Rahul Sharma <rahul.sharma at samsung.com>
> Signed-off-by: Shaik Ameer Basha <shaik.ameer at samsung.com>
> ---
>  drivers/clk/samsung/clk-exynos5420.c |   80 ++++++++++++++++++++++++++++++++++
>  1 file changed, 80 insertions(+)
>
> diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c
> index 389d4b1..972da5d 100755
> --- a/drivers/clk/samsung/clk-exynos5420.c
> +++ b/drivers/clk/samsung/clk-exynos5420.c
> @@ -57,6 +57,7 @@
>  #define SRC_FSYS               0x10244
>  #define SRC_PERIC0             0x10250
>  #define SRC_PERIC1             0x10254
> +#define SRC_ISP                        0x10270
>  #define SRC_TOP10              0x10280
>  #define SRC_TOP11              0x10284
>  #define SRC_TOP12              0x10288
> @@ -77,12 +78,15 @@
>  #define DIV_PERIC2             0x10560
>  #define DIV_PERIC3             0x10564
>  #define DIV_PERIC4             0x10568
> +#define SCLK_DIV_ISP0          0x10580
> +#define SCLK_DIV_ISP1          0x10584
>  #define GATE_BUS_TOP           0x10700
>  #define GATE_BUS_FSYS0         0x10740
>  #define GATE_BUS_PERIC         0x10750
>  #define GATE_BUS_PERIC1                0x10754
>  #define GATE_BUS_PERIS0                0x10760
>  #define GATE_BUS_PERIS1                0x10764
> +#define GATE_TOP_SCLK_ISP      0x10870
>  #define GATE_IP_GSCL0          0x10910
>  #define GATE_IP_GSCL1          0x10920
>  #define GATE_IP_MFC            0x1092c
> @@ -145,6 +149,7 @@ static unsigned long exynos5420_clk_regs[] __initdata = {
>         SRC_MASK_FSYS,
>         SRC_MASK_PERIC0,
>         SRC_MASK_PERIC1,
> +       SRC_ISP,
>         DIV_TOP0,
>         DIV_TOP1,
>         DIV_TOP2,
> @@ -158,12 +163,15 @@ static unsigned long exynos5420_clk_regs[] __initdata = {
>         DIV_PERIC2,
>         DIV_PERIC3,
>         DIV_PERIC4,
> +       SCLK_DIV_ISP0,
> +       SCLK_DIV_ISP1,
>         GATE_BUS_TOP,
>         GATE_BUS_FSYS0,
>         GATE_BUS_PERIC,
>         GATE_BUS_PERIC1,
>         GATE_BUS_PERIS0,
>         GATE_BUS_PERIS1,
> +       GATE_TOP_SCLK_ISP,
>         GATE_IP_GSCL0,
>         GATE_IP_GSCL1,
>         GATE_IP_MFC,
> @@ -250,6 +258,15 @@ PNAME(mout_user_aclk200_fsys_p)    = {"fin_pll", "mout_sw_aclk200_fsys"};
>
>  PNAME(mout_sw_aclk200_fsys2_p) = {"dout_aclk200_fsys2", "mout_sclk_spll"};
>  PNAME(mout_user_aclk200_fsys2_p) = {"fin_pll", "mout_sw_aclk200_fsys2"};
> +PNAME(mout_sw_aclk400_isp_p) = {"dout_aclk400_isp", "mout_sclk_spll"};
> +PNAME(mout_user_aclk400_isp_p) = {"fin_pll", "mout_sw_aclk400_isp"};
> +
> +PNAME(mout_sw_aclk333_432_isp0_p) = {"dout_aclk333_432_isp0",
> +                                       "mout_sclk_spll"};
> +PNAME(mout_user_aclk333_432_isp0_p) = {"fin_pll", "mout_sw_aclk333_432_isp0"};
> +
> +PNAME(mout_sw_aclk333_432_isp_p) = {"dout_aclk333_432_isp", "mout_sclk_spll"};
> +PNAME(mout_user_aclk333_432_isp_p) = {"fin_pll", "mout_sw_aclk333_432_isp"};
>
>  PNAME(mout_sw_aclk200_p) = {"dout_aclk200", "mout_sclk_spll"};
>  PNAME(mout_aclk200_disp1_p) = {"fin_pll", "mout_sw_aclk200"};
> @@ -265,6 +282,7 @@ PNAME(mout_user_aclk166_p) = {"fin_pll", "mout_sw_aclk166"};
>
>  PNAME(mout_sw_aclk266_p) = {"dout_aclk266", "mout_sclk_spll"};
>  PNAME(mout_user_aclk266_p) = {"fin_pll", "mout_sw_aclk266"};
> +PNAME(mout_user_aclk266_isp_p) = {"fin_pll", "mout_sw_aclk266"};
>
>  PNAME(mout_sw_aclk333_432_gscl_p) = {"dout_aclk333_432_gscl", "mout_sclk_spll"};
>  PNAME(mout_user_aclk333_432_gscl_p) = {"fin_pll", "mout_sw_aclk333_432_gscl"};
> @@ -448,6 +466,31 @@ static struct samsung_mux_clock exynos5420_mux_clks[] __initdata = {
>         MUX(0, "mout_spi0", mout_group2_p, SRC_PERIC1, 20, 3),
>         MUX(0, "mout_spi1", mout_group2_p, SRC_PERIC1, 24, 3),
>         MUX(0, "mout_spi2", mout_group2_p, SRC_PERIC1, 28, 3),
> +       MUX(0, "mout_aclk400_isp", mout_group1_p, SRC_TOP0, 0, 2),
> +       MUX(0, "mout_sw_aclk400_isp", mout_sw_aclk400_isp_p,
> +               SRC_TOP10, 0, 1),
> +       MUX(0, "mout_user_aclk400_isp", mout_user_aclk400_isp_p,
> +               SRC_TOP3, 0, 1),
> +       MUX(0, "mout_aclk333_432_isp0", mout_group4_p, SRC_TOP1, 12, 2),
> +       MUX(0, "mout_sw_aclk333_432_isp0", mout_sw_aclk333_432_isp0_p,
> +               SRC_TOP11, 12, 1),
> +       MUX(0, "mout_user_aclk333_432_isp0", mout_user_aclk333_432_isp0_p,
> +               SRC_TOP4, 12, 1),
> +       MUX(0, "mout_aclk333_432_isp", mout_group4_p,
> +               SRC_TOP1, 4, 2),
> +       MUX(0, "mout_sw_aclk333_432_isp", mout_sw_aclk333_432_isp_p,
> +               SRC_TOP11, 4, 1),
> +       MUX(0, "mout_user_aclk333_432_isp", mout_user_aclk333_432_isp_p,
> +               SRC_TOP4, 4, 1),
> +       MUX(0, "mout_user_aclk266_isp", mout_user_aclk266_isp_p,
> +               SRC_TOP4, 16, 1),
> +
It is nice to sort then based on the same order as mentioned in there
register discription. Thats really halps in fast review. And to be
consistance with other code in this file.
e.g Should have all the SRC_TOP4 in one place, like:
MUX(......, SRC_TOP4, 4, 1),
MUX(......, SRC_TOP4,12, 1),
MUX(......, SRC_TOP4,16, 1),
etc..

> +       /* ISP Block */
> +       MUX(0, "mout_pwm_isp", mout_group2_p, SRC_ISP, 24, 3),
> +       MUX(0, "mout_uart_isp", mout_group2_p, SRC_ISP, 20, 3),
> +       MUX(0, "mout_spi0_isp", mout_group2_p, SRC_ISP, 12, 3),
> +       MUX(0, "mout_spi1_isp", mout_group2_p, SRC_ISP, 16, 3),
> +       MUX(0, "mout_isp_sensor", mout_group2_p, SRC_ISP, 28, 3),
>  };

Same as above..please sort...
>
>  static struct samsung_div_clock exynos5420_div_clks[] __initdata = {
> @@ -528,6 +571,22 @@ static struct samsung_div_clock exynos5420_div_clks[] __initdata = {
>         DIV(0, "dout_pre_spi0", "dout_spi0", DIV_PERIC4, 8, 8),
>         DIV(0, "dout_pre_spi1", "dout_spi1", DIV_PERIC4, 16, 8),
>         DIV(0, "dout_pre_spi2", "dout_spi2", DIV_PERIC4, 24, 8),
> +
> +       /* ISP Block */
> +       DIV(0, "dout_aclk400_isp", "mout_aclk400_isp", DIV_TOP0, 0, 3),
> +       DIV(0, "dout_aclk333_432_isp0", "mout_aclk333_432_isp0",
> +               DIV_TOP1, 16, 3),
> +       DIV(0, "dout_aclk333_432_isp", "mout_aclk333_432_isp",
> +               DIV_TOP1, 4, 3),
> +       DIV(0, "dout_pwm_isp", "mout_pwm_isp", SCLK_DIV_ISP1, 28, 4),
> +       DIV(0, "dout_uart_isp", "mout_uart_isp", SCLK_DIV_ISP1, 24, 4),
> +       DIV(0, "dout_spi0_isp", "mout_spi0_isp", SCLK_DIV_ISP1, 16, 4),
> +       DIV(0, "dout_spi1_isp", "mout_spi1_isp", SCLK_DIV_ISP1, 20, 4),
Same as above..
> +       DIV(0, "dout_spi0_isp_pre", "dout_spi0_isp", SCLK_DIV_ISP1, 0, 8),
> +       DIV(0, "dout_spi1_isp_pre", "dout_spi1_isp", SCLK_DIV_ISP1, 8, 8),
> +       DIV(0, "dout_isp_sensor0", "mout_isp_sensor", SCLK_DIV_ISP0, 8, 8),
> +       DIV(0, "dout_isp_sensor1", "mout_isp_sensor", SCLK_DIV_ISP0, 16, 8),
> +       DIV(0, "dout_isp_sensor2", "mout_isp_sensor", SCLK_DIV_ISP0, 24, 8),
>  };
This is nice.
>
>  static struct samsung_gate_clock exynos5420_gate_clks[] __initdata = {
> @@ -759,6 +818,27 @@ static struct samsung_gate_clock exynos5420_gate_clks[] __initdata = {
>                 0),
>         GATE(CLK_SMMU_MIXER, "smmu_mixer", "aclk200_disp1", GATE_IP_DISP1, 9, 0,
>                 0),
> +       GATE(0, "aclk266_isp", "mout_user_aclk266_isp",
> +                       GATE_BUS_TOP, 13, 0, 0),
> +       GATE(0, "aclk400_isp", "mout_user_aclk400_isp",
> +                       GATE_BUS_TOP, 16, 0, 0),
> +       GATE(0, "aclk333_432_isp0",
> +                       "mout_user_aclk333_432_isp0", GATE_BUS_TOP, 5, 0, 0),
> +       GATE(0, "aclk333_432_isp",
> +                       "mout_user_aclk333_432_isp", GATE_BUS_TOP, 8, 0, 0),
> +       /* ISP */
> +       GATE(0, "sclk_pwm_isp", "dout_pwm_isp", GATE_TOP_SCLK_ISP, 3, 0, 0),
> +       GATE(0, "sclk_uart_isp", "dout_uart_isp", GATE_TOP_SCLK_ISP, 0, 0, 0),
> +       GATE(0, "sclk_spi0_isp", "dout_spi0_isp_pre",
> +                       GATE_TOP_SCLK_ISP, 1, 0, 0),
same as above...please sort..
> +       GATE(0, "sclk_spi1_isp", "dout_spi1_isp_pre",
> +                       GATE_TOP_SCLK_ISP, 2, 0, 0),
> +       GATE(0, "sclk_isp_sensor0", "dout_isp_sensor0",
> +                       GATE_TOP_SCLK_ISP, 4, 0, 0),
> +       GATE(0, "sclk_isp_sensor1", "dout_isp_sensor1",
> +                       GATE_TOP_SCLK_ISP, 8, 0, 0),
> +       GATE(0, "sclk_isp_sensor2", "dout_isp_sensor2",
> +                       GATE_TOP_SCLK_ISP, 12, 0, 0),
>
Over all looks good.
Reviewed-by: Alim Akhtar <alim.akhtar at samsung.com>
>         /* SSS */
>         GATE(CLK_SSS, "sss", "aclk266_g2d", GATE_IP_G2D, 2, 0, 0),
> --
> 1.7.9.5
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel



-- 
Regards,
Alim



More information about the linux-arm-kernel mailing list