aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/ucb1x00-core.c
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2012-01-20 12:38:58 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2012-01-20 12:38:58 -0500
commit65f2e753f1eb09d3a7e2a0d16408a5433b4097b2 (patch)
tree100066fa2d26930a490ee10bb191957f3b3e2df3 /drivers/mfd/ucb1x00-core.c
parent216f63c41cac9f9f8f181fc19be399293c8c934e (diff)
Revert "ARM: sa11x0: Implement autoloading of codec and codec pdata for mcp bus."
This reverts commit 5dd7bf59e0e8563265b3e5b33276099ef628fcc7. Conflicts: scripts/mod/file2alias.c This change is wrong on many levels. First and foremost, it causes a regression. On boot on Assabet, which this patch gives a codec id of 'ucb1x00', it gives: ucb1x00 ID not found: 1005 0x1005 is a valid ID for the UCB1300 device. Secondly, this patch is way over the top in terms of complexity. The only device which has been seen to be connected with this MCP code is the UCB1x00 (UCB1200, UCB1300 etc) devices, and they all use the same driver. Adding a match table, requiring the codec string to match the hardware ID read out of the ID register, etc is completely over the top when we can just read the hardware ID register.
Diffstat (limited to 'drivers/mfd/ucb1x00-core.c')
-rw-r--r--drivers/mfd/ucb1x00-core.c48
1 files changed, 11 insertions, 37 deletions
diff --git a/drivers/mfd/ucb1x00-core.c b/drivers/mfd/ucb1x00-core.c
index 91c4f25e0e55..b281217334eb 100644
--- a/drivers/mfd/ucb1x00-core.c
+++ b/drivers/mfd/ucb1x00-core.c
@@ -36,15 +36,6 @@ static DEFINE_MUTEX(ucb1x00_mutex);
36static LIST_HEAD(ucb1x00_drivers); 36static LIST_HEAD(ucb1x00_drivers);
37static LIST_HEAD(ucb1x00_devices); 37static LIST_HEAD(ucb1x00_devices);
38 38
39static struct mcp_device_id ucb1x00_id[] = {
40 { "ucb1x00", 0 }, /* auto-detection */
41 { "ucb1200", UCB_ID_1200 },
42 { "ucb1300", UCB_ID_1300 },
43 { "tc35143", UCB_ID_TC35143 },
44 { }
45};
46MODULE_DEVICE_TABLE(mcp, ucb1x00_id);
47
48/** 39/**
49 * ucb1x00_io_set_dir - set IO direction 40 * ucb1x00_io_set_dir - set IO direction
50 * @ucb: UCB1x00 structure describing chip 41 * @ucb: UCB1x00 structure describing chip
@@ -536,33 +527,17 @@ static struct class ucb1x00_class = {
536 527
537static int ucb1x00_probe(struct mcp *mcp) 528static int ucb1x00_probe(struct mcp *mcp)
538{ 529{
539 const struct mcp_device_id *mid;
540 struct ucb1x00 *ucb; 530 struct ucb1x00 *ucb;
541 struct ucb1x00_driver *drv; 531 struct ucb1x00_driver *drv;
542 struct ucb1x00_plat_data *pdata;
543 unsigned int id; 532 unsigned int id;
544 int ret = -ENODEV; 533 int ret = -ENODEV;
545 int temp; 534 int temp;
546 535
547 mcp_enable(mcp); 536 mcp_enable(mcp);
548 id = mcp_reg_read(mcp, UCB_ID); 537 id = mcp_reg_read(mcp, UCB_ID);
549 mid = mcp_get_device_id(mcp);
550 538
551 if (mid && mid->driver_data) { 539 if (id != UCB_ID_1200 && id != UCB_ID_1300 && id != UCB_ID_TC35143) {
552 if (id != mid->driver_data) { 540 printk(KERN_WARNING "UCB1x00 ID not found: %04x\n", id);
553 printk(KERN_WARNING "%s wrong ID %04x found: %04x\n",
554 mid->name, (unsigned int) mid->driver_data, id);
555 goto err_disable;
556 }
557 } else {
558 mid = &ucb1x00_id[1];
559 while (mid->driver_data) {
560 if (id == mid->driver_data)
561 break;
562 mid++;
563 }
564 printk(KERN_WARNING "%s ID not found: %04x\n",
565 ucb1x00_id[0].name, id);
566 goto err_disable; 541 goto err_disable;
567 } 542 }
568 543
@@ -571,28 +546,28 @@ static int ucb1x00_probe(struct mcp *mcp)
571 if (!ucb) 546 if (!ucb)
572 goto err_disable; 547 goto err_disable;
573 548
574 pdata = mcp->attached_device.platform_data; 549
575 ucb->dev.class = &ucb1x00_class; 550 ucb->dev.class = &ucb1x00_class;
576 ucb->dev.parent = &mcp->attached_device; 551 ucb->dev.parent = &mcp->attached_device;
577 dev_set_name(&ucb->dev, mid->name); 552 dev_set_name(&ucb->dev, "ucb1x00");
578 553
579 spin_lock_init(&ucb->lock); 554 spin_lock_init(&ucb->lock);
580 spin_lock_init(&ucb->io_lock); 555 spin_lock_init(&ucb->io_lock);
581 sema_init(&ucb->adc_sem, 1); 556 sema_init(&ucb->adc_sem, 1);
582 557
583 ucb->id = mid; 558 ucb->id = id;
584 ucb->mcp = mcp; 559 ucb->mcp = mcp;
585 ucb->irq = ucb1x00_detect_irq(ucb); 560 ucb->irq = ucb1x00_detect_irq(ucb);
586 if (ucb->irq == NO_IRQ) { 561 if (ucb->irq == NO_IRQ) {
587 printk(KERN_ERR "%s: IRQ probe failed\n", mid->name); 562 printk(KERN_ERR "UCB1x00: IRQ probe failed\n");
588 ret = -ENODEV; 563 ret = -ENODEV;
589 goto err_free; 564 goto err_free;
590 } 565 }
591 566
592 ucb->gpio.base = -1; 567 ucb->gpio.base = -1;
593 if (pdata && (pdata->gpio_base >= 0)) { 568 if (mcp->gpio_base != 0) {
594 ucb->gpio.label = dev_name(&ucb->dev); 569 ucb->gpio.label = dev_name(&ucb->dev);
595 ucb->gpio.base = pdata->gpio_base; 570 ucb->gpio.base = mcp->gpio_base;
596 ucb->gpio.ngpio = 10; 571 ucb->gpio.ngpio = 10;
597 ucb->gpio.set = ucb1x00_gpio_set; 572 ucb->gpio.set = ucb1x00_gpio_set;
598 ucb->gpio.get = ucb1x00_gpio_get; 573 ucb->gpio.get = ucb1x00_gpio_get;
@@ -605,10 +580,10 @@ static int ucb1x00_probe(struct mcp *mcp)
605 dev_info(&ucb->dev, "gpio_base not set so no gpiolib support"); 580 dev_info(&ucb->dev, "gpio_base not set so no gpiolib support");
606 581
607 ret = request_irq(ucb->irq, ucb1x00_irq, IRQF_TRIGGER_RISING, 582 ret = request_irq(ucb->irq, ucb1x00_irq, IRQF_TRIGGER_RISING,
608 mid->name, ucb); 583 "UCB1x00", ucb);
609 if (ret) { 584 if (ret) {
610 printk(KERN_ERR "%s: unable to grab irq%d: %d\n", 585 printk(KERN_ERR "ucb1x00: unable to grab irq%d: %d\n",
611 mid->name, ucb->irq, ret); 586 ucb->irq, ret);
612 goto err_gpio; 587 goto err_gpio;
613 } 588 }
614 589
@@ -730,7 +705,6 @@ static struct mcp_driver ucb1x00_driver = {
730 .remove = ucb1x00_remove, 705 .remove = ucb1x00_remove,
731 .suspend = ucb1x00_suspend, 706 .suspend = ucb1x00_suspend,
732 .resume = ucb1x00_resume, 707 .resume = ucb1x00_resume,
733 .id_table = ucb1x00_id,
734}; 708};
735 709
736static int __init ucb1x00_init(void) 710static int __init ucb1x00_init(void)