mci: mxs: use common clk API
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
68fa6a7ada
commit
1d0e15f098
|
@ -36,6 +36,8 @@
|
|||
#include <errno.h>
|
||||
#include <clock.h>
|
||||
#include <io.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <asm/bitops.h>
|
||||
#include <mach/mxs.h>
|
||||
#include <mach/imx-regs.h>
|
||||
|
@ -49,8 +51,8 @@
|
|||
struct mxs_mci_host {
|
||||
struct mci_host host;
|
||||
void __iomem *regs;
|
||||
struct clk *clk;
|
||||
unsigned clock; /* current clock speed in Hz ("0" if disabled) */
|
||||
unsigned index;
|
||||
#ifdef CONFIG_MCI_INFO
|
||||
unsigned f_min;
|
||||
unsigned f_max;
|
||||
|
@ -60,16 +62,6 @@ struct mxs_mci_host {
|
|||
|
||||
#define to_mxs_mci(mxs) container_of(mxs, struct mxs_mci_host, host)
|
||||
|
||||
/**
|
||||
* Get the SSP clock rate
|
||||
* @param hw_dev Host interface device instance
|
||||
* @return Unit's clock in [Hz]
|
||||
*/
|
||||
static unsigned mxs_mci_get_unit_clock(struct mxs_mci_host *mxs_mci)
|
||||
{
|
||||
return imx_get_sspclk(mxs_mci->index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get MCI cards response if defined for the type of command
|
||||
* @param hw_dev Host interface device instance
|
||||
|
@ -430,7 +422,7 @@ static unsigned mxs_mci_setup_clock_speed(struct mxs_mci_host *mxs_mci, unsigned
|
|||
return 0;
|
||||
}
|
||||
|
||||
ssp = mxs_mci_get_unit_clock(mxs_mci);
|
||||
ssp = clk_get_rate(mxs_mci->clk);
|
||||
|
||||
for (div = 2; div < 255; div += 2) {
|
||||
rate = DIV_ROUND_CLOSEST(DIV_ROUND_CLOSEST(ssp, nc), div);
|
||||
|
@ -558,6 +550,7 @@ static int mxs_mci_probe(struct device_d *hw_dev)
|
|||
struct mxs_mci_platform_data *pd = hw_dev->platform_data;
|
||||
struct mxs_mci_host *mxs_mci;
|
||||
struct mci_host *host;
|
||||
unsigned long rate;
|
||||
|
||||
if (hw_dev->platform_data == NULL) {
|
||||
dev_err(hw_dev, "Missing platform data\n");
|
||||
|
@ -578,44 +571,29 @@ static int mxs_mci_probe(struct device_d *hw_dev)
|
|||
host->voltages = pd->voltages;
|
||||
host->host_caps = pd->caps;
|
||||
|
||||
#ifdef CONFIG_ARCH_IMX23
|
||||
mxs_mci->index = 0; /* there is only one clock for all */
|
||||
#endif
|
||||
#ifdef CONFIG_ARCH_IMX28
|
||||
/* one dedicated clock per unit */
|
||||
switch (hw_dev->resource[0].start) {
|
||||
case IMX_SSP0_BASE:
|
||||
mxs_mci->index = 0;
|
||||
break;
|
||||
case IMX_SSP1_BASE:
|
||||
mxs_mci->index = 1;
|
||||
break;
|
||||
case IMX_SSP2_BASE:
|
||||
mxs_mci->index = 2;
|
||||
break;
|
||||
case IMX_SSP3_BASE:
|
||||
mxs_mci->index = 3;
|
||||
break;
|
||||
default:
|
||||
pr_debug("Unknown SSP unit at address 0x%p\n", mxs_mci->regs);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
mxs_mci->clk = clk_get(hw_dev, NULL);
|
||||
if (IS_ERR(mxs_mci->clk))
|
||||
return PTR_ERR(mxs_mci->clk);
|
||||
|
||||
clk_enable(mxs_mci->clk);
|
||||
|
||||
rate = clk_get_rate(mxs_mci->clk);
|
||||
|
||||
if (pd->f_min == 0) {
|
||||
host->f_min = mxs_mci_get_unit_clock(mxs_mci) / 254 / 256;
|
||||
host->f_min = rate / 254 / 256;
|
||||
dev_dbg(hw_dev, "Min. frequency is %u Hz\n", host->f_min);
|
||||
} else {
|
||||
host->f_min = pd->f_min;
|
||||
dev_dbg(hw_dev, "Min. frequency is %u Hz, could be %u Hz\n",
|
||||
host->f_min, mxs_mci_get_unit_clock(mxs_mci) / 254 / 256);
|
||||
dev_dbg(hw_dev, "Min. frequency is %u Hz, could be %lu Hz\n",
|
||||
host->f_min, rate / 254 / 256);
|
||||
}
|
||||
if (pd->f_max == 0) {
|
||||
host->f_max = mxs_mci_get_unit_clock(mxs_mci) / 2 / 1;
|
||||
host->f_max = rate / 2 / 1;
|
||||
dev_dbg(hw_dev, "Max. frequency is %u Hz\n", host->f_max);
|
||||
} else {
|
||||
host->f_max = pd->f_max;
|
||||
dev_dbg(hw_dev, "Max. frequency is %u Hz, could be %u Hz\n",
|
||||
host->f_max, mxs_mci_get_unit_clock(mxs_mci) / 2 / 1);
|
||||
dev_dbg(hw_dev, "Max. frequency is %u Hz, could be %lu Hz\n",
|
||||
host->f_max, rate / 2 / 1);
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_MCI_INFO)) {
|
||||
|
|
Loading…
Reference in New Issue