i2c-davinci.c (dca3a783400a18e2bf4503b1d4a85c4d0ca1a7e4) | i2c-davinci.c (c4df5000413a667fb8c67dd5589d964cc5730d91) |
---|---|
1/* 2 * TI DAVINCI I2C adapter driver. 3 * 4 * Copyright (C) 2006 Texas Instruments. 5 * Copyright (C) 2007 MontaVista Software Inc. 6 * 7 * Updated by Vinod & Sudhakar Feb 2005 8 * --- 123 unchanged lines hidden (view full) --- 132} 133 134static inline u16 davinci_i2c_read_reg(struct davinci_i2c_dev *i2c_dev, int reg) 135{ 136 return __raw_readw(i2c_dev->base + reg); 137} 138 139/* Generate a pulse on the i2c clock pin. */ | 1/* 2 * TI DAVINCI I2C adapter driver. 3 * 4 * Copyright (C) 2006 Texas Instruments. 5 * Copyright (C) 2007 MontaVista Software Inc. 6 * 7 * Updated by Vinod & Sudhakar Feb 2005 8 * --- 123 unchanged lines hidden (view full) --- 132} 133 134static inline u16 davinci_i2c_read_reg(struct davinci_i2c_dev *i2c_dev, int reg) 135{ 136 return __raw_readw(i2c_dev->base + reg); 137} 138 139/* Generate a pulse on the i2c clock pin. */ |
140static void generic_i2c_clock_pulse(unsigned int scl_pin) | 140static void davinci_i2c_clock_pulse(unsigned int scl_pin) |
141{ 142 u16 i; 143 144 if (scl_pin) { 145 /* Send high and low on the SCL line */ 146 for (i = 0; i < 9; i++) { 147 gpio_set_value(scl_pin, 0); 148 udelay(20); 149 gpio_set_value(scl_pin, 1); 150 udelay(20); 151 } 152 } 153} 154 155/* This routine does i2c bus recovery as specified in the 156 * i2c protocol Rev. 03 section 3.16 titled "Bus clear" 157 */ | 141{ 142 u16 i; 143 144 if (scl_pin) { 145 /* Send high and low on the SCL line */ 146 for (i = 0; i < 9; i++) { 147 gpio_set_value(scl_pin, 0); 148 udelay(20); 149 gpio_set_value(scl_pin, 1); 150 udelay(20); 151 } 152 } 153} 154 155/* This routine does i2c bus recovery as specified in the 156 * i2c protocol Rev. 03 section 3.16 titled "Bus clear" 157 */ |
158static void i2c_recover_bus(struct davinci_i2c_dev *dev) | 158static void davinci_i2c_recover_bus(struct davinci_i2c_dev *dev) |
159{ 160 u32 flag = 0; 161 struct davinci_i2c_platform_data *pdata = dev->pdata; 162 163 dev_err(dev->dev, "initiating i2c bus recovery\n"); 164 /* Send NACK to the slave */ 165 flag = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); 166 flag |= DAVINCI_I2C_MDR_NACK; 167 /* write the data into mode register */ 168 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); | 159{ 160 u32 flag = 0; 161 struct davinci_i2c_platform_data *pdata = dev->pdata; 162 163 dev_err(dev->dev, "initiating i2c bus recovery\n"); 164 /* Send NACK to the slave */ 165 flag = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); 166 flag |= DAVINCI_I2C_MDR_NACK; 167 /* write the data into mode register */ 168 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); |
169 generic_i2c_clock_pulse(pdata->scl_pin); | 169 davinci_i2c_clock_pulse(pdata->scl_pin); |
170 /* Send STOP */ 171 flag = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); 172 flag |= DAVINCI_I2C_MDR_STP; 173 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); 174} 175 176static inline void davinci_i2c_reset_ctrl(struct davinci_i2c_dev *i2c_dev, 177 int val) --- 106 unchanged lines hidden (view full) --- 284 if (to_cnt <= DAVINCI_I2C_MAX_TRIES) { 285 if (time_after(jiffies, timeout)) { 286 dev_warn(dev->dev, 287 "timeout waiting for bus ready\n"); 288 to_cnt++; 289 return -ETIMEDOUT; 290 } else { 291 to_cnt = 0; | 170 /* Send STOP */ 171 flag = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); 172 flag |= DAVINCI_I2C_MDR_STP; 173 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); 174} 175 176static inline void davinci_i2c_reset_ctrl(struct davinci_i2c_dev *i2c_dev, 177 int val) --- 106 unchanged lines hidden (view full) --- 284 if (to_cnt <= DAVINCI_I2C_MAX_TRIES) { 285 if (time_after(jiffies, timeout)) { 286 dev_warn(dev->dev, 287 "timeout waiting for bus ready\n"); 288 to_cnt++; 289 return -ETIMEDOUT; 290 } else { 291 to_cnt = 0; |
292 i2c_recover_bus(dev); | 292 davinci_i2c_recover_bus(dev); |
293 i2c_davinci_init(dev); 294 } 295 } 296 if (allow_sleep) 297 schedule_timeout(1); 298 } 299 300 return 0; --- 73 unchanged lines hidden (view full) --- 374 if (stop && msg->len != 0) 375 flag |= DAVINCI_I2C_MDR_STP; 376 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); 377 378 r = wait_for_completion_interruptible_timeout(&dev->cmd_complete, 379 dev->adapter.timeout); 380 if (r == 0) { 381 dev_err(dev->dev, "controller timed out\n"); | 293 i2c_davinci_init(dev); 294 } 295 } 296 if (allow_sleep) 297 schedule_timeout(1); 298 } 299 300 return 0; --- 73 unchanged lines hidden (view full) --- 374 if (stop && msg->len != 0) 375 flag |= DAVINCI_I2C_MDR_STP; 376 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); 377 378 r = wait_for_completion_interruptible_timeout(&dev->cmd_complete, 379 dev->adapter.timeout); 380 if (r == 0) { 381 dev_err(dev->dev, "controller timed out\n"); |
382 i2c_recover_bus(dev); | 382 davinci_i2c_recover_bus(dev); |
383 i2c_davinci_init(dev); 384 dev->buf_len = 0; 385 return -ETIMEDOUT; 386 } 387 if (dev->buf_len) { 388 /* This should be 0 if all bytes were transferred 389 * or dev->cmd_err denotes an error. 390 * A signal may have aborted the transfer. --- 247 unchanged lines hidden (view full) --- 638 {}, 639}; 640MODULE_DEVICE_TABLE(of, davinci_i2c_of_match); 641 642static int davinci_i2c_probe(struct platform_device *pdev) 643{ 644 struct davinci_i2c_dev *dev; 645 struct i2c_adapter *adap; | 383 i2c_davinci_init(dev); 384 dev->buf_len = 0; 385 return -ETIMEDOUT; 386 } 387 if (dev->buf_len) { 388 /* This should be 0 if all bytes were transferred 389 * or dev->cmd_err denotes an error. 390 * A signal may have aborted the transfer. --- 247 unchanged lines hidden (view full) --- 638 {}, 639}; 640MODULE_DEVICE_TABLE(of, davinci_i2c_of_match); 641 642static int davinci_i2c_probe(struct platform_device *pdev) 643{ 644 struct davinci_i2c_dev *dev; 645 struct i2c_adapter *adap; |
646 struct resource *mem, *irq, *ioarea; | 646 struct resource *mem, *irq; |
647 int r; 648 649 /* NOTE: driver uses the static register mapping */ 650 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 651 if (!mem) { 652 dev_err(&pdev->dev, "no mem resource?\n"); 653 return -ENODEV; 654 } 655 656 irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 657 if (!irq) { 658 dev_err(&pdev->dev, "no irq resource?\n"); 659 return -ENODEV; 660 } 661 | 647 int r; 648 649 /* NOTE: driver uses the static register mapping */ 650 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 651 if (!mem) { 652 dev_err(&pdev->dev, "no mem resource?\n"); 653 return -ENODEV; 654 } 655 656 irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 657 if (!irq) { 658 dev_err(&pdev->dev, "no irq resource?\n"); 659 return -ENODEV; 660 } 661 |
662 ioarea = request_mem_region(mem->start, resource_size(mem), 663 pdev->name); 664 if (!ioarea) { 665 dev_err(&pdev->dev, "I2C region already claimed\n"); 666 return -EBUSY; 667 } 668 669 dev = kzalloc(sizeof(struct davinci_i2c_dev), GFP_KERNEL); | 662 dev = devm_kzalloc(&pdev->dev, sizeof(struct davinci_i2c_dev), 663 GFP_KERNEL); |
670 if (!dev) { | 664 if (!dev) { |
671 r = -ENOMEM; 672 goto err_release_region; | 665 dev_err(&pdev->dev, "Memory allocation failed\n"); 666 return -ENOMEM; |
673 } 674 675 init_completion(&dev->cmd_complete); 676#ifdef CONFIG_CPU_FREQ 677 init_completion(&dev->xfr_complete); 678#endif | 667 } 668 669 init_completion(&dev->cmd_complete); 670#ifdef CONFIG_CPU_FREQ 671 init_completion(&dev->xfr_complete); 672#endif |
679 dev->dev = get_device(&pdev->dev); | 673 dev->dev = &pdev->dev; |
680 dev->irq = irq->start; 681 dev->pdata = dev->dev->platform_data; 682 platform_set_drvdata(pdev, dev); 683 684 if (!dev->pdata && pdev->dev.of_node) { 685 u32 prop; 686 687 dev->pdata = devm_kzalloc(&pdev->dev, 688 sizeof(struct davinci_i2c_platform_data), GFP_KERNEL); | 674 dev->irq = irq->start; 675 dev->pdata = dev->dev->platform_data; 676 platform_set_drvdata(pdev, dev); 677 678 if (!dev->pdata && pdev->dev.of_node) { 679 u32 prop; 680 681 dev->pdata = devm_kzalloc(&pdev->dev, 682 sizeof(struct davinci_i2c_platform_data), GFP_KERNEL); |
689 if (!dev->pdata) { 690 r = -ENOMEM; 691 goto err_free_mem; 692 } | 683 if (!dev->pdata) 684 return -ENOMEM; 685 |
693 memcpy(dev->pdata, &davinci_i2c_platform_data_default, 694 sizeof(struct davinci_i2c_platform_data)); 695 if (!of_property_read_u32(pdev->dev.of_node, "clock-frequency", 696 &prop)) 697 dev->pdata->bus_freq = prop / 1000; 698 } else if (!dev->pdata) { 699 dev->pdata = &davinci_i2c_platform_data_default; 700 } 701 | 686 memcpy(dev->pdata, &davinci_i2c_platform_data_default, 687 sizeof(struct davinci_i2c_platform_data)); 688 if (!of_property_read_u32(pdev->dev.of_node, "clock-frequency", 689 &prop)) 690 dev->pdata->bus_freq = prop / 1000; 691 } else if (!dev->pdata) { 692 dev->pdata = &davinci_i2c_platform_data_default; 693 } 694 |
702 dev->clk = clk_get(&pdev->dev, NULL); 703 if (IS_ERR(dev->clk)) { 704 r = -ENODEV; 705 goto err_free_mem; 706 } | 695 dev->clk = devm_clk_get(&pdev->dev, NULL); 696 if (IS_ERR(dev->clk)) 697 return -ENODEV; |
707 clk_prepare_enable(dev->clk); 708 | 698 clk_prepare_enable(dev->clk); 699 |
709 dev->base = ioremap(mem->start, resource_size(mem)); 710 if (!dev->base) { 711 r = -EBUSY; 712 goto err_mem_ioremap; | 700 dev->base = devm_ioremap_resource(&pdev->dev, mem); 701 if (IS_ERR(dev->base)) { 702 r = PTR_ERR(dev->base); 703 goto err_unuse_clocks; |
713 } 714 715 i2c_davinci_init(dev); 716 | 704 } 705 706 i2c_davinci_init(dev); 707 |
717 r = request_irq(dev->irq, i2c_davinci_isr, 0, pdev->name, dev); | 708 r = devm_request_irq(&pdev->dev, dev->irq, i2c_davinci_isr, 0, 709 pdev->name, dev); |
718 if (r) { 719 dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq); 720 goto err_unuse_clocks; 721 } 722 723 r = i2c_davinci_cpufreq_register(dev); 724 if (r) { 725 dev_err(&pdev->dev, "failed to register cpufreq\n"); | 710 if (r) { 711 dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq); 712 goto err_unuse_clocks; 713 } 714 715 r = i2c_davinci_cpufreq_register(dev); 716 if (r) { 717 dev_err(&pdev->dev, "failed to register cpufreq\n"); |
726 goto err_free_irq; | 718 goto err_unuse_clocks; |
727 } 728 729 adap = &dev->adapter; 730 i2c_set_adapdata(adap, dev); 731 adap->owner = THIS_MODULE; 732 adap->class = I2C_CLASS_HWMON; 733 strlcpy(adap->name, "DaVinci I2C adapter", sizeof(adap->name)); 734 adap->algo = &i2c_davinci_algo; 735 adap->dev.parent = &pdev->dev; 736 adap->timeout = DAVINCI_I2C_TIMEOUT; 737 adap->dev.of_node = pdev->dev.of_node; 738 739 adap->nr = pdev->id; 740 r = i2c_add_numbered_adapter(adap); 741 if (r) { 742 dev_err(&pdev->dev, "failure adding adapter\n"); | 719 } 720 721 adap = &dev->adapter; 722 i2c_set_adapdata(adap, dev); 723 adap->owner = THIS_MODULE; 724 adap->class = I2C_CLASS_HWMON; 725 strlcpy(adap->name, "DaVinci I2C adapter", sizeof(adap->name)); 726 adap->algo = &i2c_davinci_algo; 727 adap->dev.parent = &pdev->dev; 728 adap->timeout = DAVINCI_I2C_TIMEOUT; 729 adap->dev.of_node = pdev->dev.of_node; 730 731 adap->nr = pdev->id; 732 r = i2c_add_numbered_adapter(adap); 733 if (r) { 734 dev_err(&pdev->dev, "failure adding adapter\n"); |
743 goto err_free_irq; | 735 goto err_unuse_clocks; |
744 } 745 of_i2c_register_devices(adap); 746 747 return 0; 748 | 736 } 737 of_i2c_register_devices(adap); 738 739 return 0; 740 |
749err_free_irq: 750 free_irq(dev->irq, dev); | |
751err_unuse_clocks: | 741err_unuse_clocks: |
752 iounmap(dev->base); 753err_mem_ioremap: | |
754 clk_disable_unprepare(dev->clk); | 742 clk_disable_unprepare(dev->clk); |
755 clk_put(dev->clk); | |
756 dev->clk = NULL; | 743 dev->clk = NULL; |
757err_free_mem: 758 put_device(&pdev->dev); 759 kfree(dev); 760err_release_region: 761 release_mem_region(mem->start, resource_size(mem)); 762 | |
763 return r; 764} 765 766static int davinci_i2c_remove(struct platform_device *pdev) 767{ 768 struct davinci_i2c_dev *dev = platform_get_drvdata(pdev); | 744 return r; 745} 746 747static int davinci_i2c_remove(struct platform_device *pdev) 748{ 749 struct davinci_i2c_dev *dev = platform_get_drvdata(pdev); |
769 struct resource *mem; | |
770 771 i2c_davinci_cpufreq_deregister(dev); 772 773 i2c_del_adapter(&dev->adapter); | 750 751 i2c_davinci_cpufreq_deregister(dev); 752 753 i2c_del_adapter(&dev->adapter); |
774 put_device(&pdev->dev); | |
775 776 clk_disable_unprepare(dev->clk); | 754 755 clk_disable_unprepare(dev->clk); |
777 clk_put(dev->clk); | |
778 dev->clk = NULL; 779 780 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, 0); | 756 dev->clk = NULL; 757 758 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, 0); |
781 free_irq(dev->irq, dev); 782 iounmap(dev->base); 783 kfree(dev); | |
784 | 759 |
785 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 786 release_mem_region(mem->start, resource_size(mem)); | |
787 return 0; 788} 789 790#ifdef CONFIG_PM 791static int davinci_i2c_suspend(struct device *dev) 792{ 793 struct platform_device *pdev = to_platform_device(dev); 794 struct davinci_i2c_dev *i2c_dev = platform_get_drvdata(pdev); --- 60 unchanged lines hidden --- | 760 return 0; 761} 762 763#ifdef CONFIG_PM 764static int davinci_i2c_suspend(struct device *dev) 765{ 766 struct platform_device *pdev = to_platform_device(dev); 767 struct davinci_i2c_dev *i2c_dev = platform_get_drvdata(pdev); --- 60 unchanged lines hidden --- |