forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/usb/gadget/udc/s3c2410_udc.c
....@@ -36,15 +36,11 @@
3636 #include <asm/byteorder.h>
3737 #include <asm/irq.h>
3838 #include <asm/unaligned.h>
39
-#include <mach/irqs.h>
4039
41
-#include <mach/hardware.h>
42
-
43
-#include <plat/regs-udc.h>
4440 #include <linux/platform_data/usb-s3c2410_udc.h>
4541
46
-
4742 #include "s3c2410_udc.h"
43
+#include "s3c2410_udc_regs.h"
4844
4945 #define DRIVER_DESC "S3C2410 USB Device Controller Gadget"
5046 #define DRIVER_AUTHOR "Herbert Pƶtzl <herbert@13thfloor.at>, " \
....@@ -57,8 +53,7 @@
5753 static struct clk *udc_clock;
5854 static struct clk *usb_bus_clock;
5955 static void __iomem *base_addr;
60
-static u64 rsrc_start;
61
-static u64 rsrc_len;
56
+static int irq_usbd;
6257 static struct dentry *s3c2410_udc_debugfs_root;
6358
6459 static inline u32 udc_read(u32 reg)
....@@ -119,7 +114,7 @@
119114 }
120115 #endif
121116
122
-static int s3c2410_udc_debugfs_seq_show(struct seq_file *m, void *p)
117
+static int s3c2410_udc_debugfs_show(struct seq_file *m, void *p)
123118 {
124119 u32 addr_reg, pwr_reg, ep_int_reg, usb_int_reg;
125120 u32 ep_int_en_reg, usb_int_en_reg, ep0_csr;
....@@ -168,20 +163,7 @@
168163
169164 return 0;
170165 }
171
-
172
-static int s3c2410_udc_debugfs_fops_open(struct inode *inode,
173
- struct file *file)
174
-{
175
- return single_open(file, s3c2410_udc_debugfs_seq_show, NULL);
176
-}
177
-
178
-static const struct file_operations s3c2410_udc_debugfs_fops = {
179
- .open = s3c2410_udc_debugfs_fops_open,
180
- .read = seq_read,
181
- .llseek = seq_lseek,
182
- .release = single_release,
183
- .owner = THIS_MODULE,
184
-};
166
+DEFINE_SHOW_ATTRIBUTE(s3c2410_udc_debugfs);
185167
186168 /* io macros */
187169
....@@ -321,6 +303,7 @@
321303 switch (idx) {
322304 default:
323305 idx = 0;
306
+ fallthrough;
324307 case 0:
325308 fifo_reg = S3C2410_UDC_EP0_FIFO_REG;
326309 break;
....@@ -425,6 +408,7 @@
425408 switch (idx) {
426409 default:
427410 idx = 0;
411
+ fallthrough;
428412 case 0:
429413 fifo_reg = S3C2410_UDC_EP0_FIFO_REG;
430414 break;
....@@ -846,8 +830,6 @@
846830 }
847831 }
848832
849
-#include <mach/regs-irq.h>
850
-
851833 /*
852834 * s3c2410_udc_irq - interrupt handler
853835 */
....@@ -988,7 +970,7 @@
988970 }
989971 }
990972
991
- dprintk(DEBUG_VERBOSE, "irq: %d s3c2410_udc_done.\n", IRQ_USBD);
973
+ dprintk(DEBUG_VERBOSE, "irq: %d s3c2410_udc_done.\n", irq_usbd);
992974
993975 /* Restore old index */
994976 udc_write(idx, S3C2410_UDC_INDEX_REG);
....@@ -1281,7 +1263,6 @@
12811263 static int s3c2410_udc_dequeue(struct usb_ep *_ep, struct usb_request *_req)
12821264 {
12831265 struct s3c2410_ep *ep = to_s3c2410_ep(_ep);
1284
- struct s3c2410_udc *udc;
12851266 int retval = -EINVAL;
12861267 unsigned long flags;
12871268 struct s3c2410_request *req = NULL;
....@@ -1293,8 +1274,6 @@
12931274
12941275 if (!_ep || !_req)
12951276 return retval;
1296
-
1297
- udc = to_s3c2410_udc(ep->gadget);
12981277
12991278 local_irq_save(flags);
13001279
....@@ -1771,7 +1750,8 @@
17711750 udc_clock = clk_get(NULL, "usb-device");
17721751 if (IS_ERR(udc_clock)) {
17731752 dev_err(dev, "failed to get udc clock source\n");
1774
- return PTR_ERR(udc_clock);
1753
+ retval = PTR_ERR(udc_clock);
1754
+ goto err_usb_bus_clk;
17751755 }
17761756
17771757 clk_prepare_enable(udc_clock);
....@@ -1791,16 +1771,10 @@
17911771 spin_lock_init(&udc->lock);
17921772 udc_info = dev_get_platdata(&pdev->dev);
17931773
1794
- rsrc_start = S3C2410_PA_USBDEV;
1795
- rsrc_len = S3C24XX_SZ_USBDEV;
1796
-
1797
- if (!request_mem_region(rsrc_start, rsrc_len, gadget_name))
1798
- return -EBUSY;
1799
-
1800
- base_addr = ioremap(rsrc_start, rsrc_len);
1801
- if (!base_addr) {
1802
- retval = -ENOMEM;
1803
- goto err_mem;
1774
+ base_addr = devm_platform_ioremap_resource(pdev, 0);
1775
+ if (IS_ERR(base_addr)) {
1776
+ retval = PTR_ERR(base_addr);
1777
+ goto err_udc_clk;
18041778 }
18051779
18061780 the_controller = udc;
....@@ -1809,17 +1783,23 @@
18091783 s3c2410_udc_disable(udc);
18101784 s3c2410_udc_reinit(udc);
18111785
1786
+ irq_usbd = platform_get_irq(pdev, 0);
1787
+ if (irq_usbd < 0) {
1788
+ retval = irq_usbd;
1789
+ goto err_udc_clk;
1790
+ }
1791
+
18121792 /* irq setup after old hardware state is cleaned up */
1813
- retval = request_irq(IRQ_USBD, s3c2410_udc_irq,
1793
+ retval = request_irq(irq_usbd, s3c2410_udc_irq,
18141794 0, gadget_name, udc);
18151795
18161796 if (retval != 0) {
1817
- dev_err(dev, "cannot get irq %i, err %d\n", IRQ_USBD, retval);
1797
+ dev_err(dev, "cannot get irq %i, err %d\n", irq_usbd, retval);
18181798 retval = -EBUSY;
1819
- goto err_map;
1799
+ goto err_udc_clk;
18201800 }
18211801
1822
- dev_dbg(dev, "got irq %i\n", IRQ_USBD);
1802
+ dev_dbg(dev, "got irq %i\n", irq_usbd);
18231803
18241804 if (udc_info && udc_info->vbus_pin > 0) {
18251805 retval = gpio_request(udc_info->vbus_pin, "udc vbus");
....@@ -1886,11 +1866,15 @@
18861866 if (udc_info && udc_info->vbus_pin > 0)
18871867 gpio_free(udc_info->vbus_pin);
18881868 err_int:
1889
- free_irq(IRQ_USBD, udc);
1890
-err_map:
1891
- iounmap(base_addr);
1892
-err_mem:
1893
- release_mem_region(rsrc_start, rsrc_len);
1869
+ free_irq(irq_usbd, udc);
1870
+err_udc_clk:
1871
+ clk_disable_unprepare(udc_clock);
1872
+ clk_put(udc_clock);
1873
+ udc_clock = NULL;
1874
+err_usb_bus_clk:
1875
+ clk_disable_unprepare(usb_bus_clock);
1876
+ clk_put(usb_bus_clock);
1877
+ usb_bus_clock = NULL;
18941878
18951879 return retval;
18961880 }
....@@ -1920,10 +1904,7 @@
19201904 free_irq(irq, udc);
19211905 }
19221906
1923
- free_irq(IRQ_USBD, udc);
1924
-
1925
- iounmap(base_addr);
1926
- release_mem_region(rsrc_start, rsrc_len);
1907
+ free_irq(irq_usbd, udc);
19271908
19281909 if (!IS_ERR(udc_clock) && udc_clock != NULL) {
19291910 clk_disable_unprepare(udc_clock);
....@@ -1985,7 +1966,8 @@
19851966
19861967 dprintk(DEBUG_NORMAL, "%s\n", gadget_name);
19871968
1988
- s3c2410_udc_debugfs_root = debugfs_create_dir(gadget_name, NULL);
1969
+ s3c2410_udc_debugfs_root = debugfs_create_dir(gadget_name,
1970
+ usb_debug_root);
19891971
19901972 retval = platform_driver_register(&udc_driver_24x0);
19911973 if (retval)