Skip to content

Commit 9c93d7f

Browse files
Min Guogregkh
authored andcommitted
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 <[email protected]> [[email protected]: fix checkpatch.pl warnings.] Signed-off-by: Bin Liu <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent edce617 commit 9c93d7f

File tree

6 files changed

+48
-28
lines changed

6 files changed

+48
-28
lines changed

drivers/usb/musb/musb_core.c

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -247,29 +247,29 @@ static u32 musb_default_busctl_offset(u8 epnum, u16 offset)
247247
return 0x80 + (0x08 * epnum) + offset;
248248
}
249249

250-
static u8 musb_default_readb(const void __iomem *addr, unsigned offset)
250+
static u8 musb_default_readb(void __iomem *addr, u32 offset)
251251
{
252252
u8 data = __raw_readb(addr + offset);
253253

254254
trace_musb_readb(__builtin_return_address(0), addr, offset, data);
255255
return data;
256256
}
257257

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)
259259
{
260260
trace_musb_writeb(__builtin_return_address(0), addr, offset, data);
261261
__raw_writeb(data, addr + offset);
262262
}
263263

264-
static u16 musb_default_readw(const void __iomem *addr, unsigned offset)
264+
static u16 musb_default_readw(void __iomem *addr, u32 offset)
265265
{
266266
u16 data = __raw_readw(addr + offset);
267267

268268
trace_musb_readw(__builtin_return_address(0), addr, offset, data);
269269
return data;
270270
}
271271

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)
273273
{
274274
trace_musb_writew(__builtin_return_address(0), addr, offset, data);
275275
__raw_writew(data, addr + offset);
@@ -397,19 +397,25 @@ static void musb_default_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
397397
/*
398398
* Old style IO functions
399399
*/
400-
u8 (*musb_readb)(const void __iomem *addr, unsigned offset);
400+
u8 (*musb_readb)(void __iomem *addr, u32 offset);
401401
EXPORT_SYMBOL_GPL(musb_readb);
402402

403-
void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data);
403+
void (*musb_writeb)(void __iomem *addr, u32 offset, u8 data);
404404
EXPORT_SYMBOL_GPL(musb_writeb);
405405

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);
407410
EXPORT_SYMBOL_GPL(musb_readw);
408411

409-
void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data);
412+
void (*musb_writew)(void __iomem *addr, u32 offset, u16 data);
410413
EXPORT_SYMBOL_GPL(musb_writew);
411414

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)
413419
{
414420
u32 data = __raw_readl(addr + offset);
415421

@@ -418,7 +424,7 @@ u32 musb_readl(const void __iomem *addr, unsigned offset)
418424
}
419425
EXPORT_SYMBOL_GPL(musb_readl);
420426

421-
void musb_writel(void __iomem *addr, unsigned offset, u32 data)
427+
void musb_writel(void __iomem *addr, u32 offset, u32 data)
422428
{
423429
trace_musb_writel(__builtin_return_address(0), addr, offset, data);
424430
__raw_writel(data, addr + offset);
@@ -1149,7 +1155,6 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
11491155
static void musb_disable_interrupts(struct musb *musb)
11501156
{
11511157
void __iomem *mbase = musb->mregs;
1152-
u16 temp;
11531158

11541159
/* disable interrupts */
11551160
musb_writeb(mbase, MUSB_INTRUSBE, 0);
@@ -1159,9 +1164,9 @@ static void musb_disable_interrupts(struct musb *musb)
11591164
musb_writew(mbase, MUSB_INTRRXE, 0);
11601165

11611166
/* flush pending interrupts */
1162-
temp = musb_readb(mbase, MUSB_INTRUSB);
1163-
temp = musb_readw(mbase, MUSB_INTRTX);
1164-
temp = musb_readw(mbase, MUSB_INTRRX);
1167+
musb_clearb(mbase, MUSB_INTRUSB);
1168+
musb_clearw(mbase, MUSB_INTRTX);
1169+
musb_clearw(mbase, MUSB_INTRRX);
11651170
}
11661171

11671172
static void musb_enable_interrupts(struct musb *musb)
@@ -2388,10 +2393,19 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
23882393
musb_readb = musb->ops->readb;
23892394
if (musb->ops->writeb)
23902395
musb_writeb = musb->ops->writeb;
2396+
if (musb->ops->clearb)
2397+
musb_clearb = musb->ops->clearb;
2398+
else
2399+
musb_clearb = musb_readb;
2400+
23912401
if (musb->ops->readw)
23922402
musb_readw = musb->ops->readw;
23932403
if (musb->ops->writew)
23942404
musb_writew = musb->ops->writew;
2405+
if (musb->ops->clearw)
2406+
musb_clearw = musb->ops->clearw;
2407+
else
2408+
musb_clearw = musb_readw;
23952409

23962410
#ifndef CONFIG_MUSB_PIO_ONLY
23972411
if (!musb->ops->dma_init || !musb->ops->dma_exit) {

drivers/usb/musb/musb_core.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,10 @@ struct musb_io;
120120
* @fifo_offset: returns the fifo offset
121121
* @readb: read 8 bits
122122
* @writeb: write 8 bits
123+
* @clearb: could be clear-on-readb or W1C
123124
* @readw: read 16 bits
124125
* @writew: write 16 bits
126+
* @clearw: could be clear-on-readw or W1C
125127
* @read_fifo: reads the fifo
126128
* @write_fifo: writes to fifo
127129
* @get_toggle: platform specific get toggle function
@@ -164,10 +166,12 @@ struct musb_platform_ops {
164166
u16 fifo_mode;
165167
u32 (*fifo_offset)(u8 epnum);
166168
u32 (*busctl_offset)(u8 epnum, u16 offset);
167-
u8 (*readb)(const void __iomem *addr, unsigned offset);
168-
void (*writeb)(void __iomem *addr, unsigned offset, u8 data);
169-
u16 (*readw)(const void __iomem *addr, unsigned offset);
170-
void (*writew)(void __iomem *addr, unsigned offset, u16 data);
169+
u8 (*readb)(void __iomem *addr, u32 offset);
170+
void (*writeb)(void __iomem *addr, u32 offset, u8 data);
171+
u8 (*clearb)(void __iomem *addr, u32 offset);
172+
u16 (*readw)(void __iomem *addr, u32 offset);
173+
void (*writew)(void __iomem *addr, u32 offset, u16 data);
174+
u16 (*clearw)(void __iomem *addr, u32 offset);
171175
void (*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf);
172176
void (*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf);
173177
u16 (*get_toggle)(struct musb_qh *qh, int is_out);

drivers/usb/musb/musb_io.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,13 @@ struct musb_io {
3737
};
3838

3939
/* 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);
4648

4749
#endif

drivers/usb/musb/musbhsdma.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ irqreturn_t dma_controller_irq(int irq, void *private_data)
284284

285285
spin_lock_irqsave(&musb->lock, flags);
286286

287-
int_hsdma = musb_readb(mbase, MUSB_HSDMA_INTR);
287+
int_hsdma = musb_clearb(mbase, MUSB_HSDMA_INTR);
288288

289289
if (!int_hsdma) {
290290
musb_dbg(musb, "spurious DMA irq");

drivers/usb/musb/sunxi.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ static u32 sunxi_musb_busctl_offset(u8 epnum, u16 offset)
407407
return SUNXI_MUSB_TXFUNCADDR + offset;
408408
}
409409

410-
static u8 sunxi_musb_readb(const void __iomem *addr, unsigned offset)
410+
static u8 sunxi_musb_readb(void __iomem *addr, u32 offset)
411411
{
412412
struct sunxi_glue *glue;
413413

@@ -520,7 +520,7 @@ static void sunxi_musb_writeb(void __iomem *addr, unsigned offset, u8 data)
520520
(int)(addr - sunxi_musb->mregs));
521521
}
522522

523-
static u16 sunxi_musb_readw(const void __iomem *addr, unsigned offset)
523+
static u16 sunxi_musb_readw(void __iomem *addr, u32 offset)
524524
{
525525
if (addr == sunxi_musb->mregs) {
526526
/* generic control or fifo control reg access */

drivers/usb/musb/tusb6010.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ static void tusb_ep_select(void __iomem *mbase, u8 epnum)
142142
/*
143143
* TUSB6010 doesn't allow 8-bit access; 16-bit access is the minimum.
144144
*/
145-
static u8 tusb_readb(const void __iomem *addr, unsigned offset)
145+
static u8 tusb_readb(void __iomem *addr, u32 offset)
146146
{
147147
u16 tmp;
148148
u8 val;

0 commit comments

Comments
 (0)