diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-02-22 12:26:54 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-02-22 12:26:54 -0500 |
| commit | d8204a37baf5474d3154eb536c936369be2bd5c0 (patch) | |
| tree | eb598882870e1e21356a015a3634c5b68fc75e6a | |
| parent | 571020df6fae18623498d70d3f2331d9eb7ad2be (diff) | |
| parent | 33619f0d3ff715a2a5499520967d526ad931d70d (diff) | |
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
| -rw-r--r-- | drivers/char/pcmcia/cm4000_cs.c | 3 | ||||
| -rw-r--r-- | drivers/char/pcmcia/ipwireless/main.c | 52 | ||||
| -rw-r--r-- | drivers/pcmcia/pcmcia_resource.c | 2 | ||||
| -rw-r--r-- | drivers/pcmcia/pxa2xx_base.c | 2 | ||||
| -rw-r--r-- | drivers/pcmcia/pxa2xx_base.h | 1 | ||||
| -rw-r--r-- | drivers/pcmcia/pxa2xx_lubbock.c | 1 | ||||
| -rw-r--r-- | include/pcmcia/ds.h | 1 |
7 files changed, 39 insertions, 23 deletions
diff --git a/drivers/char/pcmcia/cm4000_cs.c b/drivers/char/pcmcia/cm4000_cs.c index 777181a2e60..bcbbc71febb 100644 --- a/drivers/char/pcmcia/cm4000_cs.c +++ b/drivers/char/pcmcia/cm4000_cs.c | |||
| @@ -830,8 +830,7 @@ static void monitor_card(unsigned long p) | |||
| 830 | test_bit(IS_ANY_T1, &dev->flags))) { | 830 | test_bit(IS_ANY_T1, &dev->flags))) { |
| 831 | DEBUGP(4, dev, "Perform AUTOPPS\n"); | 831 | DEBUGP(4, dev, "Perform AUTOPPS\n"); |
| 832 | set_bit(IS_AUTOPPS_ACT, &dev->flags); | 832 | set_bit(IS_AUTOPPS_ACT, &dev->flags); |
| 833 | ptsreq.protocol = ptsreq.protocol = | 833 | ptsreq.protocol = (0x01 << dev->proto); |
| 834 | (0x01 << dev->proto); | ||
| 835 | ptsreq.flags = 0x01; | 834 | ptsreq.flags = 0x01; |
| 836 | ptsreq.pts1 = 0x00; | 835 | ptsreq.pts1 = 0x00; |
| 837 | ptsreq.pts2 = 0x00; | 836 | ptsreq.pts2 = 0x00; |
diff --git a/drivers/char/pcmcia/ipwireless/main.c b/drivers/char/pcmcia/ipwireless/main.c index 94b8eb4d691..444155a305a 100644 --- a/drivers/char/pcmcia/ipwireless/main.c +++ b/drivers/char/pcmcia/ipwireless/main.c | |||
| @@ -78,7 +78,6 @@ static void signalled_reboot_callback(void *callback_data) | |||
| 78 | static int ipwireless_probe(struct pcmcia_device *p_dev, void *priv_data) | 78 | static int ipwireless_probe(struct pcmcia_device *p_dev, void *priv_data) |
| 79 | { | 79 | { |
| 80 | struct ipw_dev *ipw = priv_data; | 80 | struct ipw_dev *ipw = priv_data; |
| 81 | struct resource *io_resource; | ||
| 82 | int ret; | 81 | int ret; |
| 83 | 82 | ||
| 84 | p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; | 83 | 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) | |||
| 92 | if (ret) | 91 | if (ret) |
| 93 | return ret; | 92 | return ret; |
| 94 | 93 | ||
| 95 | io_resource = request_region(p_dev->resource[0]->start, | 94 | if (!request_region(p_dev->resource[0]->start, |
| 96 | resource_size(p_dev->resource[0]), | 95 | resource_size(p_dev->resource[0]), |
| 97 | IPWIRELESS_PCCARD_NAME); | 96 | IPWIRELESS_PCCARD_NAME)) { |
| 97 | ret = -EBUSY; | ||
| 98 | goto exit; | ||
| 99 | } | ||
| 98 | 100 | ||
| 99 | p_dev->resource[2]->flags |= | 101 | p_dev->resource[2]->flags |= |
| 100 | WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM | WIN_ENABLE; | 102 | 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) | |||
| 105 | 107 | ||
| 106 | ret = pcmcia_map_mem_page(p_dev, p_dev->resource[2], p_dev->card_addr); | 108 | ret = pcmcia_map_mem_page(p_dev, p_dev->resource[2], p_dev->card_addr); |
| 107 | if (ret != 0) | 109 | if (ret != 0) |
| 108 | goto exit2; | 110 | goto exit1; |
| 109 | 111 | ||
| 110 | ipw->is_v2_card = resource_size(p_dev->resource[2]) == 0x100; | 112 | ipw->is_v2_card = resource_size(p_dev->resource[2]) == 0x100; |
| 111 | 113 | ||
| 112 | ipw->attr_memory = ioremap(p_dev->resource[2]->start, | 114 | ipw->common_memory = ioremap(p_dev->resource[2]->start, |
| 113 | resource_size(p_dev->resource[2])); | 115 | resource_size(p_dev->resource[2])); |
| 114 | request_mem_region(p_dev->resource[2]->start, | 116 | if (!request_mem_region(p_dev->resource[2]->start, |
| 115 | resource_size(p_dev->resource[2]), | 117 | resource_size(p_dev->resource[2]), |
| 116 | IPWIRELESS_PCCARD_NAME); | 118 | IPWIRELESS_PCCARD_NAME)) { |
| 119 | ret = -EBUSY; | ||
| 120 | goto exit2; | ||
| 121 | } | ||
| 117 | 122 | ||
| 118 | p_dev->resource[3]->flags |= WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_AM | | 123 | p_dev->resource[3]->flags |= WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_AM | |
| 119 | WIN_ENABLE; | 124 | WIN_ENABLE; |
| 120 | p_dev->resource[3]->end = 0; /* this used to be 0x1000 */ | 125 | p_dev->resource[3]->end = 0; /* this used to be 0x1000 */ |
| 121 | ret = pcmcia_request_window(p_dev, p_dev->resource[3], 0); | 126 | ret = pcmcia_request_window(p_dev, p_dev->resource[3], 0); |
| 122 | if (ret != 0) | 127 | if (ret != 0) |
| 123 | goto exit2; | 128 | goto exit3; |
| 124 | 129 | ||
| 125 | ret = pcmcia_map_mem_page(p_dev, p_dev->resource[3], 0); | 130 | ret = pcmcia_map_mem_page(p_dev, p_dev->resource[3], 0); |
| 126 | if (ret != 0) | 131 | if (ret != 0) |
| @@ -128,23 +133,28 @@ static int ipwireless_probe(struct pcmcia_device *p_dev, void *priv_data) | |||
| 128 | 133 | ||
| 129 | ipw->attr_memory = ioremap(p_dev->resource[3]->start, | 134 | ipw->attr_memory = ioremap(p_dev->resource[3]->start, |
| 130 | resource_size(p_dev->resource[3])); | 135 | resource_size(p_dev->resource[3])); |
| 131 | request_mem_region(p_dev->resource[3]->start, | 136 | if (!request_mem_region(p_dev->resource[3]->start, |
| 132 | resource_size(p_dev->resource[3]), | 137 | resource_size(p_dev->resource[3]), |
| 133 | IPWIRELESS_PCCARD_NAME); | 138 | IPWIRELESS_PCCARD_NAME)) { |
| 139 | ret = -EBUSY; | ||
| 140 | goto exit4; | ||
| 141 | } | ||
| 134 | 142 | ||
| 135 | return 0; | 143 | return 0; |
| 136 | 144 | ||
| 145 | exit4: | ||
| 146 | iounmap(ipw->attr_memory); | ||
| 137 | exit3: | 147 | exit3: |
| 148 | release_mem_region(p_dev->resource[2]->start, | ||
| 149 | resource_size(p_dev->resource[2])); | ||
| 138 | exit2: | 150 | exit2: |
| 139 | if (ipw->common_memory) { | 151 | iounmap(ipw->common_memory); |
| 140 | release_mem_region(p_dev->resource[2]->start, | ||
| 141 | resource_size(p_dev->resource[2])); | ||
| 142 | iounmap(ipw->common_memory); | ||
| 143 | } | ||
| 144 | exit1: | 152 | exit1: |
| 145 | release_resource(io_resource); | 153 | release_region(p_dev->resource[0]->start, |
| 154 | resource_size(p_dev->resource[0])); | ||
| 155 | exit: | ||
| 146 | pcmcia_disable_device(p_dev); | 156 | pcmcia_disable_device(p_dev); |
| 147 | return -1; | 157 | return ret; |
| 148 | } | 158 | } |
| 149 | 159 | ||
| 150 | static int config_ipwireless(struct ipw_dev *ipw) | 160 | static int config_ipwireless(struct ipw_dev *ipw) |
| @@ -219,6 +229,8 @@ exit: | |||
| 219 | 229 | ||
| 220 | static void release_ipwireless(struct ipw_dev *ipw) | 230 | static void release_ipwireless(struct ipw_dev *ipw) |
| 221 | { | 231 | { |
| 232 | release_region(ipw->link->resource[0]->start, | ||
| 233 | resource_size(ipw->link->resource[0])); | ||
| 222 | if (ipw->common_memory) { | 234 | if (ipw->common_memory) { |
| 223 | release_mem_region(ipw->link->resource[2]->start, | 235 | release_mem_region(ipw->link->resource[2]->start, |
| 224 | resource_size(ipw->link->resource[2])); | 236 | resource_size(ipw->link->resource[2])); |
diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c index 0bdda5b3ed5..42fbf1a7557 100644 --- a/drivers/pcmcia/pcmcia_resource.c +++ b/drivers/pcmcia/pcmcia_resource.c | |||
| @@ -518,6 +518,8 @@ int pcmcia_enable_device(struct pcmcia_device *p_dev) | |||
| 518 | flags |= CONF_ENABLE_IOCARD; | 518 | flags |= CONF_ENABLE_IOCARD; |
| 519 | if (flags & CONF_ENABLE_IOCARD) | 519 | if (flags & CONF_ENABLE_IOCARD) |
| 520 | s->socket.flags |= SS_IOCARD; | 520 | s->socket.flags |= SS_IOCARD; |
| 521 | if (flags & CONF_ENABLE_ZVCARD) | ||
| 522 | s->socket.flags |= SS_ZVCARD | SS_IOCARD; | ||
| 521 | if (flags & CONF_ENABLE_SPKR) { | 523 | if (flags & CONF_ENABLE_SPKR) { |
| 522 | s->socket.flags |= SS_SPKR_ENA; | 524 | s->socket.flags |= SS_SPKR_ENA; |
| 523 | status = CCSR_AUDIO_ENA; | 525 | status = CCSR_AUDIO_ENA; |
diff --git a/drivers/pcmcia/pxa2xx_base.c b/drivers/pcmcia/pxa2xx_base.c index 3755e7c8c71..2c540542b5a 100644 --- a/drivers/pcmcia/pxa2xx_base.c +++ b/drivers/pcmcia/pxa2xx_base.c | |||
| @@ -215,7 +215,7 @@ pxa2xx_pcmcia_frequency_change(struct soc_pcmcia_socket *skt, | |||
| 215 | } | 215 | } |
| 216 | #endif | 216 | #endif |
| 217 | 217 | ||
| 218 | static void pxa2xx_configure_sockets(struct device *dev) | 218 | void pxa2xx_configure_sockets(struct device *dev) |
| 219 | { | 219 | { |
| 220 | struct pcmcia_low_level *ops = dev->platform_data; | 220 | struct pcmcia_low_level *ops = dev->platform_data; |
| 221 | /* | 221 | /* |
diff --git a/drivers/pcmcia/pxa2xx_base.h b/drivers/pcmcia/pxa2xx_base.h index bb62ea87b8f..b609b45469e 100644 --- a/drivers/pcmcia/pxa2xx_base.h +++ b/drivers/pcmcia/pxa2xx_base.h | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt); | 1 | int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt); |
| 2 | void pxa2xx_drv_pcmcia_ops(struct pcmcia_low_level *ops); | 2 | void pxa2xx_drv_pcmcia_ops(struct pcmcia_low_level *ops); |
| 3 | void pxa2xx_configure_sockets(struct device *dev); | ||
| 3 | 4 | ||
diff --git a/drivers/pcmcia/pxa2xx_lubbock.c b/drivers/pcmcia/pxa2xx_lubbock.c index b9f8c8fb42b..25afe637c65 100644 --- a/drivers/pcmcia/pxa2xx_lubbock.c +++ b/drivers/pcmcia/pxa2xx_lubbock.c | |||
| @@ -226,6 +226,7 @@ int pcmcia_lubbock_init(struct sa1111_dev *sadev) | |||
| 226 | lubbock_set_misc_wr((1 << 15) | (1 << 14), 0); | 226 | lubbock_set_misc_wr((1 << 15) | (1 << 14), 0); |
| 227 | 227 | ||
| 228 | pxa2xx_drv_pcmcia_ops(&lubbock_pcmcia_ops); | 228 | pxa2xx_drv_pcmcia_ops(&lubbock_pcmcia_ops); |
| 229 | pxa2xx_configure_sockets(&sadev->dev); | ||
| 229 | ret = sa1111_pcmcia_add(sadev, &lubbock_pcmcia_ops, | 230 | ret = sa1111_pcmcia_add(sadev, &lubbock_pcmcia_ops, |
| 230 | pxa2xx_drv_pcmcia_add_one); | 231 | pxa2xx_drv_pcmcia_add_one); |
| 231 | } | 232 | } |
diff --git a/include/pcmcia/ds.h b/include/pcmcia/ds.h index 8479b66c067..3fd5064dd43 100644 --- a/include/pcmcia/ds.h +++ b/include/pcmcia/ds.h | |||
| @@ -261,6 +261,7 @@ void pcmcia_disable_device(struct pcmcia_device *p_dev); | |||
| 261 | #define CONF_ENABLE_ESR 0x0008 | 261 | #define CONF_ENABLE_ESR 0x0008 |
| 262 | #define CONF_ENABLE_IOCARD 0x0010 /* auto-enabled if IO resources or IRQ | 262 | #define CONF_ENABLE_IOCARD 0x0010 /* auto-enabled if IO resources or IRQ |
| 263 | * (CONF_ENABLE_IRQ) in use */ | 263 | * (CONF_ENABLE_IRQ) in use */ |
| 264 | #define CONF_ENABLE_ZVCARD 0x0020 | ||
| 264 | 265 | ||
| 265 | /* flags used by pcmcia_loop_config() autoconfiguration */ | 266 | /* flags used by pcmcia_loop_config() autoconfiguration */ |
| 266 | #define CONF_AUTO_CHECK_VCC 0x0100 /* check for matching Vcc? */ | 267 | #define CONF_AUTO_CHECK_VCC 0x0100 /* check for matching Vcc? */ |
