Merge branch 'urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6

* 'urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6:
  pcmcia: re-enable Zoomed Video support
  cm4000_cs: Fix undefined ops warning
  pcmcia vs. MECR on pxa25x/sa1111
  drivers/char/pcmcia/ipwireless/main.c: Convert release_resource to release_region/release_mem_region
This commit is contained in:
Linus Torvalds 2011-02-22 09:26:54 -08:00
commit d8204a37ba
7 changed files with 39 additions and 23 deletions

View file

@ -830,8 +830,7 @@ static void monitor_card(unsigned long p)
test_bit(IS_ANY_T1, &dev->flags))) { test_bit(IS_ANY_T1, &dev->flags))) {
DEBUGP(4, dev, "Perform AUTOPPS\n"); DEBUGP(4, dev, "Perform AUTOPPS\n");
set_bit(IS_AUTOPPS_ACT, &dev->flags); set_bit(IS_AUTOPPS_ACT, &dev->flags);
ptsreq.protocol = ptsreq.protocol = ptsreq.protocol = (0x01 << dev->proto);
(0x01 << dev->proto);
ptsreq.flags = 0x01; ptsreq.flags = 0x01;
ptsreq.pts1 = 0x00; ptsreq.pts1 = 0x00;
ptsreq.pts2 = 0x00; ptsreq.pts2 = 0x00;

View file

@ -78,7 +78,6 @@ static void signalled_reboot_callback(void *callback_data)
static int ipwireless_probe(struct pcmcia_device *p_dev, void *priv_data) static int ipwireless_probe(struct pcmcia_device *p_dev, void *priv_data)
{ {
struct ipw_dev *ipw = priv_data; struct ipw_dev *ipw = priv_data;
struct resource *io_resource;
int ret; int ret;
p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH;
@ -92,9 +91,12 @@ static int ipwireless_probe(struct pcmcia_device *p_dev, void *priv_data)
if (ret) if (ret)
return ret; return ret;
io_resource = request_region(p_dev->resource[0]->start, if (!request_region(p_dev->resource[0]->start,
resource_size(p_dev->resource[0]), resource_size(p_dev->resource[0]),
IPWIRELESS_PCCARD_NAME); IPWIRELESS_PCCARD_NAME)) {
ret = -EBUSY;
goto exit;
}
p_dev->resource[2]->flags |= p_dev->resource[2]->flags |=
WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM | WIN_ENABLE; WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM | WIN_ENABLE;
@ -105,22 +107,25 @@ static int ipwireless_probe(struct pcmcia_device *p_dev, void *priv_data)
ret = pcmcia_map_mem_page(p_dev, p_dev->resource[2], p_dev->card_addr); ret = pcmcia_map_mem_page(p_dev, p_dev->resource[2], p_dev->card_addr);
if (ret != 0) if (ret != 0)
goto exit2; goto exit1;
ipw->is_v2_card = resource_size(p_dev->resource[2]) == 0x100; ipw->is_v2_card = resource_size(p_dev->resource[2]) == 0x100;
ipw->attr_memory = ioremap(p_dev->resource[2]->start, ipw->common_memory = ioremap(p_dev->resource[2]->start,
resource_size(p_dev->resource[2])); resource_size(p_dev->resource[2]));
request_mem_region(p_dev->resource[2]->start, if (!request_mem_region(p_dev->resource[2]->start,
resource_size(p_dev->resource[2]), resource_size(p_dev->resource[2]),
IPWIRELESS_PCCARD_NAME); IPWIRELESS_PCCARD_NAME)) {
ret = -EBUSY;
goto exit2;
}
p_dev->resource[3]->flags |= WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_AM | p_dev->resource[3]->flags |= WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_AM |
WIN_ENABLE; WIN_ENABLE;
p_dev->resource[3]->end = 0; /* this used to be 0x1000 */ p_dev->resource[3]->end = 0; /* this used to be 0x1000 */
ret = pcmcia_request_window(p_dev, p_dev->resource[3], 0); ret = pcmcia_request_window(p_dev, p_dev->resource[3], 0);
if (ret != 0) if (ret != 0)
goto exit2; goto exit3;
ret = pcmcia_map_mem_page(p_dev, p_dev->resource[3], 0); ret = pcmcia_map_mem_page(p_dev, p_dev->resource[3], 0);
if (ret != 0) if (ret != 0)
@ -128,23 +133,28 @@ static int ipwireless_probe(struct pcmcia_device *p_dev, void *priv_data)
ipw->attr_memory = ioremap(p_dev->resource[3]->start, ipw->attr_memory = ioremap(p_dev->resource[3]->start,
resource_size(p_dev->resource[3])); resource_size(p_dev->resource[3]));
request_mem_region(p_dev->resource[3]->start, if (!request_mem_region(p_dev->resource[3]->start,
resource_size(p_dev->resource[3]), resource_size(p_dev->resource[3]),
IPWIRELESS_PCCARD_NAME); IPWIRELESS_PCCARD_NAME)) {
ret = -EBUSY;
goto exit4;
}
return 0; return 0;
exit4:
iounmap(ipw->attr_memory);
exit3: exit3:
release_mem_region(p_dev->resource[2]->start,
resource_size(p_dev->resource[2]));
exit2: exit2:
if (ipw->common_memory) { iounmap(ipw->common_memory);
release_mem_region(p_dev->resource[2]->start,
resource_size(p_dev->resource[2]));
iounmap(ipw->common_memory);
}
exit1: exit1:
release_resource(io_resource); release_region(p_dev->resource[0]->start,
resource_size(p_dev->resource[0]));
exit:
pcmcia_disable_device(p_dev); pcmcia_disable_device(p_dev);
return -1; return ret;
} }
static int config_ipwireless(struct ipw_dev *ipw) static int config_ipwireless(struct ipw_dev *ipw)
@ -219,6 +229,8 @@ static int config_ipwireless(struct ipw_dev *ipw)
static void release_ipwireless(struct ipw_dev *ipw) static void release_ipwireless(struct ipw_dev *ipw)
{ {
release_region(ipw->link->resource[0]->start,
resource_size(ipw->link->resource[0]));
if (ipw->common_memory) { if (ipw->common_memory) {
release_mem_region(ipw->link->resource[2]->start, release_mem_region(ipw->link->resource[2]->start,
resource_size(ipw->link->resource[2])); resource_size(ipw->link->resource[2]));

View file

@ -518,6 +518,8 @@ int pcmcia_enable_device(struct pcmcia_device *p_dev)
flags |= CONF_ENABLE_IOCARD; flags |= CONF_ENABLE_IOCARD;
if (flags & CONF_ENABLE_IOCARD) if (flags & CONF_ENABLE_IOCARD)
s->socket.flags |= SS_IOCARD; s->socket.flags |= SS_IOCARD;
if (flags & CONF_ENABLE_ZVCARD)
s->socket.flags |= SS_ZVCARD | SS_IOCARD;
if (flags & CONF_ENABLE_SPKR) { if (flags & CONF_ENABLE_SPKR) {
s->socket.flags |= SS_SPKR_ENA; s->socket.flags |= SS_SPKR_ENA;
status = CCSR_AUDIO_ENA; status = CCSR_AUDIO_ENA;

View file

@ -215,7 +215,7 @@ pxa2xx_pcmcia_frequency_change(struct soc_pcmcia_socket *skt,
} }
#endif #endif
static void pxa2xx_configure_sockets(struct device *dev) void pxa2xx_configure_sockets(struct device *dev)
{ {
struct pcmcia_low_level *ops = dev->platform_data; struct pcmcia_low_level *ops = dev->platform_data;
/* /*

View file

@ -1,3 +1,4 @@
int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt); int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt);
void pxa2xx_drv_pcmcia_ops(struct pcmcia_low_level *ops); void pxa2xx_drv_pcmcia_ops(struct pcmcia_low_level *ops);
void pxa2xx_configure_sockets(struct device *dev);

View file

@ -226,6 +226,7 @@ int pcmcia_lubbock_init(struct sa1111_dev *sadev)
lubbock_set_misc_wr((1 << 15) | (1 << 14), 0); lubbock_set_misc_wr((1 << 15) | (1 << 14), 0);
pxa2xx_drv_pcmcia_ops(&lubbock_pcmcia_ops); pxa2xx_drv_pcmcia_ops(&lubbock_pcmcia_ops);
pxa2xx_configure_sockets(&sadev->dev);
ret = sa1111_pcmcia_add(sadev, &lubbock_pcmcia_ops, ret = sa1111_pcmcia_add(sadev, &lubbock_pcmcia_ops,
pxa2xx_drv_pcmcia_add_one); pxa2xx_drv_pcmcia_add_one);
} }

View file

@ -261,6 +261,7 @@ void pcmcia_disable_device(struct pcmcia_device *p_dev);
#define CONF_ENABLE_ESR 0x0008 #define CONF_ENABLE_ESR 0x0008
#define CONF_ENABLE_IOCARD 0x0010 /* auto-enabled if IO resources or IRQ #define CONF_ENABLE_IOCARD 0x0010 /* auto-enabled if IO resources or IRQ
* (CONF_ENABLE_IRQ) in use */ * (CONF_ENABLE_IRQ) in use */
#define CONF_ENABLE_ZVCARD 0x0020
/* flags used by pcmcia_loop_config() autoconfiguration */ /* flags used by pcmcia_loop_config() autoconfiguration */
#define CONF_AUTO_CHECK_VCC 0x0100 /* check for matching Vcc? */ #define CONF_AUTO_CHECK_VCC 0x0100 /* check for matching Vcc? */