MFD: mcp/ucb1x00: separate ucb1x00 driver data from the MCP data
Patch taken from 5dd7bf59e0
(ARM: sa11x0: Implement autoloading of codec
and codec pdata for mcp bus.) by Jochen Friedrich <jochen@scram.de>.
This adds just the codec data part of the patch.
Acked-by: Jochen Friedrich <jochen@scram.de>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
a6aecae29a
commit
abe06082d0
|
@ -22,6 +22,7 @@
|
||||||
#include <linux/tty.h>
|
#include <linux/tty.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/mfd/ucb1x00.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/timer.h>
|
#include <linux/timer.h>
|
||||||
|
@ -85,10 +86,14 @@ static struct scoop_pcmcia_config collie_pcmcia_config = {
|
||||||
.num_devs = 1,
|
.num_devs = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct ucb1x00_plat_data collie_ucb1x00_data = {
|
||||||
|
.gpio_base = COLLIE_TC35143_GPIO_BASE,
|
||||||
|
};
|
||||||
|
|
||||||
static struct mcp_plat_data collie_mcp_data = {
|
static struct mcp_plat_data collie_mcp_data = {
|
||||||
.mccr0 = MCCR0_ADM | MCCR0_ExtClk,
|
.mccr0 = MCCR0_ADM | MCCR0_ExtClk,
|
||||||
.sclk_rate = 9216000,
|
.sclk_rate = 9216000,
|
||||||
.gpio_base = COLLIE_TC35143_GPIO_BASE,
|
.codec_pdata = &collie_ucb1x00_data,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -16,7 +16,7 @@ struct mcp_plat_data {
|
||||||
u32 mccr0;
|
u32 mccr0;
|
||||||
u32 mccr1;
|
u32 mccr1;
|
||||||
unsigned int sclk_rate;
|
unsigned int sclk_rate;
|
||||||
int gpio_base;
|
void *codec_pdata;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/pm.h>
|
#include <linux/pm.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/mfd/ucb1x00.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
@ -187,10 +188,14 @@ static struct resource simpad_flash_resources [] = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct ucb1x00_plat_data simpad_ucb1x00_data = {
|
||||||
|
.gpio_base = SIMPAD_UCB1X00_GPIO_BASE,
|
||||||
|
};
|
||||||
|
|
||||||
static struct mcp_plat_data simpad_mcp_data = {
|
static struct mcp_plat_data simpad_mcp_data = {
|
||||||
.mccr0 = MCCR0_ADM,
|
.mccr0 = MCCR0_ADM,
|
||||||
.sclk_rate = 11981000,
|
.sclk_rate = 11981000,
|
||||||
.gpio_base = SIMPAD_UCB1X00_GPIO_BASE,
|
.codec_pdata = &simpad_ucb1x00_data,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -217,8 +217,9 @@ struct mcp *mcp_host_alloc(struct device *parent, size_t size)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(mcp_host_alloc);
|
EXPORT_SYMBOL(mcp_host_alloc);
|
||||||
|
|
||||||
int mcp_host_add(struct mcp *mcp)
|
int mcp_host_add(struct mcp *mcp, void *pdata)
|
||||||
{
|
{
|
||||||
|
mcp->attached_device.platform_data = pdata;
|
||||||
dev_set_name(&mcp->attached_device, "mcp0");
|
dev_set_name(&mcp->attached_device, "mcp0");
|
||||||
return device_add(&mcp->attached_device);
|
return device_add(&mcp->attached_device);
|
||||||
}
|
}
|
||||||
|
|
|
@ -194,7 +194,6 @@ static int mcp_sa11x0_probe(struct platform_device *dev)
|
||||||
mcp->owner = THIS_MODULE;
|
mcp->owner = THIS_MODULE;
|
||||||
mcp->ops = &mcp_sa11x0;
|
mcp->ops = &mcp_sa11x0;
|
||||||
mcp->sclk_rate = data->sclk_rate;
|
mcp->sclk_rate = data->sclk_rate;
|
||||||
mcp->gpio_base = data->gpio_base;
|
|
||||||
|
|
||||||
m = priv(mcp);
|
m = priv(mcp);
|
||||||
m->mccr0 = data->mccr0 | 0x7f7f;
|
m->mccr0 = data->mccr0 | 0x7f7f;
|
||||||
|
@ -229,7 +228,7 @@ static int mcp_sa11x0_probe(struct platform_device *dev)
|
||||||
mcp->rw_timeout = (64 * 3 * 1000000 + mcp->sclk_rate - 1) /
|
mcp->rw_timeout = (64 * 3 * 1000000 + mcp->sclk_rate - 1) /
|
||||||
mcp->sclk_rate;
|
mcp->sclk_rate;
|
||||||
|
|
||||||
ret = mcp_host_add(mcp);
|
ret = mcp_host_add(mcp, data->codec_pdata);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -534,6 +534,7 @@ static int ucb1x00_probe(struct mcp *mcp)
|
||||||
{
|
{
|
||||||
struct ucb1x00 *ucb;
|
struct ucb1x00 *ucb;
|
||||||
struct ucb1x00_driver *drv;
|
struct ucb1x00_driver *drv;
|
||||||
|
struct ucb1x00_plat_data *pdata;
|
||||||
unsigned int id;
|
unsigned int id;
|
||||||
int ret = -ENODEV;
|
int ret = -ENODEV;
|
||||||
int temp;
|
int temp;
|
||||||
|
@ -551,7 +552,7 @@ static int ucb1x00_probe(struct mcp *mcp)
|
||||||
if (!ucb)
|
if (!ucb)
|
||||||
goto err_disable;
|
goto err_disable;
|
||||||
|
|
||||||
|
pdata = mcp->attached_device.platform_data;
|
||||||
ucb->dev.class = &ucb1x00_class;
|
ucb->dev.class = &ucb1x00_class;
|
||||||
ucb->dev.parent = &mcp->attached_device;
|
ucb->dev.parent = &mcp->attached_device;
|
||||||
dev_set_name(&ucb->dev, "ucb1x00");
|
dev_set_name(&ucb->dev, "ucb1x00");
|
||||||
|
@ -570,9 +571,9 @@ static int ucb1x00_probe(struct mcp *mcp)
|
||||||
}
|
}
|
||||||
|
|
||||||
ucb->gpio.base = -1;
|
ucb->gpio.base = -1;
|
||||||
if (mcp->gpio_base != 0) {
|
if (pdata && pdata->gpio_base) {
|
||||||
ucb->gpio.label = dev_name(&ucb->dev);
|
ucb->gpio.label = dev_name(&ucb->dev);
|
||||||
ucb->gpio.base = mcp->gpio_base;
|
ucb->gpio.base = pdata->gpio_base;
|
||||||
ucb->gpio.ngpio = 10;
|
ucb->gpio.ngpio = 10;
|
||||||
ucb->gpio.set = ucb1x00_gpio_set;
|
ucb->gpio.set = ucb1x00_gpio_set;
|
||||||
ucb->gpio.get = ucb1x00_gpio_get;
|
ucb->gpio.get = ucb1x00_gpio_get;
|
||||||
|
|
|
@ -20,7 +20,6 @@ struct mcp {
|
||||||
unsigned int sclk_rate;
|
unsigned int sclk_rate;
|
||||||
unsigned int rw_timeout;
|
unsigned int rw_timeout;
|
||||||
struct device attached_device;
|
struct device attached_device;
|
||||||
int gpio_base;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mcp_ops {
|
struct mcp_ops {
|
||||||
|
@ -41,7 +40,7 @@ void mcp_disable(struct mcp *);
|
||||||
#define mcp_get_sclk_rate(mcp) ((mcp)->sclk_rate)
|
#define mcp_get_sclk_rate(mcp) ((mcp)->sclk_rate)
|
||||||
|
|
||||||
struct mcp *mcp_host_alloc(struct device *, size_t);
|
struct mcp *mcp_host_alloc(struct device *, size_t);
|
||||||
int mcp_host_add(struct mcp *);
|
int mcp_host_add(struct mcp *, void *);
|
||||||
void mcp_host_del(struct mcp *);
|
void mcp_host_del(struct mcp *);
|
||||||
void mcp_host_free(struct mcp *);
|
void mcp_host_free(struct mcp *);
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,9 @@
|
||||||
#define UCB_MODE_DYN_VFLAG_ENA (1 << 12)
|
#define UCB_MODE_DYN_VFLAG_ENA (1 << 12)
|
||||||
#define UCB_MODE_AUD_OFF_CAN (1 << 13)
|
#define UCB_MODE_AUD_OFF_CAN (1 << 13)
|
||||||
|
|
||||||
|
struct ucb1x00_plat_data {
|
||||||
|
int gpio_base;
|
||||||
|
};
|
||||||
|
|
||||||
struct ucb1x00_irq {
|
struct ucb1x00_irq {
|
||||||
void *devid;
|
void *devid;
|
||||||
|
|
Loading…
Reference in New Issue