diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-17 00:15:42 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-17 00:15:42 -0400 |
commit | 0dd5198672dd2bbeb933862e1fc82162e0b636be (patch) | |
tree | c9efed20d90603c4d1626c21bd7aab1e7fc74a58 /arch/arm | |
parent | c868d550115b9ccc0027c67265b9520790f05601 (diff) | |
parent | 11c635a25b9f3a5d87409ce46cf2e05c500251ec (diff) |
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (425 commits)
V4L/DVB (11870): gspca - main: VIDIOC_ENUM_FRAMESIZES ioctl added.
V4L/DVB (12004): poll method lose race condition
V4L/DVB (11894): flexcop-pci: dmesg visible names broken
V4L/DVB (11892): Siano: smsendian - declare function as extern
V4L/DVB (11891): Siano: smscore - bind the GPIO SMS protocol
V4L/DVB (11890): Siano: smscore - remove redundant code
V4L/DVB (11889): Siano: smsdvb - add DVB v3 events
V4L/DVB (11888): Siano: smsusb - remove redundant ifdef
V4L/DVB (11887): Siano: smscards - add board (target) events
V4L/DVB (11886): Siano: smscore - fix some new GPIO definitions names
V4L/DVB (11885): Siano: Add new GPIO management interface
V4L/DVB (11884): Siano: smssdio - revert to stand alone module
V4L/DVB (11883): Siano: cards - add two additional (USB) devices
V4L/DVB (11824): Siano: smsusb - change exit func debug msg
V4L/DVB (11823): Siano: smsusb - fix typo in module description
V4L/DVB (11822): Siano: smscore - bug fix at get_device_mode
V4L/DVB (11821): Siano: smscore - fix isdb-t firmware name
V4L/DVB (11820): Siano: smscore - fix byte ordering bug
V4L/DVB (11819): Siano: smscore - fix get_common_buffer bug
V4L/DVB (11818): Siano: smscards - assign gpio to HPG targets
...
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-pxa/pcm990-baseboard.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/arch/arm/mach-pxa/pcm990-baseboard.c b/arch/arm/mach-pxa/pcm990-baseboard.c index 095521e9ee24..01791d74e08e 100644 --- a/arch/arm/mach-pxa/pcm990-baseboard.c +++ b/arch/arm/mach-pxa/pcm990-baseboard.c | |||
@@ -380,12 +380,12 @@ static struct pca953x_platform_data pca9536_data = { | |||
380 | .gpio_base = NR_BUILTIN_GPIO, | 380 | .gpio_base = NR_BUILTIN_GPIO, |
381 | }; | 381 | }; |
382 | 382 | ||
383 | static int gpio_bus_switch; | 383 | static int gpio_bus_switch = -EINVAL; |
384 | 384 | ||
385 | static int pcm990_camera_set_bus_param(struct soc_camera_link *link, | 385 | static int pcm990_camera_set_bus_param(struct soc_camera_link *link, |
386 | unsigned long flags) | 386 | unsigned long flags) |
387 | { | 387 | { |
388 | if (gpio_bus_switch <= 0) { | 388 | if (gpio_bus_switch < 0) { |
389 | if (flags == SOCAM_DATAWIDTH_10) | 389 | if (flags == SOCAM_DATAWIDTH_10) |
390 | return 0; | 390 | return 0; |
391 | else | 391 | else |
@@ -404,25 +404,34 @@ static unsigned long pcm990_camera_query_bus_param(struct soc_camera_link *link) | |||
404 | { | 404 | { |
405 | int ret; | 405 | int ret; |
406 | 406 | ||
407 | if (!gpio_bus_switch) { | 407 | if (gpio_bus_switch < 0) { |
408 | ret = gpio_request(NR_BUILTIN_GPIO, "camera"); | 408 | ret = gpio_request(NR_BUILTIN_GPIO, "camera"); |
409 | if (!ret) { | 409 | if (!ret) { |
410 | gpio_bus_switch = NR_BUILTIN_GPIO; | 410 | gpio_bus_switch = NR_BUILTIN_GPIO; |
411 | gpio_direction_output(gpio_bus_switch, 0); | 411 | gpio_direction_output(gpio_bus_switch, 0); |
412 | } else | 412 | } |
413 | gpio_bus_switch = -EINVAL; | ||
414 | } | 413 | } |
415 | 414 | ||
416 | if (gpio_bus_switch > 0) | 415 | if (gpio_bus_switch >= 0) |
417 | return SOCAM_DATAWIDTH_8 | SOCAM_DATAWIDTH_10; | 416 | return SOCAM_DATAWIDTH_8 | SOCAM_DATAWIDTH_10; |
418 | else | 417 | else |
419 | return SOCAM_DATAWIDTH_10; | 418 | return SOCAM_DATAWIDTH_10; |
420 | } | 419 | } |
421 | 420 | ||
421 | static void pcm990_camera_free_bus(struct soc_camera_link *link) | ||
422 | { | ||
423 | if (gpio_bus_switch < 0) | ||
424 | return; | ||
425 | |||
426 | gpio_free(gpio_bus_switch); | ||
427 | gpio_bus_switch = -EINVAL; | ||
428 | } | ||
429 | |||
422 | static struct soc_camera_link iclink = { | 430 | static struct soc_camera_link iclink = { |
423 | .bus_id = 0, /* Must match with the camera ID above */ | 431 | .bus_id = 0, /* Must match with the camera ID above */ |
424 | .query_bus_param = pcm990_camera_query_bus_param, | 432 | .query_bus_param = pcm990_camera_query_bus_param, |
425 | .set_bus_param = pcm990_camera_set_bus_param, | 433 | .set_bus_param = pcm990_camera_set_bus_param, |
434 | .free_bus = pcm990_camera_free_bus, | ||
426 | }; | 435 | }; |
427 | 436 | ||
428 | /* Board I2C devices. */ | 437 | /* Board I2C devices. */ |