Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 169123
b: refs/heads/master
c: da4f007
h: refs/heads/master
i:
  169121: ce3d194
  169119: 2ceb46d
v: v3
  • Loading branch information
Russell King - ARM Linux authored and Dominik Brodowski committed Nov 9, 2009
1 parent db0a971 commit a383574
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 105 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: be85458edce0f165cff62622f5e73b1d17b1e228
refs/heads/master: da4f007375197d6683461b995d404b01a7fdf2f5
77 changes: 47 additions & 30 deletions trunk/drivers/pcmcia/pxa2xx_base.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,31 @@ static const char *skt_names[] = {
#define SKT_DEV_INFO_SIZE(n) \
(sizeof(struct skt_dev_info) + (n)*sizeof(struct soc_pcmcia_socket))

static int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt)
{
skt->res_skt.start = _PCMCIA(skt->nr);
skt->res_skt.end = _PCMCIA(skt->nr) + PCMCIASp - 1;
skt->res_skt.name = skt_names[skt->nr];
skt->res_skt.flags = IORESOURCE_MEM;

skt->res_io.start = _PCMCIAIO(skt->nr);
skt->res_io.end = _PCMCIAIO(skt->nr) + PCMCIAIOSp - 1;
skt->res_io.name = "io";
skt->res_io.flags = IORESOURCE_MEM | IORESOURCE_BUSY;

skt->res_mem.start = _PCMCIAMem(skt->nr);
skt->res_mem.end = _PCMCIAMem(skt->nr) + PCMCIAMemSp - 1;
skt->res_mem.name = "memory";
skt->res_mem.flags = IORESOURCE_MEM;

skt->res_attr.start = _PCMCIAAttr(skt->nr);
skt->res_attr.end = _PCMCIAAttr(skt->nr) + PCMCIAAttrSp - 1;
skt->res_attr.name = "attribute";
skt->res_attr.flags = IORESOURCE_MEM;

return soc_pcmcia_add_one(skt);
}

int __pxa2xx_drv_pcmcia_probe(struct device *dev)
{
int i, ret;
Expand All @@ -240,6 +265,12 @@ int __pxa2xx_drv_pcmcia_probe(struct device *dev)

ops = (struct pcmcia_low_level *)dev->platform_data;

/* Provide our PXA2xx specific timing routines. */
ops->set_timing = pxa2xx_pcmcia_set_timing;
#ifdef CONFIG_CPU_FREQ
ops->frequency_change = pxa2xx_pcmcia_frequency_change;
#endif

sinfo = kzalloc(SKT_DEV_INFO_SIZE(ops->nr), GFP_KERNEL);
if (!sinfo)
return -ENOMEM;
Expand All @@ -250,40 +281,26 @@ int __pxa2xx_drv_pcmcia_probe(struct device *dev)
for (i = 0; i < ops->nr; i++) {
skt = &sinfo->skt[i];

skt->nr = ops->first + i;
skt->irq = NO_IRQ;

skt->res_skt.start = _PCMCIA(skt->nr);
skt->res_skt.end = _PCMCIA(skt->nr) + PCMCIASp - 1;
skt->res_skt.name = skt_names[skt->nr];
skt->res_skt.flags = IORESOURCE_MEM;
skt->nr = ops->first + i;
skt->irq = NO_IRQ;
skt->dev = dev;
skt->ops = ops;
skt->socket.owner = ops->owner;
skt->socket.dev.parent = dev;

skt->res_io.start = _PCMCIAIO(skt->nr);
skt->res_io.end = _PCMCIAIO(skt->nr) + PCMCIAIOSp - 1;
skt->res_io.name = "io";
skt->res_io.flags = IORESOURCE_MEM | IORESOURCE_BUSY;

skt->res_mem.start = _PCMCIAMem(skt->nr);
skt->res_mem.end = _PCMCIAMem(skt->nr) + PCMCIAMemSp - 1;
skt->res_mem.name = "memory";
skt->res_mem.flags = IORESOURCE_MEM;

skt->res_attr.start = _PCMCIAAttr(skt->nr);
skt->res_attr.end = _PCMCIAAttr(skt->nr) + PCMCIAAttrSp - 1;
skt->res_attr.name = "attribute";
skt->res_attr.flags = IORESOURCE_MEM;
ret = pxa2xx_drv_pcmcia_add_one(skt);
if (ret)
break;
}

/* Provide our PXA2xx specific timing routines. */
ops->set_timing = pxa2xx_pcmcia_set_timing;
#ifdef CONFIG_CPU_FREQ
ops->frequency_change = pxa2xx_pcmcia_frequency_change;
#endif

ret = soc_common_drv_pcmcia_probe(dev, ops, sinfo);

if (!ret)
if (ret) {
while (--i >= 0)
soc_pcmcia_remove_one(&sinfo->skt[i]);
kfree(sinfo);
} else {
pxa2xx_configure_sockets(dev);
dev_set_drvdata(dev, sinfo);
}

return ret;
}
Expand Down
91 changes: 56 additions & 35 deletions trunk/drivers/pcmcia/sa11xx_base.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,47 +171,38 @@ static const char *skt_names[] = {
#define SKT_DEV_INFO_SIZE(n) \
(sizeof(struct skt_dev_info) + (n)*sizeof(struct soc_pcmcia_socket))

static int sa11xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt)
{
skt->res_skt.start = _PCMCIA(skt->nr);
skt->res_skt.end = _PCMCIA(skt->nr) + PCMCIASp - 1;
skt->res_skt.name = skt_names[skt->nr];
skt->res_skt.flags = IORESOURCE_MEM;

skt->res_io.start = _PCMCIAIO(skt->nr);
skt->res_io.end = _PCMCIAIO(skt->nr) + PCMCIAIOSp - 1;
skt->res_io.name = "io";
skt->res_io.flags = IORESOURCE_MEM | IORESOURCE_BUSY;

skt->res_mem.start = _PCMCIAMem(skt->nr);
skt->res_mem.end = _PCMCIAMem(skt->nr) + PCMCIAMemSp - 1;
skt->res_mem.name = "memory";
skt->res_mem.flags = IORESOURCE_MEM;

skt->res_attr.start = _PCMCIAAttr(skt->nr);
skt->res_attr.end = _PCMCIAAttr(skt->nr) + PCMCIAAttrSp - 1;
skt->res_attr.name = "attribute";
skt->res_attr.flags = IORESOURCE_MEM;

return soc_pcmcia_add_one(skt);
}

int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops,
int first, int nr)
{
struct skt_dev_info *sinfo;
struct soc_pcmcia_socket *skt;
int i;

sinfo = kzalloc(SKT_DEV_INFO_SIZE(nr), GFP_KERNEL);
if (!sinfo)
return -ENOMEM;

sinfo->nskt = nr;

/* Initiliaze processor specific parameters */
for (i = 0; i < nr; i++) {
skt = &sinfo->skt[i];

skt->nr = first + i;
skt->irq = NO_IRQ;

skt->res_skt.start = _PCMCIA(skt->nr);
skt->res_skt.end = _PCMCIA(skt->nr) + PCMCIASp - 1;
skt->res_skt.name = skt_names[skt->nr];
skt->res_skt.flags = IORESOURCE_MEM;

skt->res_io.start = _PCMCIAIO(skt->nr);
skt->res_io.end = _PCMCIAIO(skt->nr) + PCMCIAIOSp - 1;
skt->res_io.name = "io";
skt->res_io.flags = IORESOURCE_MEM | IORESOURCE_BUSY;

skt->res_mem.start = _PCMCIAMem(skt->nr);
skt->res_mem.end = _PCMCIAMem(skt->nr) + PCMCIAMemSp - 1;
skt->res_mem.name = "memory";
skt->res_mem.flags = IORESOURCE_MEM;

skt->res_attr.start = _PCMCIAAttr(skt->nr);
skt->res_attr.end = _PCMCIAAttr(skt->nr) + PCMCIAAttrSp - 1;
skt->res_attr.name = "attribute";
skt->res_attr.flags = IORESOURCE_MEM;
}

/*
* set default MECR calculation if the board specific
* code did not specify one...
Expand All @@ -226,7 +217,37 @@ int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops,
ops->frequency_change = sa1100_pcmcia_frequency_change;
#endif

return soc_common_drv_pcmcia_probe(dev, ops, sinfo);
sinfo = kzalloc(SKT_DEV_INFO_SIZE(nr), GFP_KERNEL);
if (!sinfo)
return -ENOMEM;

sinfo->nskt = nr;

/* Initiliaze processor specific parameters */
for (i = 0; i < nr; i++) {
skt = &sinfo->skt[i];

skt->nr = first + i;
skt->irq = NO_IRQ;
skt->dev = dev;
skt->ops = ops;
skt->socket.owner = ops->owner;
skt->socket.dev.parent = dev;

ret = sa11xx_drv_pcmcia_add_one(skt);
if (ret)
break;
}

if (ret) {
while (--i >= 0)
soc_pcmcia_remove_one(&sinfo->skt[i]);
kfree(sinfo);
} else {
dev_set_drvdata(dev, sinfo);
}

return ret;
}
EXPORT_SYMBOL(sa11xx_drv_pcmcia_probe);

Expand Down
37 changes: 0 additions & 37 deletions trunk/drivers/pcmcia/soc_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -741,43 +741,6 @@ int soc_pcmcia_add_one(struct soc_pcmcia_socket *skt)
}
EXPORT_SYMBOL(soc_pcmcia_add_one);

int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops,
struct skt_dev_info *sinfo)
{
struct soc_pcmcia_socket *skt;
int ret, i;

/*
* Initialise the per-socket structure.
*/
for (i = ret = 0; i < sinfo->nskt; i++) {
skt = &sinfo->skt[i];

skt->socket.owner = ops->owner;
skt->socket.dev.parent = dev;

skt->dev = dev;
skt->ops = ops;

ret = soc_pcmcia_add_one(skt);
if (ret)
break;

WARN_ON(skt->socket.sock != i);
}

if (ret) {
while (--i >= 0)
soc_pcmcia_remove_one(&sinfo->skt[i]);
kfree(sinfo);
} else {
dev_set_drvdata(dev, sinfo);
}

return ret;
}
EXPORT_SYMBOL(soc_common_drv_pcmcia_probe);

MODULE_AUTHOR("John Dorsey <john+@cs.cmu.edu>");
MODULE_DESCRIPTION("Linux PCMCIA Card Services: Common SoC support");
MODULE_LICENSE("Dual MPL/GPL");
2 changes: 0 additions & 2 deletions trunk/drivers/pcmcia/soc_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,6 @@ extern void soc_common_pcmcia_get_timing(struct soc_pcmcia_socket *, struct soc_
void soc_pcmcia_remove_one(struct soc_pcmcia_socket *skt);
int soc_pcmcia_add_one(struct soc_pcmcia_socket *skt);

extern int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, struct skt_dev_info *sinfo);


#ifdef CONFIG_PCMCIA_DEBUG

Expand Down

0 comments on commit a383574

Please sign in to comment.