ARM: shmobile: use FSI driver's audio clock on ap4evb
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Thu, 8 Nov 2012 03:09:29 +0000 (19:09 -0800)
committerSimon Horman <horms@verge.net.au>
Thu, 8 Nov 2012 08:52:05 +0000 (17:52 +0900)
Current FSI driver can control audio clock without platform
call-back functions
This patch removed board-specific call-back/settings

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
arch/arm/mach-shmobile/board-ap4evb.c

index cefdd030361d21fe2120626ccfc1e1f2b726e951..40657854e3ad4df46e1ba8be843f7fd88260bf82 100644 (file)
@@ -658,133 +658,16 @@ static struct platform_device lcdc_device = {
 
 /* FSI */
 #define IRQ_FSI                evt2irq(0x1840)
-static int __fsi_set_rate(struct clk *clk, long rate, int enable)
-{
-       int ret = 0;
-
-       if (rate <= 0)
-               return ret;
-
-       if (enable) {
-               ret = clk_set_rate(clk, rate);
-               if (0 == ret)
-                       ret = clk_enable(clk);
-       } else {
-               clk_disable(clk);
-       }
-
-       return ret;
-}
-
-static int __fsi_set_round_rate(struct clk *clk, long rate, int enable)
-{
-       return __fsi_set_rate(clk, clk_round_rate(clk, rate), enable);
-}
-
-static int fsi_ak4642_set_rate(struct device *dev, int rate, int enable)
-{
-       struct clk *fsia_ick;
-       struct clk *fsiack;
-       int ret = -EIO;
-
-       fsia_ick = clk_get(dev, "icka");
-       if (IS_ERR(fsia_ick))
-               return PTR_ERR(fsia_ick);
-
-       /*
-        * FSIACK is connected to AK4642,
-        * and use external clock pin from it.
-        * it is parent of fsia_ick now.
-        */
-       fsiack = clk_get_parent(fsia_ick);
-       if (!fsiack)
-               goto fsia_ick_out;
-
-       /*
-        * we get 1/1 divided clock by setting same rate to fsiack and fsia_ick
-        *
-        ** FIXME **
-        * Because the freq_table of external clk (fsiack) are all 0,
-        * the return value of clk_round_rate became 0.
-        * So, it use __fsi_set_rate here.
-        */
-       ret = __fsi_set_rate(fsiack, rate, enable);
-       if (ret < 0)
-               goto fsiack_out;
-
-       ret = __fsi_set_round_rate(fsia_ick, rate, enable);
-       if ((ret < 0) && enable)
-               __fsi_set_round_rate(fsiack, rate, 0); /* disable FSI ACK */
-
-fsiack_out:
-       clk_put(fsiack);
-
-fsia_ick_out:
-       clk_put(fsia_ick);
-
-       return 0;
-}
-
-static int fsi_hdmi_set_rate(struct device *dev, int rate, int enable)
-{
-       struct clk *fsib_clk;
-       struct clk *fdiv_clk = clk_get(NULL, "fsidivb");
-       long fsib_rate = 0;
-       long fdiv_rate = 0;
-       int ackmd_bpfmd;
-       int ret;
-
-       switch (rate) {
-       case 44100:
-               fsib_rate       = rate * 256;
-               ackmd_bpfmd     = SH_FSI_ACKMD_256 | SH_FSI_BPFMD_64;
-               break;
-       case 48000:
-               fsib_rate       = 85428000; /* around 48kHz x 256 x 7 */
-               fdiv_rate       = rate * 256;
-               ackmd_bpfmd     = SH_FSI_ACKMD_256 | SH_FSI_BPFMD_64;
-               break;
-       default:
-               pr_err("unsupported rate in FSI2 port B\n");
-               return -EINVAL;
-       }
-
-       /* FSI B setting */
-       fsib_clk = clk_get(dev, "ickb");
-       if (IS_ERR(fsib_clk))
-               return -EIO;
-
-       ret = __fsi_set_round_rate(fsib_clk, fsib_rate, enable);
-       if (ret < 0)
-               goto fsi_set_rate_end;
-
-       /* FSI DIV setting */
-       ret = __fsi_set_round_rate(fdiv_clk, fdiv_rate, enable);
-       if (ret < 0) {
-               /* disable FSI B */
-               if (enable)
-                       __fsi_set_round_rate(fsib_clk, fsib_rate, 0);
-               goto fsi_set_rate_end;
-       }
-
-       ret = ackmd_bpfmd;
-
-fsi_set_rate_end:
-       clk_put(fsib_clk);
-       return ret;
-}
-
 static struct sh_fsi_platform_info fsi_info = {
        .port_a = {
                .flags          = SH_FSI_BRS_INV,
-               .set_rate       = fsi_ak4642_set_rate,
        },
        .port_b = {
                .flags          = SH_FSI_BRS_INV |
                                  SH_FSI_BRM_INV |
                                  SH_FSI_LRS_INV |
+                                 SH_FSI_CLK_CPG |
                                  SH_FSI_FMT_SPDIF,
-               .set_rate       = fsi_hdmi_set_rate,
        },
 };
 
@@ -1144,25 +1027,6 @@ out:
                clk_put(hdmi_ick);
 }
 
-static void __init fsi_init_pm_clock(void)
-{
-       struct clk *fsia_ick;
-       int ret;
-
-       fsia_ick = clk_get(&fsi_device.dev, "icka");
-       if (IS_ERR(fsia_ick)) {
-               ret = PTR_ERR(fsia_ick);
-               pr_err("Cannot get FSI ICK: %d\n", ret);
-               return;
-       }
-
-       ret = clk_set_parent(fsia_ick, &sh7372_fsiack_clk);
-       if (ret < 0)
-               pr_err("Cannot set FSI-A parent: %d\n", ret);
-
-       clk_put(fsia_ick);
-}
-
 /* TouchScreen */
 #ifdef CONFIG_AP4EVB_QHD
 # define GPIO_TSC_IRQ  GPIO_FN_IRQ28_123
@@ -1476,7 +1340,6 @@ static void __init ap4evb_init(void)
                                       ARRAY_SIZE(domain_devices));
 
        hdmi_init_pm_clock();
-       fsi_init_pm_clock();
        sh7372_pm_init();
        pm_clk_add(&fsi_device.dev, "spu2");
        pm_clk_add(&lcdc1_device.dev, "hdmi");