aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pnp/interface.c
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
committerJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
commit8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch)
treea8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /drivers/pnp/interface.c
parent406089d01562f1e2bf9f089fd7637009ebaad589 (diff)
Patched in Tegra support.
Diffstat (limited to 'drivers/pnp/interface.c')
-rw-r--r--drivers/pnp/interface.c105
1 files changed, 37 insertions, 68 deletions
diff --git a/drivers/pnp/interface.c b/drivers/pnp/interface.c
index 0c201317284..cfaf5b73540 100644
--- a/drivers/pnp/interface.c
+++ b/drivers/pnp/interface.c
@@ -298,39 +298,6 @@ static ssize_t pnp_show_current_resources(struct device *dmdev,
298 return ret; 298 return ret;
299} 299}
300 300
301static char *pnp_get_resource_value(char *buf,
302 unsigned long type,
303 resource_size_t *start,
304 resource_size_t *end,
305 unsigned long *flags)
306{
307 if (start)
308 *start = 0;
309 if (end)
310 *end = 0;
311 if (flags)
312 *flags = 0;
313
314 /* TBD: allow for disabled resources */
315
316 buf = skip_spaces(buf);
317 if (start) {
318 *start = simple_strtoull(buf, &buf, 0);
319 if (end) {
320 buf = skip_spaces(buf);
321 if (*buf == '-') {
322 buf = skip_spaces(buf + 1);
323 *end = simple_strtoull(buf, &buf, 0);
324 } else
325 *end = *start;
326 }
327 }
328
329 /* TBD: allow for additional flags, e.g., IORESOURCE_WINDOW */
330
331 return buf;
332}
333
334static ssize_t pnp_set_current_resources(struct device *dmdev, 301static ssize_t pnp_set_current_resources(struct device *dmdev,
335 struct device_attribute *attr, 302 struct device_attribute *attr,
336 const char *ubuf, size_t count) 303 const char *ubuf, size_t count)
@@ -338,6 +305,7 @@ static ssize_t pnp_set_current_resources(struct device *dmdev,
338 struct pnp_dev *dev = to_pnp_dev(dmdev); 305 struct pnp_dev *dev = to_pnp_dev(dmdev);
339 char *buf = (void *)ubuf; 306 char *buf = (void *)ubuf;
340 int retval = 0; 307 int retval = 0;
308 resource_size_t start, end;
341 309
342 if (dev->status & PNP_ATTACHED) { 310 if (dev->status & PNP_ATTACHED) {
343 retval = -EBUSY; 311 retval = -EBUSY;
@@ -381,10 +349,6 @@ static ssize_t pnp_set_current_resources(struct device *dmdev,
381 goto done; 349 goto done;
382 } 350 }
383 if (!strnicmp(buf, "set", 3)) { 351 if (!strnicmp(buf, "set", 3)) {
384 resource_size_t start;
385 resource_size_t end;
386 unsigned long flags;
387
388 if (dev->active) 352 if (dev->active)
389 goto done; 353 goto done;
390 buf += 3; 354 buf += 3;
@@ -393,37 +357,42 @@ static ssize_t pnp_set_current_resources(struct device *dmdev,
393 while (1) { 357 while (1) {
394 buf = skip_spaces(buf); 358 buf = skip_spaces(buf);
395 if (!strnicmp(buf, "io", 2)) { 359 if (!strnicmp(buf, "io", 2)) {
396 buf = pnp_get_resource_value(buf + 2, 360 buf = skip_spaces(buf + 2);
397 IORESOURCE_IO, 361 start = simple_strtoul(buf, &buf, 0);
398 &start, &end, 362 buf = skip_spaces(buf);
399 &flags); 363 if (*buf == '-') {
400 pnp_add_io_resource(dev, start, end, flags); 364 buf = skip_spaces(buf + 1);
401 } else if (!strnicmp(buf, "mem", 3)) { 365 end = simple_strtoul(buf, &buf, 0);
402 buf = pnp_get_resource_value(buf + 3, 366 } else
403 IORESOURCE_MEM, 367 end = start;
404 &start, &end, 368 pnp_add_io_resource(dev, start, end, 0);
405 &flags); 369 continue;
406 pnp_add_mem_resource(dev, start, end, flags); 370 }
407 } else if (!strnicmp(buf, "irq", 3)) { 371 if (!strnicmp(buf, "mem", 3)) {
408 buf = pnp_get_resource_value(buf + 3, 372 buf = skip_spaces(buf + 3);
409 IORESOURCE_IRQ, 373 start = simple_strtoul(buf, &buf, 0);
410 &start, NULL, 374 buf = skip_spaces(buf);
411 &flags); 375 if (*buf == '-') {
412 pnp_add_irq_resource(dev, start, flags); 376 buf = skip_spaces(buf + 1);
413 } else if (!strnicmp(buf, "dma", 3)) { 377 end = simple_strtoul(buf, &buf, 0);
414 buf = pnp_get_resource_value(buf + 3, 378 } else
415 IORESOURCE_DMA, 379 end = start;
416 &start, NULL, 380 pnp_add_mem_resource(dev, start, end, 0);
417 &flags); 381 continue;
418 pnp_add_dma_resource(dev, start, flags); 382 }
419 } else if (!strnicmp(buf, "bus", 3)) { 383 if (!strnicmp(buf, "irq", 3)) {
420 buf = pnp_get_resource_value(buf + 3, 384 buf = skip_spaces(buf + 3);
421 IORESOURCE_BUS, 385 start = simple_strtoul(buf, &buf, 0);
422 &start, &end, 386 pnp_add_irq_resource(dev, start, 0);
423 NULL); 387 continue;
424 pnp_add_bus_resource(dev, start, end); 388 }
425 } else 389 if (!strnicmp(buf, "dma", 3)) {
426 break; 390 buf = skip_spaces(buf + 3);
391 start = simple_strtoul(buf, &buf, 0);
392 pnp_add_dma_resource(dev, start, 0);
393 continue;
394 }
395 break;
427 } 396 }
428 mutex_unlock(&pnp_res_mutex); 397 mutex_unlock(&pnp_res_mutex);
429 goto done; 398 goto done;