aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pnp
diff options
context:
space:
mode:
authorStefan Richter <stefanr@s5r6.in-berlin.de>2011-05-10 14:52:07 -0400
committerStefan Richter <stefanr@s5r6.in-berlin.de>2011-05-10 16:50:41 -0400
commit020abf03cd659388f94cb328e1e1df0656e0d7ff (patch)
tree40d05011708ad1b4a05928d167eb120420581aa6 /drivers/pnp
parent0ff8fbc61727c926883eec381fbd3d32d1fab504 (diff)
parent693d92a1bbc9e42681c42ed190bd42b636ca876f (diff)
Merge tag 'v2.6.39-rc7'
in order to pull in changes in drivers/media/dvb/firewire/ and sound/firewire/.
Diffstat (limited to 'drivers/pnp')
-rw-r--r--drivers/pnp/Makefile6
-rw-r--r--drivers/pnp/base.h2
-rw-r--r--drivers/pnp/card.c4
-rw-r--r--drivers/pnp/core.c7
-rw-r--r--drivers/pnp/driver.c7
-rw-r--r--drivers/pnp/isapnp/Makefile6
-rw-r--r--drivers/pnp/manager.c7
-rw-r--r--drivers/pnp/pnpacpi/Makefile3
-rw-r--r--drivers/pnp/pnpacpi/core.c95
-rw-r--r--drivers/pnp/pnpbios/Makefile5
-rw-r--r--drivers/pnp/pnpbios/bioscalls.c2
-rw-r--r--drivers/pnp/resource.c7
12 files changed, 99 insertions, 52 deletions
diff --git a/drivers/pnp/Makefile b/drivers/pnp/Makefile
index 8de3775ec242..bfba893cb321 100644
--- a/drivers/pnp/Makefile
+++ b/drivers/pnp/Makefile
@@ -2,11 +2,13 @@
2# Makefile for the Linux Plug-and-Play Support. 2# Makefile for the Linux Plug-and-Play Support.
3# 3#
4 4
5obj-y := core.o card.o driver.o resource.o manager.o support.o interface.o quirks.o 5obj-y := pnp.o
6
7pnp-y := core.o card.o driver.o resource.o manager.o support.o interface.o quirks.o
6 8
7obj-$(CONFIG_PNPACPI) += pnpacpi/ 9obj-$(CONFIG_PNPACPI) += pnpacpi/
8obj-$(CONFIG_PNPBIOS) += pnpbios/ 10obj-$(CONFIG_PNPBIOS) += pnpbios/
9obj-$(CONFIG_ISAPNP) += isapnp/ 11obj-$(CONFIG_ISAPNP) += isapnp/
10 12
11# pnp_system_init goes after pnpacpi/pnpbios init 13# pnp_system_init goes after pnpacpi/pnpbios init
12obj-y += system.o 14pnp-y += system.o
diff --git a/drivers/pnp/base.h b/drivers/pnp/base.h
index 19bc73695475..fa4e0a5db3f8 100644
--- a/drivers/pnp/base.h
+++ b/drivers/pnp/base.h
@@ -142,7 +142,9 @@ void __pnp_remove_device(struct pnp_dev *dev);
142int pnp_check_port(struct pnp_dev *dev, struct resource *res); 142int pnp_check_port(struct pnp_dev *dev, struct resource *res);
143int pnp_check_mem(struct pnp_dev *dev, struct resource *res); 143int pnp_check_mem(struct pnp_dev *dev, struct resource *res);
144int pnp_check_irq(struct pnp_dev *dev, struct resource *res); 144int pnp_check_irq(struct pnp_dev *dev, struct resource *res);
145#ifdef CONFIG_ISA_DMA_API
145int pnp_check_dma(struct pnp_dev *dev, struct resource *res); 146int pnp_check_dma(struct pnp_dev *dev, struct resource *res);
147#endif
146 148
147char *pnp_resource_type_name(struct resource *res); 149char *pnp_resource_type_name(struct resource *res);
148void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc); 150void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc);
diff --git a/drivers/pnp/card.c b/drivers/pnp/card.c
index 4a651f69e17c..bc00693d0c79 100644
--- a/drivers/pnp/card.c
+++ b/drivers/pnp/card.c
@@ -320,7 +320,7 @@ void pnp_remove_card_device(struct pnp_dev *dev)
320 * pnp_request_card_device - Searches for a PnP device under the specified card 320 * pnp_request_card_device - Searches for a PnP device under the specified card
321 * @clink: pointer to the card link, cannot be NULL 321 * @clink: pointer to the card link, cannot be NULL
322 * @id: pointer to a PnP ID structure that explains the rules for finding the device 322 * @id: pointer to a PnP ID structure that explains the rules for finding the device
323 * @from: Starting place to search from. If NULL it will start from the begining. 323 * @from: Starting place to search from. If NULL it will start from the beginning.
324 */ 324 */
325struct pnp_dev *pnp_request_card_device(struct pnp_card_link *clink, 325struct pnp_dev *pnp_request_card_device(struct pnp_card_link *clink,
326 const char *id, struct pnp_dev *from) 326 const char *id, struct pnp_dev *from)
@@ -369,7 +369,7 @@ err_out:
369 369
370/** 370/**
371 * pnp_release_card_device - call this when the driver no longer needs the device 371 * pnp_release_card_device - call this when the driver no longer needs the device
372 * @dev: pointer to the PnP device stucture 372 * @dev: pointer to the PnP device structure
373 */ 373 */
374void pnp_release_card_device(struct pnp_dev *dev) 374void pnp_release_card_device(struct pnp_dev *dev)
375{ 375{
diff --git a/drivers/pnp/core.c b/drivers/pnp/core.c
index 0f34d962fd3c..cb6ce42f8e77 100644
--- a/drivers/pnp/core.c
+++ b/drivers/pnp/core.c
@@ -220,10 +220,5 @@ subsys_initcall(pnp_init);
220int pnp_debug; 220int pnp_debug;
221 221
222#if defined(CONFIG_PNP_DEBUG_MESSAGES) 222#if defined(CONFIG_PNP_DEBUG_MESSAGES)
223static int __init pnp_debug_setup(char *__unused) 223module_param_named(debug, pnp_debug, int, 0644);
224{
225 pnp_debug = 1;
226 return 1;
227}
228__setup("pnp.debug", pnp_debug_setup);
229#endif 224#endif
diff --git a/drivers/pnp/driver.c b/drivers/pnp/driver.c
index d1dbb9df53fa..00e94032531a 100644
--- a/drivers/pnp/driver.c
+++ b/drivers/pnp/driver.c
@@ -189,8 +189,11 @@ static int pnp_bus_resume(struct device *dev)
189 if (!pnp_drv) 189 if (!pnp_drv)
190 return 0; 190 return 0;
191 191
192 if (pnp_dev->protocol->resume) 192 if (pnp_dev->protocol->resume) {
193 pnp_dev->protocol->resume(pnp_dev); 193 error = pnp_dev->protocol->resume(pnp_dev);
194 if (error)
195 return error;
196 }
194 197
195 if (pnp_can_write(pnp_dev)) { 198 if (pnp_can_write(pnp_dev)) {
196 error = pnp_start_dev(pnp_dev); 199 error = pnp_start_dev(pnp_dev);
diff --git a/drivers/pnp/isapnp/Makefile b/drivers/pnp/isapnp/Makefile
index cac18bbfb817..6e607aa33aa3 100644
--- a/drivers/pnp/isapnp/Makefile
+++ b/drivers/pnp/isapnp/Makefile
@@ -1,7 +1,7 @@
1# 1#
2# Makefile for the kernel ISAPNP driver. 2# Makefile for the kernel ISAPNP driver.
3# 3#
4obj-y += pnp.o
5pnp-y := core.o compat.o
4 6
5isapnp-proc-$(CONFIG_PROC_FS) = proc.o 7pnp-$(CONFIG_PROC_FS) += proc.o
6
7obj-y := core.o compat.o $(isapnp-proc-y)
diff --git a/drivers/pnp/manager.c b/drivers/pnp/manager.c
index 0a15664eef1c..ed9ce507149a 100644
--- a/drivers/pnp/manager.c
+++ b/drivers/pnp/manager.c
@@ -171,6 +171,7 @@ __add:
171 return 0; 171 return 0;
172} 172}
173 173
174#ifdef CONFIG_ISA_DMA_API
174static int pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx) 175static int pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx)
175{ 176{
176 struct resource *res, local_res; 177 struct resource *res, local_res;
@@ -210,6 +211,7 @@ __add:
210 pnp_add_dma_resource(dev, res->start, res->flags); 211 pnp_add_dma_resource(dev, res->start, res->flags);
211 return 0; 212 return 0;
212} 213}
214#endif /* CONFIG_ISA_DMA_API */
213 215
214void pnp_init_resources(struct pnp_dev *dev) 216void pnp_init_resources(struct pnp_dev *dev)
215{ 217{
@@ -234,7 +236,8 @@ static void pnp_clean_resource_table(struct pnp_dev *dev)
234static int pnp_assign_resources(struct pnp_dev *dev, int set) 236static int pnp_assign_resources(struct pnp_dev *dev, int set)
235{ 237{
236 struct pnp_option *option; 238 struct pnp_option *option;
237 int nport = 0, nmem = 0, nirq = 0, ndma = 0; 239 int nport = 0, nmem = 0, nirq = 0;
240 int ndma __maybe_unused = 0;
238 int ret = 0; 241 int ret = 0;
239 242
240 pnp_dbg(&dev->dev, "pnp_assign_resources, try dependent set %d\n", set); 243 pnp_dbg(&dev->dev, "pnp_assign_resources, try dependent set %d\n", set);
@@ -256,9 +259,11 @@ static int pnp_assign_resources(struct pnp_dev *dev, int set)
256 case IORESOURCE_IRQ: 259 case IORESOURCE_IRQ:
257 ret = pnp_assign_irq(dev, &option->u.irq, nirq++); 260 ret = pnp_assign_irq(dev, &option->u.irq, nirq++);
258 break; 261 break;
262#ifdef CONFIG_ISA_DMA_API
259 case IORESOURCE_DMA: 263 case IORESOURCE_DMA:
260 ret = pnp_assign_dma(dev, &option->u.dma, ndma++); 264 ret = pnp_assign_dma(dev, &option->u.dma, ndma++);
261 break; 265 break;
266#endif
262 default: 267 default:
263 ret = -EINVAL; 268 ret = -EINVAL;
264 break; 269 break;
diff --git a/drivers/pnp/pnpacpi/Makefile b/drivers/pnp/pnpacpi/Makefile
index 905326fcca85..40c93da18252 100644
--- a/drivers/pnp/pnpacpi/Makefile
+++ b/drivers/pnp/pnpacpi/Makefile
@@ -1,5 +1,6 @@
1# 1#
2# Makefile for the kernel PNPACPI driver. 2# Makefile for the kernel PNPACPI driver.
3# 3#
4obj-y += pnp.o
4 5
5obj-y := core.o rsparser.o 6pnp-y := core.o rsparser.o
diff --git a/drivers/pnp/pnpacpi/core.c b/drivers/pnp/pnpacpi/core.c
index 2d73dfcecdbb..ca84d5099ce7 100644
--- a/drivers/pnp/pnpacpi/core.c
+++ b/drivers/pnp/pnpacpi/core.c
@@ -81,12 +81,19 @@ static int pnpacpi_get_resources(struct pnp_dev *dev)
81 81
82static int pnpacpi_set_resources(struct pnp_dev *dev) 82static int pnpacpi_set_resources(struct pnp_dev *dev)
83{ 83{
84 struct acpi_device *acpi_dev = dev->data; 84 struct acpi_device *acpi_dev;
85 acpi_handle handle = acpi_dev->handle; 85 acpi_handle handle;
86 struct acpi_buffer buffer; 86 struct acpi_buffer buffer;
87 int ret; 87 int ret;
88 88
89 pnp_dbg(&dev->dev, "set resources\n"); 89 pnp_dbg(&dev->dev, "set resources\n");
90
91 handle = DEVICE_ACPI_HANDLE(&dev->dev);
92 if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &acpi_dev))) {
93 dev_dbg(&dev->dev, "ACPI device not found in %s!\n", __func__);
94 return -ENODEV;
95 }
96
90 ret = pnpacpi_build_resource_template(dev, &buffer); 97 ret = pnpacpi_build_resource_template(dev, &buffer);
91 if (ret) 98 if (ret)
92 return ret; 99 return ret;
@@ -105,12 +112,18 @@ static int pnpacpi_set_resources(struct pnp_dev *dev)
105 112
106static int pnpacpi_disable_resources(struct pnp_dev *dev) 113static int pnpacpi_disable_resources(struct pnp_dev *dev)
107{ 114{
108 struct acpi_device *acpi_dev = dev->data; 115 struct acpi_device *acpi_dev;
109 acpi_handle handle = acpi_dev->handle; 116 acpi_handle handle;
110 int ret; 117 int ret;
111 118
112 dev_dbg(&dev->dev, "disable resources\n"); 119 dev_dbg(&dev->dev, "disable resources\n");
113 120
121 handle = DEVICE_ACPI_HANDLE(&dev->dev);
122 if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &acpi_dev))) {
123 dev_dbg(&dev->dev, "ACPI device not found in %s!\n", __func__);
124 return 0;
125 }
126
114 /* acpi_unregister_gsi(pnp_irq(dev, 0)); */ 127 /* acpi_unregister_gsi(pnp_irq(dev, 0)); */
115 ret = 0; 128 ret = 0;
116 if (acpi_bus_power_manageable(handle)) 129 if (acpi_bus_power_manageable(handle))
@@ -124,46 +137,74 @@ static int pnpacpi_disable_resources(struct pnp_dev *dev)
124#ifdef CONFIG_ACPI_SLEEP 137#ifdef CONFIG_ACPI_SLEEP
125static bool pnpacpi_can_wakeup(struct pnp_dev *dev) 138static bool pnpacpi_can_wakeup(struct pnp_dev *dev)
126{ 139{
127 struct acpi_device *acpi_dev = dev->data; 140 struct acpi_device *acpi_dev;
128 acpi_handle handle = acpi_dev->handle; 141 acpi_handle handle;
142
143 handle = DEVICE_ACPI_HANDLE(&dev->dev);
144 if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &acpi_dev))) {
145 dev_dbg(&dev->dev, "ACPI device not found in %s!\n", __func__);
146 return false;
147 }
129 148
130 return acpi_bus_can_wakeup(handle); 149 return acpi_bus_can_wakeup(handle);
131} 150}
132 151
133static int pnpacpi_suspend(struct pnp_dev *dev, pm_message_t state) 152static int pnpacpi_suspend(struct pnp_dev *dev, pm_message_t state)
134{ 153{
135 struct acpi_device *acpi_dev = dev->data; 154 struct acpi_device *acpi_dev;
136 acpi_handle handle = acpi_dev->handle; 155 acpi_handle handle;
137 int power_state; 156 int error = 0;
157
158 handle = DEVICE_ACPI_HANDLE(&dev->dev);
159 if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &acpi_dev))) {
160 dev_dbg(&dev->dev, "ACPI device not found in %s!\n", __func__);
161 return 0;
162 }
138 163
139 if (device_can_wakeup(&dev->dev)) { 164 if (device_can_wakeup(&dev->dev)) {
140 int rc = acpi_pm_device_sleep_wake(&dev->dev, 165 error = acpi_pm_device_sleep_wake(&dev->dev,
141 device_may_wakeup(&dev->dev)); 166 device_may_wakeup(&dev->dev));
167 if (error)
168 return error;
169 }
170
171 if (acpi_bus_power_manageable(handle)) {
172 int power_state = acpi_pm_device_sleep_state(&dev->dev, NULL);
173
174 if (power_state < 0)
175 power_state = (state.event == PM_EVENT_ON) ?
176 ACPI_STATE_D0 : ACPI_STATE_D3;
142 177
143 if (rc) 178 /*
144 return rc; 179 * acpi_bus_set_power() often fails (keyboard port can't be
180 * powered-down?), and in any case, our return value is ignored
181 * by pnp_bus_suspend(). Hence we don't revert the wakeup
182 * setting if the set_power fails.
183 */
184 error = acpi_bus_set_power(handle, power_state);
145 } 185 }
146 power_state = acpi_pm_device_sleep_state(&dev->dev, NULL); 186
147 if (power_state < 0) 187 return error;
148 power_state = (state.event == PM_EVENT_ON) ?
149 ACPI_STATE_D0 : ACPI_STATE_D3;
150
151 /* acpi_bus_set_power() often fails (keyboard port can't be
152 * powered-down?), and in any case, our return value is ignored
153 * by pnp_bus_suspend(). Hence we don't revert the wakeup
154 * setting if the set_power fails.
155 */
156 return acpi_bus_set_power(handle, power_state);
157} 188}
158 189
159static int pnpacpi_resume(struct pnp_dev *dev) 190static int pnpacpi_resume(struct pnp_dev *dev)
160{ 191{
161 struct acpi_device *acpi_dev = dev->data; 192 struct acpi_device *acpi_dev;
162 acpi_handle handle = acpi_dev->handle; 193 acpi_handle handle = DEVICE_ACPI_HANDLE(&dev->dev);
194 int error = 0;
195
196 if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &acpi_dev))) {
197 dev_dbg(&dev->dev, "ACPI device not found in %s!\n", __func__);
198 return -ENODEV;
199 }
163 200
164 if (device_may_wakeup(&dev->dev)) 201 if (device_may_wakeup(&dev->dev))
165 acpi_pm_device_sleep_wake(&dev->dev, false); 202 acpi_pm_device_sleep_wake(&dev->dev, false);
166 return acpi_bus_set_power(handle, ACPI_STATE_D0); 203
204 if (acpi_bus_power_manageable(handle))
205 error = acpi_bus_set_power(handle, ACPI_STATE_D0);
206
207 return error;
167} 208}
168#endif 209#endif
169 210
@@ -180,7 +221,7 @@ struct pnp_protocol pnpacpi_protocol = {
180}; 221};
181EXPORT_SYMBOL(pnpacpi_protocol); 222EXPORT_SYMBOL(pnpacpi_protocol);
182 223
183static char *pnpacpi_get_id(struct acpi_device *device) 224static char *__init pnpacpi_get_id(struct acpi_device *device)
184{ 225{
185 struct acpi_hardware_id *id; 226 struct acpi_hardware_id *id;
186 227
diff --git a/drivers/pnp/pnpbios/Makefile b/drivers/pnp/pnpbios/Makefile
index 3cd3ed760605..240b0ffb83ca 100644
--- a/drivers/pnp/pnpbios/Makefile
+++ b/drivers/pnp/pnpbios/Makefile
@@ -1,7 +1,8 @@
1# 1#
2# Makefile for the kernel PNPBIOS driver. 2# Makefile for the kernel PNPBIOS driver.
3# 3#
4obj-y := pnp.o
4 5
5pnpbios-proc-$(CONFIG_PNPBIOS_PROC_FS) = proc.o 6pnp-y := core.o bioscalls.o rsparser.o
6 7
7obj-y := core.o bioscalls.o rsparser.o $(pnpbios-proc-y) 8pnp-$(CONFIG_PNPBIOS_PROC_FS) += proc.o
diff --git a/drivers/pnp/pnpbios/bioscalls.c b/drivers/pnp/pnpbios/bioscalls.c
index 8591f6ab1b35..b859d16cf78c 100644
--- a/drivers/pnp/pnpbios/bioscalls.c
+++ b/drivers/pnp/pnpbios/bioscalls.c
@@ -219,7 +219,7 @@ void pnpbios_print_status(const char *module, u16 status)
219 module); 219 module);
220 break; 220 break;
221 case PNP_HARDWARE_ERROR: 221 case PNP_HARDWARE_ERROR:
222 printk(KERN_ERR "PnPBIOS: %s: a hardware failure has occured\n", 222 printk(KERN_ERR "PnPBIOS: %s: a hardware failure has occurred\n",
223 module); 223 module);
224 break; 224 break;
225 default: 225 default:
diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c
index a925e6b63d72..b0ecacbe53b1 100644
--- a/drivers/pnp/resource.c
+++ b/drivers/pnp/resource.c
@@ -409,9 +409,9 @@ int pnp_check_irq(struct pnp_dev *dev, struct resource *res)
409 return 1; 409 return 1;
410} 410}
411 411
412#ifdef CONFIG_ISA_DMA_API
412int pnp_check_dma(struct pnp_dev *dev, struct resource *res) 413int pnp_check_dma(struct pnp_dev *dev, struct resource *res)
413{ 414{
414#ifndef CONFIG_IA64
415 int i; 415 int i;
416 struct pnp_dev *tdev; 416 struct pnp_dev *tdev;
417 struct resource *tres; 417 struct resource *tres;
@@ -466,11 +466,8 @@ int pnp_check_dma(struct pnp_dev *dev, struct resource *res)
466 } 466 }
467 467
468 return 1; 468 return 1;
469#else
470 /* IA64 does not have legacy DMA */
471 return 0;
472#endif
473} 469}
470#endif /* CONFIG_ISA_DMA_API */
474 471
475unsigned long pnp_resource_type(struct resource *res) 472unsigned long pnp_resource_type(struct resource *res)
476{ 473{