Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb: musb: Add musb_clearb/w() interface

Delete the const attribute of addr parameter in readb/w/l hooks, these
changes are for implementing clearing W1C registers.
Replace musb_readb/w with musb_clearb/w to clear the interrupt status.

While at here, change some unsigned type to u32 to fix checkpatch.pl
warnings.

Signed-off-by: Min Guo <min.guo@mediatek.com>
[b-liu@ti.com: fix checkpatch.pl warnings.]
Signed-off-by: Bin Liu <b-liu@ti.com>
Link: https://lore.kernel.org/r/20200115132547.364-23-b-liu@ti.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Min Guo and committed by
Greg Kroah-Hartman
9c93d7fd edce6177

+48 -28
+28 -14
drivers/usb/musb/musb_core.c
··· 247 247 return 0x80 + (0x08 * epnum) + offset; 248 248 } 249 249 250 - static u8 musb_default_readb(const void __iomem *addr, unsigned offset) 250 + static u8 musb_default_readb(void __iomem *addr, u32 offset) 251 251 { 252 252 u8 data = __raw_readb(addr + offset); 253 253 ··· 255 255 return data; 256 256 } 257 257 258 - static void musb_default_writeb(void __iomem *addr, unsigned offset, u8 data) 258 + static void musb_default_writeb(void __iomem *addr, u32 offset, u8 data) 259 259 { 260 260 trace_musb_writeb(__builtin_return_address(0), addr, offset, data); 261 261 __raw_writeb(data, addr + offset); 262 262 } 263 263 264 - static u16 musb_default_readw(const void __iomem *addr, unsigned offset) 264 + static u16 musb_default_readw(void __iomem *addr, u32 offset) 265 265 { 266 266 u16 data = __raw_readw(addr + offset); 267 267 ··· 269 269 return data; 270 270 } 271 271 272 - static void musb_default_writew(void __iomem *addr, unsigned offset, u16 data) 272 + static void musb_default_writew(void __iomem *addr, u32 offset, u16 data) 273 273 { 274 274 trace_musb_writew(__builtin_return_address(0), addr, offset, data); 275 275 __raw_writew(data, addr + offset); ··· 397 397 /* 398 398 * Old style IO functions 399 399 */ 400 - u8 (*musb_readb)(const void __iomem *addr, unsigned offset); 400 + u8 (*musb_readb)(void __iomem *addr, u32 offset); 401 401 EXPORT_SYMBOL_GPL(musb_readb); 402 402 403 - void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data); 403 + void (*musb_writeb)(void __iomem *addr, u32 offset, u8 data); 404 404 EXPORT_SYMBOL_GPL(musb_writeb); 405 405 406 - u16 (*musb_readw)(const void __iomem *addr, unsigned offset); 406 + u8 (*musb_clearb)(void __iomem *addr, u32 offset); 407 + EXPORT_SYMBOL_GPL(musb_clearb); 408 + 409 + u16 (*musb_readw)(void __iomem *addr, u32 offset); 407 410 EXPORT_SYMBOL_GPL(musb_readw); 408 411 409 - void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data); 412 + void (*musb_writew)(void __iomem *addr, u32 offset, u16 data); 410 413 EXPORT_SYMBOL_GPL(musb_writew); 411 414 412 - u32 musb_readl(const void __iomem *addr, unsigned offset) 415 + u16 (*musb_clearw)(void __iomem *addr, u32 offset); 416 + EXPORT_SYMBOL_GPL(musb_clearw); 417 + 418 + u32 musb_readl(void __iomem *addr, u32 offset) 413 419 { 414 420 u32 data = __raw_readl(addr + offset); 415 421 ··· 424 418 } 425 419 EXPORT_SYMBOL_GPL(musb_readl); 426 420 427 - void musb_writel(void __iomem *addr, unsigned offset, u32 data) 421 + void musb_writel(void __iomem *addr, u32 offset, u32 data) 428 422 { 429 423 trace_musb_writel(__builtin_return_address(0), addr, offset, data); 430 424 __raw_writel(data, addr + offset); ··· 1155 1149 static void musb_disable_interrupts(struct musb *musb) 1156 1150 { 1157 1151 void __iomem *mbase = musb->mregs; 1158 - u16 temp; 1159 1152 1160 1153 /* disable interrupts */ 1161 1154 musb_writeb(mbase, MUSB_INTRUSBE, 0); ··· 1164 1159 musb_writew(mbase, MUSB_INTRRXE, 0); 1165 1160 1166 1161 /* flush pending interrupts */ 1167 - temp = musb_readb(mbase, MUSB_INTRUSB); 1168 - temp = musb_readw(mbase, MUSB_INTRTX); 1169 - temp = musb_readw(mbase, MUSB_INTRRX); 1162 + musb_clearb(mbase, MUSB_INTRUSB); 1163 + musb_clearw(mbase, MUSB_INTRTX); 1164 + musb_clearw(mbase, MUSB_INTRRX); 1170 1165 } 1171 1166 1172 1167 static void musb_enable_interrupts(struct musb *musb) ··· 2393 2388 musb_readb = musb->ops->readb; 2394 2389 if (musb->ops->writeb) 2395 2390 musb_writeb = musb->ops->writeb; 2391 + if (musb->ops->clearb) 2392 + musb_clearb = musb->ops->clearb; 2393 + else 2394 + musb_clearb = musb_readb; 2395 + 2396 2396 if (musb->ops->readw) 2397 2397 musb_readw = musb->ops->readw; 2398 2398 if (musb->ops->writew) 2399 2399 musb_writew = musb->ops->writew; 2400 + if (musb->ops->clearw) 2401 + musb_clearw = musb->ops->clearw; 2402 + else 2403 + musb_clearw = musb_readw; 2400 2404 2401 2405 #ifndef CONFIG_MUSB_PIO_ONLY 2402 2406 if (!musb->ops->dma_init || !musb->ops->dma_exit) {
+8 -4
drivers/usb/musb/musb_core.h
··· 120 120 * @fifo_offset: returns the fifo offset 121 121 * @readb: read 8 bits 122 122 * @writeb: write 8 bits 123 + * @clearb: could be clear-on-readb or W1C 123 124 * @readw: read 16 bits 124 125 * @writew: write 16 bits 126 + * @clearw: could be clear-on-readw or W1C 125 127 * @read_fifo: reads the fifo 126 128 * @write_fifo: writes to fifo 127 129 * @get_toggle: platform specific get toggle function ··· 166 164 u16 fifo_mode; 167 165 u32 (*fifo_offset)(u8 epnum); 168 166 u32 (*busctl_offset)(u8 epnum, u16 offset); 169 - u8 (*readb)(const void __iomem *addr, unsigned offset); 170 - void (*writeb)(void __iomem *addr, unsigned offset, u8 data); 171 - u16 (*readw)(const void __iomem *addr, unsigned offset); 172 - void (*writew)(void __iomem *addr, unsigned offset, u16 data); 167 + u8 (*readb)(void __iomem *addr, u32 offset); 168 + void (*writeb)(void __iomem *addr, u32 offset, u8 data); 169 + u8 (*clearb)(void __iomem *addr, u32 offset); 170 + u16 (*readw)(void __iomem *addr, u32 offset); 171 + void (*writew)(void __iomem *addr, u32 offset, u16 data); 172 + u16 (*clearw)(void __iomem *addr, u32 offset); 173 173 void (*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf); 174 174 void (*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf); 175 175 u16 (*get_toggle)(struct musb_qh *qh, int is_out);
+8 -6
drivers/usb/musb/musb_io.h
··· 37 37 }; 38 38 39 39 /* Do not add new entries here, add them the struct musb_io instead */ 40 - extern u8 (*musb_readb)(const void __iomem *addr, unsigned offset); 41 - extern void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data); 42 - extern u16 (*musb_readw)(const void __iomem *addr, unsigned offset); 43 - extern void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data); 44 - extern u32 musb_readl(const void __iomem *addr, unsigned offset); 45 - extern void musb_writel(void __iomem *addr, unsigned offset, u32 data); 40 + extern u8 (*musb_readb)(void __iomem *addr, u32 offset); 41 + extern void (*musb_writeb)(void __iomem *addr, u32 offset, u8 data); 42 + extern u8 (*musb_clearb)(void __iomem *addr, u32 offset); 43 + extern u16 (*musb_readw)(void __iomem *addr, u32 offset); 44 + extern void (*musb_writew)(void __iomem *addr, u32 offset, u16 data); 45 + extern u16 (*musb_clearw)(void __iomem *addr, u32 offset); 46 + extern u32 musb_readl(void __iomem *addr, u32 offset); 47 + extern void musb_writel(void __iomem *addr, u32 offset, u32 data); 46 48 47 49 #endif
+1 -1
drivers/usb/musb/musbhsdma.c
··· 284 284 285 285 spin_lock_irqsave(&musb->lock, flags); 286 286 287 - int_hsdma = musb_readb(mbase, MUSB_HSDMA_INTR); 287 + int_hsdma = musb_clearb(mbase, MUSB_HSDMA_INTR); 288 288 289 289 if (!int_hsdma) { 290 290 musb_dbg(musb, "spurious DMA irq");
+2 -2
drivers/usb/musb/sunxi.c
··· 407 407 return SUNXI_MUSB_TXFUNCADDR + offset; 408 408 } 409 409 410 - static u8 sunxi_musb_readb(const void __iomem *addr, unsigned offset) 410 + static u8 sunxi_musb_readb(void __iomem *addr, u32 offset) 411 411 { 412 412 struct sunxi_glue *glue; 413 413 ··· 520 520 (int)(addr - sunxi_musb->mregs)); 521 521 } 522 522 523 - static u16 sunxi_musb_readw(const void __iomem *addr, unsigned offset) 523 + static u16 sunxi_musb_readw(void __iomem *addr, u32 offset) 524 524 { 525 525 if (addr == sunxi_musb->mregs) { 526 526 /* generic control or fifo control reg access */
+1 -1
drivers/usb/musb/tusb6010.c
··· 142 142 /* 143 143 * TUSB6010 doesn't allow 8-bit access; 16-bit access is the minimum. 144 144 */ 145 - static u8 tusb_readb(const void __iomem *addr, unsigned offset) 145 + static u8 tusb_readb(void __iomem *addr, u32 offset) 146 146 { 147 147 u16 tmp; 148 148 u8 val;