mmc: sdhci: move the callback function into sdhci_ops
authorJaehoon Chung <jh80.chung@samsung.com>
Fri, 30 Dec 2016 06:30:18 +0000 (15:30 +0900)
committerJaehoon Chung <jh80.chung@samsung.com>
Wed, 11 Jan 2017 10:40:13 +0000 (19:40 +0900)
callback function should be moved into sdhci_ops struct.
Other controller can use these ops for controlling clock or their own
specific register.

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
drivers/mmc/s5p_sdhci.c
drivers/mmc/sdhci.c
include/sdhci.h

index 2a4cdc0890ca663290d82aa2bc8b4d27694db89a..1f1d2ed8652ec639459823eff5eb9d45c8d6c7aa 100644 (file)
@@ -79,6 +79,11 @@ static void s5p_set_clock(struct sdhci_host *host, u32 div)
        set_mmc_clk(host->index, div);
 }
 
+static const struct sdhci_ops s5p_sdhci_ops = {
+       .set_clock      = &s5p_set_clock,
+       .set_control_reg = &s5p_sdhci_set_control_reg,
+};
+
 static int s5p_sdhci_core_init(struct sdhci_host *host)
 {
        host->name = S5P_NAME;
@@ -87,9 +92,7 @@ static int s5p_sdhci_core_init(struct sdhci_host *host)
                SDHCI_QUIRK_32BIT_DMA_ADDR |
                SDHCI_QUIRK_WAIT_SEND_CMD | SDHCI_QUIRK_USE_WIDE8;
        host->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
-
-       host->set_control_reg = &s5p_sdhci_set_control_reg;
-       host->set_clock = &s5p_set_clock;
+       host->ops = &s5p_sdhci_ops;
 
        if (host->bus_width == 8)
                host->host_caps |= MMC_MODE_8BIT;
index 9125e5d1f897fd587723c23fa84dd3f464be784f..6ce5e8f0c76846a62e05adb20f105f117f8ebbd7 100644 (file)
@@ -359,8 +359,8 @@ static int sdhci_set_clock(struct mmc *mmc, unsigned int clock)
                div >>= 1;
        }
 
-       if (host->set_clock)
-               host->set_clock(host->index, div);
+       if (host->ops->set_clock)
+               host->ops->set_clock(host, div);
 
        clk |= (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT;
        clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN)
@@ -430,8 +430,8 @@ static int sdhci_set_ios(struct mmc *mmc)
        u32 ctrl;
        struct sdhci_host *host = mmc->priv;
 
-       if (host->set_control_reg)
-               host->set_control_reg(host);
+       if (host->ops->set_control_reg)
+               host->ops->set_control_reg(host);
 
        if (mmc->clock != host->clock)
                sdhci_set_clock(mmc, mmc->clock);
index e4299d1e1bacaba393a9e4a72f898746c5e0a5a5..abe48467bfd44cb575c0cab94d11cd2500efbc26 100644 (file)
@@ -227,14 +227,16 @@ struct sdhci_host;
 #define SDHCI_DEFAULT_BOUNDARY_ARG     (7)
 struct sdhci_ops {
 #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
-       u32             (*read_l)(struct sdhci_host *host, int reg);
-       u16             (*read_w)(struct sdhci_host *host, int reg);
-       u8              (*read_b)(struct sdhci_host *host, int reg);
-       void            (*write_l)(struct sdhci_host *host, u32 val, int reg);
-       void            (*write_w)(struct sdhci_host *host, u16 val, int reg);
-       void            (*write_b)(struct sdhci_host *host, u8 val, int reg);
+       u32     (*read_l)(struct sdhci_host *host, int reg);
+       u16     (*read_w)(struct sdhci_host *host, int reg);
+       u8      (*read_b)(struct sdhci_host *host, int reg);
+       void    (*write_l)(struct sdhci_host *host, u32 val, int reg);
+       void    (*write_w)(struct sdhci_host *host, u16 val, int reg);
+       void    (*write_b)(struct sdhci_host *host, u8 val, int reg);
 #endif
-       int             (*get_cd)(struct sdhci_host *host);
+       int     (*get_cd)(struct sdhci_host *host);
+       void    (*set_control_reg)(struct sdhci_host *host);
+       void    (*set_clock)(struct sdhci_host *host, u32 div);
 };
 
 struct sdhci_host {
@@ -253,8 +255,6 @@ struct sdhci_host {
        struct gpio_desc pwr_gpio;      /* Power GPIO */
        struct gpio_desc cd_gpio;               /* Card Detect GPIO */
 
-       void (*set_control_reg)(struct sdhci_host *host);
-       void (*set_clock)(int dev_index, unsigned int div);
        uint    voltages;
 
        struct mmc_config cfg;