diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
commit | 8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch) | |
tree | a8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /drivers/pnp/interface.c | |
parent | 406089d01562f1e2bf9f089fd7637009ebaad589 (diff) |
Patched in Tegra support.
Diffstat (limited to 'drivers/pnp/interface.c')
-rw-r--r-- | drivers/pnp/interface.c | 105 |
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 | ||
301 | static 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 | |||
334 | static ssize_t pnp_set_current_resources(struct device *dmdev, | 301 | static 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; |