mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-28 04:34:39 +02:00
[s3c24xx] glamo: The cell can rely on being a child of the core. Use it for
passing platform data. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@17051 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
b1257bc84f
commit
5c0a059eb9
@ -1188,16 +1188,6 @@ static int __init glamo_probe(struct platform_device *pdev)
|
|||||||
glamo_pll_rate(glamo, GLAMO_PLL1),
|
glamo_pll_rate(glamo, GLAMO_PLL1),
|
||||||
glamo_pll_rate(glamo, GLAMO_PLL2));
|
glamo_pll_rate(glamo, GLAMO_PLL2));
|
||||||
|
|
||||||
/* register siblings */
|
|
||||||
glamo->pdata->mmc_data->core = glamo;
|
|
||||||
glamo_cells[GLAMO_CELL_MMC].platform_data = glamo->pdata->mmc_data;
|
|
||||||
glamo_cells[GLAMO_CELL_MMC].data_size =
|
|
||||||
sizeof(struct glamo_mmc_platform_data);
|
|
||||||
|
|
||||||
glamo->pdata->fb_data->core = glamo;
|
|
||||||
glamo_cells[GLAMO_CELL_FB].platform_data = glamo->pdata->fb_data;
|
|
||||||
glamo_cells[GLAMO_CELL_FB].data_size = sizeof(struct glamo_fb_platform_data);
|
|
||||||
|
|
||||||
mfd_add_devices(&pdev->dev, pdev->id, glamo_cells,
|
mfd_add_devices(&pdev->dev, pdev->id, glamo_cells,
|
||||||
ARRAY_SIZE(glamo_cells),
|
ARRAY_SIZE(glamo_cells),
|
||||||
glamo->mem, 0);
|
glamo->mem, 0);
|
||||||
|
@ -43,19 +43,10 @@
|
|||||||
#include "glamo-regs.h"
|
#include "glamo-regs.h"
|
||||||
#include "glamo-core.h"
|
#include "glamo-core.h"
|
||||||
|
|
||||||
#ifndef DEBUG
|
|
||||||
#define GLAMO_LOG(...)
|
|
||||||
#else
|
|
||||||
#define GLAMO_LOG(...) \
|
|
||||||
do { \
|
|
||||||
printk(KERN_DEBUG "in %s:%s:%d", __FILE__, __func__, __LINE__); \
|
|
||||||
printk(KERN_DEBUG __VA_ARGS__); \
|
|
||||||
} while (0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void glamofb_program_mode(struct glamofb_handle* glamo);
|
static void glamofb_program_mode(struct glamofb_handle* glamo);
|
||||||
|
|
||||||
struct glamofb_handle {
|
struct glamofb_handle {
|
||||||
|
struct glamo_core *core;
|
||||||
struct fb_info *fb;
|
struct fb_info *fb;
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
struct resource *reg;
|
struct resource *reg;
|
||||||
@ -72,7 +63,7 @@ struct glamofb_handle {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void glamo_output_enable(struct glamofb_handle *gfb) {
|
static void glamo_output_enable(struct glamofb_handle *gfb) {
|
||||||
struct glamo_core *gcore = gfb->mach_info->core;
|
struct glamo_core *gcore = gfb->core;
|
||||||
|
|
||||||
if (gfb->output_enabled)
|
if (gfb->output_enabled)
|
||||||
return;
|
return;
|
||||||
@ -89,7 +80,7 @@ static void glamo_output_enable(struct glamofb_handle *gfb) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void glamo_output_disable(struct glamofb_handle *gfb) {
|
static void glamo_output_disable(struct glamofb_handle *gfb) {
|
||||||
struct glamo_core *gcore = gfb->mach_info->core;
|
struct glamo_core *gcore = gfb->core;
|
||||||
|
|
||||||
if (!gfb->output_enabled)
|
if (!gfb->output_enabled)
|
||||||
return;
|
return;
|
||||||
@ -158,8 +149,8 @@ static int glamofb_run_script(struct glamofb_handle *glamo,
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (glamo->mach_info->core->suspending) {
|
if (glamo->core->suspending) {
|
||||||
dev_err(&glamo->mach_info->core->pdev->dev,
|
dev_err(&glamo->core->pdev->dev,
|
||||||
"IGNORING glamofb_run_script while "
|
"IGNORING glamofb_run_script while "
|
||||||
"suspended\n");
|
"suspended\n");
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
@ -184,8 +175,8 @@ static int glamofb_check_var(struct fb_var_screeninfo *var,
|
|||||||
{
|
{
|
||||||
struct glamofb_handle *glamo = info->par;
|
struct glamofb_handle *glamo = info->par;
|
||||||
|
|
||||||
if (glamo->mach_info->core->suspending) {
|
if (glamo->core->suspending) {
|
||||||
dev_err(&glamo->mach_info->core->pdev->dev,
|
dev_err(&glamo->core->pdev->dev,
|
||||||
"IGNORING glamofb_check_var while "
|
"IGNORING glamofb_check_var while "
|
||||||
"suspended\n");
|
"suspended\n");
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
@ -272,8 +263,8 @@ static void __rotate_lcd(struct glamofb_handle *glamo, __u32 rotation)
|
|||||||
{
|
{
|
||||||
int glamo_rot;
|
int glamo_rot;
|
||||||
|
|
||||||
if (glamo->mach_info->core->suspending) {
|
if (glamo->core->suspending) {
|
||||||
dev_err(&glamo->mach_info->core->pdev->dev,
|
dev_err(&glamo->core->pdev->dev,
|
||||||
"IGNORING rotate_lcd while "
|
"IGNORING rotate_lcd while "
|
||||||
"suspended\n");
|
"suspended\n");
|
||||||
return;
|
return;
|
||||||
@ -308,7 +299,7 @@ static void __rotate_lcd(struct glamofb_handle *glamo, __u32 rotation)
|
|||||||
static void glamofb_program_mode(struct glamofb_handle* gfb) {
|
static void glamofb_program_mode(struct glamofb_handle* gfb) {
|
||||||
int sync, bp, disp, fp, total;
|
int sync, bp, disp, fp, total;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct glamo_core *gcore = gfb->mach_info->core;
|
struct glamo_core *gcore = gfb->core;
|
||||||
struct fb_var_screeninfo *var = &gfb->fb->var;
|
struct fb_var_screeninfo *var = &gfb->fb->var;
|
||||||
|
|
||||||
dev_dbg(&gcore->pdev->dev,
|
dev_dbg(&gcore->pdev->dev,
|
||||||
@ -413,8 +404,8 @@ static int glamofb_set_par(struct fb_info *info)
|
|||||||
struct fb_var_screeninfo *var = &info->var;
|
struct fb_var_screeninfo *var = &info->var;
|
||||||
struct fb_videomode *mode;
|
struct fb_videomode *mode;
|
||||||
|
|
||||||
if (glamo->mach_info->core->suspending) {
|
if (glamo->core->suspending) {
|
||||||
dev_err(&glamo->mach_info->core->pdev->dev,
|
dev_err(&glamo->core->pdev->dev,
|
||||||
"IGNORING glamofb_set_par while "
|
"IGNORING glamofb_set_par while "
|
||||||
"suspended\n");
|
"suspended\n");
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
@ -493,8 +484,8 @@ static int glamofb_setcolreg(unsigned regno,
|
|||||||
struct glamofb_handle *glamo = info->par;
|
struct glamofb_handle *glamo = info->par;
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
|
|
||||||
if (glamo->mach_info->core->suspending) {
|
if (glamo->core->suspending) {
|
||||||
dev_err(&glamo->mach_info->core->pdev->dev,
|
dev_err(&glamo->core->pdev->dev,
|
||||||
"IGNORING glamofb_set_par while "
|
"IGNORING glamofb_set_par while "
|
||||||
"suspended\n");
|
"suspended\n");
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
@ -525,7 +516,7 @@ static int glamofb_setcolreg(unsigned regno,
|
|||||||
static int glamofb_ioctl(struct fb_info *info, unsigned int cmd,
|
static int glamofb_ioctl(struct fb_info *info, unsigned int cmd,
|
||||||
unsigned long arg) {
|
unsigned long arg) {
|
||||||
struct glamofb_handle *gfb = (struct glamofb_handle*)info->par;
|
struct glamofb_handle *gfb = (struct glamofb_handle*)info->par;
|
||||||
struct glamo_core *gcore = gfb->mach_info->core;
|
struct glamo_core *gcore = gfb->core;
|
||||||
int retval = -ENOTTY;
|
int retval = -ENOTTY;
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
@ -687,8 +678,8 @@ int glamofb_cmd_mode(struct glamofb_handle *gfb, int on)
|
|||||||
{
|
{
|
||||||
int timeout = 2000000;
|
int timeout = 2000000;
|
||||||
|
|
||||||
if (gfb->mach_info->core->suspending) {
|
if (gfb->core->suspending) {
|
||||||
dev_err(&gfb->mach_info->core->pdev->dev,
|
dev_err(&gfb->core->pdev->dev,
|
||||||
"IGNORING glamofb_cmd_mode while "
|
"IGNORING glamofb_cmd_mode while "
|
||||||
"suspended\n");
|
"suspended\n");
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
@ -699,7 +690,7 @@ int glamofb_cmd_mode(struct glamofb_handle *gfb, int on)
|
|||||||
dev_dbg(gfb->dev, "%s: waiting for cmdq empty: ",
|
dev_dbg(gfb->dev, "%s: waiting for cmdq empty: ",
|
||||||
__func__);
|
__func__);
|
||||||
while ((!glamofb_cmdq_empty(gfb)) && (timeout--))
|
while ((!glamofb_cmdq_empty(gfb)) && (timeout--))
|
||||||
yield();
|
cpu_relax();
|
||||||
if (timeout < 0) {
|
if (timeout < 0) {
|
||||||
printk(KERN_ERR"*************"
|
printk(KERN_ERR"*************"
|
||||||
"glamofb cmd_queue never got empty"
|
"glamofb cmd_queue never got empty"
|
||||||
@ -718,7 +709,7 @@ int glamofb_cmd_mode(struct glamofb_handle *gfb, int on)
|
|||||||
timeout = 2000000;
|
timeout = 2000000;
|
||||||
while ((!reg_read(gfb, GLAMO_REG_LCD_STATUS2) & (1 << 12)) &&
|
while ((!reg_read(gfb, GLAMO_REG_LCD_STATUS2) & (1 << 12)) &&
|
||||||
(timeout--))
|
(timeout--))
|
||||||
/* yield() */;
|
cpu_relax();
|
||||||
if (timeout < 0) {
|
if (timeout < 0) {
|
||||||
printk(KERN_ERR"*************"
|
printk(KERN_ERR"*************"
|
||||||
"glamofb lcd never idle"
|
"glamofb lcd never idle"
|
||||||
@ -751,8 +742,8 @@ int glamofb_cmd_write(struct glamofb_handle *gfb, u_int16_t val)
|
|||||||
{
|
{
|
||||||
int timeout = 200000;
|
int timeout = 200000;
|
||||||
|
|
||||||
if (gfb->mach_info->core->suspending) {
|
if (gfb->core->suspending) {
|
||||||
dev_err(&gfb->mach_info->core->pdev->dev,
|
dev_err(&gfb->core->pdev->dev,
|
||||||
"IGNORING glamofb_cmd_write while "
|
"IGNORING glamofb_cmd_write while "
|
||||||
"suspended\n");
|
"suspended\n");
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
@ -807,15 +798,21 @@ static int __init glamofb_probe(struct platform_device *pdev)
|
|||||||
int rc = -EIO;
|
int rc = -EIO;
|
||||||
struct fb_info *fbinfo;
|
struct fb_info *fbinfo;
|
||||||
struct glamofb_handle *glamofb;
|
struct glamofb_handle *glamofb;
|
||||||
struct glamo_fb_platform_data *mach_info = pdev->dev.platform_data;
|
struct glamo_core *core = dev_get_drvdata(pdev->dev.parent);
|
||||||
|
struct glamo_fb_platform_data *mach_info;
|
||||||
|
|
||||||
printk(KERN_INFO "SMEDIA Glamo frame buffer driver (C) 2007 "
|
printk(KERN_INFO "SMEDIA Glamo frame buffer driver (C) 2007 "
|
||||||
"Openmoko, Inc.\n");
|
"Openmoko, Inc.\n");
|
||||||
|
|
||||||
|
if (!core->pdata || !core->pdata->fb_data)
|
||||||
|
return -ENOENT;
|
||||||
|
|
||||||
|
|
||||||
fbinfo = framebuffer_alloc(sizeof(struct glamofb_handle), &pdev->dev);
|
fbinfo = framebuffer_alloc(sizeof(struct glamofb_handle), &pdev->dev);
|
||||||
if (!fbinfo)
|
if (!fbinfo)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
|
||||||
glamofb = fbinfo->par;
|
glamofb = fbinfo->par;
|
||||||
glamofb->fb = fbinfo;
|
glamofb->fb = fbinfo;
|
||||||
glamofb->dev = &pdev->dev;
|
glamofb->dev = &pdev->dev;
|
||||||
@ -876,7 +873,9 @@ static int __init glamofb_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
platform_set_drvdata(pdev, glamofb);
|
platform_set_drvdata(pdev, glamofb);
|
||||||
|
|
||||||
glamofb->mach_info = pdev->dev.platform_data;
|
mach_info = core->pdata->fb_data;
|
||||||
|
glamofb->core = core;
|
||||||
|
glamofb->mach_info = mach_info;
|
||||||
|
|
||||||
fbinfo->fix.visual = FB_VISUAL_TRUECOLOR;
|
fbinfo->fix.visual = FB_VISUAL_TRUECOLOR;
|
||||||
fbinfo->fix.type = FB_TYPE_PACKED_PIXELS;
|
fbinfo->fix.type = FB_TYPE_PACKED_PIXELS;
|
||||||
@ -901,8 +900,8 @@ static int __init glamofb_probe(struct platform_device *pdev)
|
|||||||
fbinfo->var.accel_flags = 0;
|
fbinfo->var.accel_flags = 0;
|
||||||
fbinfo->var.vmode = FB_VMODE_NONINTERLACED;
|
fbinfo->var.vmode = FB_VMODE_NONINTERLACED;
|
||||||
|
|
||||||
glamo_engine_enable(mach_info->core, GLAMO_ENGINE_LCD);
|
glamo_engine_enable(core, GLAMO_ENGINE_LCD);
|
||||||
glamo_engine_reset(mach_info->core, GLAMO_ENGINE_LCD);
|
glamo_engine_reset(core, GLAMO_ENGINE_LCD);
|
||||||
glamofb->output_enabled = 1;
|
glamofb->output_enabled = 1;
|
||||||
glamofb->mode_set = 1;
|
glamofb->mode_set = 1;
|
||||||
|
|
||||||
@ -971,13 +970,12 @@ static int glamofb_suspend(struct device *dev)
|
|||||||
static int glamofb_resume(struct device *dev)
|
static int glamofb_resume(struct device *dev)
|
||||||
{
|
{
|
||||||
struct glamofb_handle *gfb = dev_get_drvdata(dev);
|
struct glamofb_handle *gfb = dev_get_drvdata(dev);
|
||||||
struct glamo_fb_platform_data *mach_info = dev->platform_data;
|
|
||||||
|
|
||||||
/* OK let's allow framebuffer ops again */
|
/* OK let's allow framebuffer ops again */
|
||||||
/* gfb->fb->screen_base = ioremap(gfb->fb_res->start,
|
/* gfb->fb->screen_base = ioremap(gfb->fb_res->start,
|
||||||
resource_size(gfb->fb_res)); */
|
resource_size(gfb->fb_res)); */
|
||||||
glamo_engine_enable(mach_info->core, GLAMO_ENGINE_LCD);
|
glamo_engine_enable(gfb->core, GLAMO_ENGINE_LCD);
|
||||||
glamo_engine_reset(mach_info->core, GLAMO_ENGINE_LCD);
|
glamo_engine_reset(gfb->core, GLAMO_ENGINE_LCD);
|
||||||
|
|
||||||
glamofb_init_regs(gfb);
|
glamofb_init_regs(gfb);
|
||||||
#ifdef CONFIG_MFD_GLAMO_HWACCEL
|
#ifdef CONFIG_MFD_GLAMO_HWACCEL
|
||||||
|
@ -31,8 +31,9 @@
|
|||||||
#define DRIVER_NAME "glamo-mci"
|
#define DRIVER_NAME "glamo-mci"
|
||||||
|
|
||||||
struct glamo_mci_host {
|
struct glamo_mci_host {
|
||||||
struct platform_device *pdev;
|
|
||||||
struct glamo_mmc_platform_data *pdata;
|
struct glamo_mmc_platform_data *pdata;
|
||||||
|
struct platform_device *pdev;
|
||||||
|
struct glamo_core *core;
|
||||||
struct mmc_host *mmc;
|
struct mmc_host *mmc;
|
||||||
struct resource *mmio_mem;
|
struct resource *mmio_mem;
|
||||||
struct resource *data_mem;
|
struct resource *data_mem;
|
||||||
@ -55,6 +56,7 @@ struct glamo_mci_host {
|
|||||||
struct work_struct read_work;
|
struct work_struct read_work;
|
||||||
|
|
||||||
unsigned clk_enabled : 1;
|
unsigned clk_enabled : 1;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void glamo_mci_send_request(struct mmc_host *mmc, struct mmc_request* mrq);
|
static void glamo_mci_send_request(struct mmc_host *mmc, struct mmc_request* mrq);
|
||||||
@ -139,7 +141,7 @@ static void glamo_reg_set_bit_mask(struct glamo_mci_host *glamo,
|
|||||||
|
|
||||||
static void glamo_mci_clock_disable(struct glamo_mci_host *host) {
|
static void glamo_mci_clock_disable(struct glamo_mci_host *host) {
|
||||||
if (host->clk_enabled) {
|
if (host->clk_enabled) {
|
||||||
glamo_engine_div_disable(host->pdata->core, GLAMO_ENGINE_MMC);
|
glamo_engine_div_disable(host->core, GLAMO_ENGINE_MMC);
|
||||||
host->clk_enabled = 0;
|
host->clk_enabled = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -148,7 +150,7 @@ static void glamo_mci_clock_enable(struct glamo_mci_host *host) {
|
|||||||
del_timer_sync(&host->disable_timer);
|
del_timer_sync(&host->disable_timer);
|
||||||
|
|
||||||
if (!host->clk_enabled) {
|
if (!host->clk_enabled) {
|
||||||
glamo_engine_div_enable(host->pdata->core, GLAMO_ENGINE_MMC);
|
glamo_engine_div_enable(host->core, GLAMO_ENGINE_MMC);
|
||||||
host->clk_enabled = 1;
|
host->clk_enabled = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -205,7 +207,7 @@ static int glamo_mci_set_card_clock(struct glamo_mci_host *host, int freq)
|
|||||||
|
|
||||||
if (freq) {
|
if (freq) {
|
||||||
glamo_mci_clock_enable(host);
|
glamo_mci_clock_enable(host);
|
||||||
real_rate = glamo_engine_reclock(host->pdata->core, GLAMO_ENGINE_MMC, freq);
|
real_rate = glamo_engine_reclock(host->core, GLAMO_ENGINE_MMC, freq);
|
||||||
} else {
|
} else {
|
||||||
glamo_mci_clock_disable(host);
|
glamo_mci_clock_disable(host);
|
||||||
}
|
}
|
||||||
@ -558,7 +560,7 @@ static int glamo_mci_irq_poll(struct glamo_mci_host *host,
|
|||||||
* but something insane like suspend problems can mean
|
* but something insane like suspend problems can mean
|
||||||
* we spin here forever, so we timeout after a LONG time
|
* we spin here forever, so we timeout after a LONG time
|
||||||
*/
|
*/
|
||||||
while ((!(readw(host->pdata->core->base +
|
while ((!(readw(host->core->base +
|
||||||
GLAMO_REG_IRQ_STATUS) & GLAMO_IRQ_MMC)) &&
|
GLAMO_REG_IRQ_STATUS) & GLAMO_IRQ_MMC)) &&
|
||||||
(timeout--));
|
(timeout--));
|
||||||
|
|
||||||
@ -569,7 +571,7 @@ static int glamo_mci_irq_poll(struct glamo_mci_host *host,
|
|||||||
return -ETIMEDOUT;
|
return -ETIMEDOUT;
|
||||||
}
|
}
|
||||||
/* ack this interrupt source */
|
/* ack this interrupt source */
|
||||||
writew(GLAMO_IRQ_MMC, host->pdata->core->base +
|
writew(GLAMO_IRQ_MMC, host->core->base +
|
||||||
GLAMO_REG_IRQ_CLEAR);
|
GLAMO_REG_IRQ_CLEAR);
|
||||||
|
|
||||||
/* yay we are an interrupt controller! -- call the ISR
|
/* yay we are an interrupt controller! -- call the ISR
|
||||||
@ -609,7 +611,7 @@ static void glamo_mci_send_request(struct mmc_host *mmc, struct mmc_request *mrq
|
|||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
|
|
||||||
if (!host->pdata->core->irq_works) {
|
if (!host->core->irq_works) {
|
||||||
if (glamo_mci_irq_poll(host, mrq->cmd))
|
if (glamo_mci_irq_poll(host, mrq->cmd))
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -645,7 +647,7 @@ static void glamo_mci_set_power_mode(struct glamo_mci_host *host,
|
|||||||
break;
|
break;
|
||||||
case MMC_POWER_OFF:
|
case MMC_POWER_OFF:
|
||||||
default:
|
default:
|
||||||
glamo_engine_disable(host->pdata->core,
|
glamo_engine_disable(host->core,
|
||||||
GLAMO_ENGINE_MMC);
|
GLAMO_ENGINE_MMC);
|
||||||
|
|
||||||
ret = regulator_disable(host->regulator);
|
ret = regulator_disable(host->regulator);
|
||||||
@ -717,8 +719,9 @@ static struct mmc_host_ops glamo_mci_ops = {
|
|||||||
|
|
||||||
static int glamo_mci_probe(struct platform_device *pdev)
|
static int glamo_mci_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct mmc_host *mmc;
|
struct mmc_host *mmc;
|
||||||
struct glamo_mci_host *host;
|
struct glamo_mci_host *host;
|
||||||
|
struct glamo_core *core = dev_get_drvdata(pdev->dev.parent);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
dev_info(&pdev->dev, "glamo_mci driver (C)2007 Openmoko, Inc\n");
|
dev_info(&pdev->dev, "glamo_mci driver (C)2007 Openmoko, Inc\n");
|
||||||
@ -732,9 +735,11 @@ static int glamo_mci_probe(struct platform_device *pdev)
|
|||||||
host = mmc_priv(mmc);
|
host = mmc_priv(mmc);
|
||||||
host->mmc = mmc;
|
host->mmc = mmc;
|
||||||
host->pdev = pdev;
|
host->pdev = pdev;
|
||||||
host->pdata = pdev->dev.platform_data;
|
if (core->pdata)
|
||||||
|
host->pdata = core->pdata->mmc_data;
|
||||||
host->power_mode = MMC_POWER_OFF;
|
host->power_mode = MMC_POWER_OFF;
|
||||||
host->clk_enabled = 0;
|
host->clk_enabled = 0;
|
||||||
|
host->core = core;
|
||||||
|
|
||||||
INIT_WORK(&host->irq_work, glamo_mci_irq_worker);
|
INIT_WORK(&host->irq_work, glamo_mci_irq_worker);
|
||||||
INIT_WORK(&host->read_work, glamo_mci_read_worker);
|
INIT_WORK(&host->read_work, glamo_mci_read_worker);
|
||||||
@ -809,7 +814,7 @@ static int glamo_mci_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
|
|
||||||
host->vdd = 0;
|
host->vdd = 0;
|
||||||
host->clk_rate = glamo_pll_rate(host->pdata->core, GLAMO_PLL1);
|
host->clk_rate = glamo_pll_rate(host->core, GLAMO_PLL1);
|
||||||
|
|
||||||
/* explain our host controller capabilities */
|
/* explain our host controller capabilities */
|
||||||
mmc->ops = &glamo_mci_ops;
|
mmc->ops = &glamo_mci_ops;
|
||||||
@ -835,8 +840,8 @@ static int glamo_mci_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
platform_set_drvdata(pdev, mmc);
|
platform_set_drvdata(pdev, mmc);
|
||||||
|
|
||||||
glamo_engine_enable(host->pdata->core, GLAMO_ENGINE_MMC);
|
glamo_engine_enable(host->core, GLAMO_ENGINE_MMC);
|
||||||
glamo_engine_reset(host->pdata->core, GLAMO_ENGINE_MMC);
|
glamo_engine_reset(host->core, GLAMO_ENGINE_MMC);
|
||||||
|
|
||||||
glamo_reg_write(host, GLAMO_REG_MMC_WDATADS1,
|
glamo_reg_write(host, GLAMO_REG_MMC_WDATADS1,
|
||||||
(u16)(host->data_mem->start));
|
(u16)(host->data_mem->start));
|
||||||
@ -894,7 +899,7 @@ static int glamo_mci_remove(struct platform_device *pdev)
|
|||||||
|
|
||||||
mmc_free_host(mmc);
|
mmc_free_host(mmc);
|
||||||
|
|
||||||
glamo_engine_disable(host->pdata->core, GLAMO_ENGINE_MMC);
|
glamo_engine_disable(host->core, GLAMO_ENGINE_MMC);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -921,8 +926,8 @@ static int glamo_mci_resume(struct device *dev)
|
|||||||
struct glamo_mci_host *host = mmc_priv(mmc);
|
struct glamo_mci_host *host = mmc_priv(mmc);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
glamo_engine_enable(host->pdata->core, GLAMO_ENGINE_MMC);
|
glamo_engine_enable(host->core, GLAMO_ENGINE_MMC);
|
||||||
glamo_engine_reset(host->pdata->core, GLAMO_ENGINE_MMC);
|
glamo_engine_reset(host->core, GLAMO_ENGINE_MMC);
|
||||||
|
|
||||||
glamo_reg_write(host, GLAMO_REG_MMC_WDATADS1,
|
glamo_reg_write(host, GLAMO_REG_MMC_WDATADS1,
|
||||||
(u16)(host->data_mem->start));
|
(u16)(host->data_mem->start));
|
||||||
|
Loading…
Reference in New Issue
Block a user