usb: musb: Add musb_clearb/w() interface
authorMin Guo <min.guo@mediatek.com>
Wed, 15 Jan 2020 13:25:44 +0000 (07:25 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Jan 2020 13:46:59 +0000 (14:46 +0100)
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>
drivers/usb/musb/musb_core.c
drivers/usb/musb/musb_core.h
drivers/usb/musb/musb_io.h
drivers/usb/musb/musbhsdma.c
drivers/usb/musb/sunxi.c
drivers/usb/musb/tusb6010.c

index f3c95cd12e04f9bbc718de494742cef867de352b..71691a1f8ae34ea05a1b8c48de9dadce9789b277 100644 (file)
@@ -247,7 +247,7 @@ static u32 musb_default_busctl_offset(u8 epnum, u16 offset)
        return 0x80 + (0x08 * epnum) + offset;
 }
 
-static u8 musb_default_readb(const void __iomem *addr, unsigned offset)
+static u8 musb_default_readb(void __iomem *addr, u32 offset)
 {
        u8 data =  __raw_readb(addr + offset);
 
@@ -255,13 +255,13 @@ static u8 musb_default_readb(const void __iomem *addr, unsigned offset)
        return data;
 }
 
-static void musb_default_writeb(void __iomem *addr, unsigned offset, u8 data)
+static void musb_default_writeb(void __iomem *addr, u32 offset, u8 data)
 {
        trace_musb_writeb(__builtin_return_address(0), addr, offset, data);
        __raw_writeb(data, addr + offset);
 }
 
-static u16 musb_default_readw(const void __iomem *addr, unsigned offset)
+static u16 musb_default_readw(void __iomem *addr, u32 offset)
 {
        u16 data = __raw_readw(addr + offset);
 
@@ -269,7 +269,7 @@ static u16 musb_default_readw(const void __iomem *addr, unsigned offset)
        return data;
 }
 
-static void musb_default_writew(void __iomem *addr, unsigned offset, u16 data)
+static void musb_default_writew(void __iomem *addr, u32 offset, u16 data)
 {
        trace_musb_writew(__builtin_return_address(0), addr, offset, data);
        __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)
 /*
  * Old style IO functions
  */
-u8 (*musb_readb)(const void __iomem *addr, unsigned offset);
+u8 (*musb_readb)(void __iomem *addr, u32 offset);
 EXPORT_SYMBOL_GPL(musb_readb);
 
-void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data);
+void (*musb_writeb)(void __iomem *addr, u32 offset, u8 data);
 EXPORT_SYMBOL_GPL(musb_writeb);
 
-u16 (*musb_readw)(const void __iomem *addr, unsigned offset);
+u8 (*musb_clearb)(void __iomem *addr, u32 offset);
+EXPORT_SYMBOL_GPL(musb_clearb);
+
+u16 (*musb_readw)(void __iomem *addr, u32 offset);
 EXPORT_SYMBOL_GPL(musb_readw);
 
-void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data);
+void (*musb_writew)(void __iomem *addr, u32 offset, u16 data);
 EXPORT_SYMBOL_GPL(musb_writew);
 
-u32 musb_readl(const void __iomem *addr, unsigned offset)
+u16 (*musb_clearw)(void __iomem *addr, u32 offset);
+EXPORT_SYMBOL_GPL(musb_clearw);
+
+u32 musb_readl(void __iomem *addr, u32 offset)
 {
        u32 data = __raw_readl(addr + offset);
 
@@ -418,7 +424,7 @@ u32 musb_readl(const void __iomem *addr, unsigned offset)
 }
 EXPORT_SYMBOL_GPL(musb_readl);
 
-void musb_writel(void __iomem *addr, unsigned offset, u32 data)
+void musb_writel(void __iomem *addr, u32 offset, u32 data)
 {
        trace_musb_writel(__builtin_return_address(0), addr, offset, data);
        __raw_writel(data, addr + offset);
@@ -1149,7 +1155,6 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
 static void musb_disable_interrupts(struct musb *musb)
 {
        void __iomem    *mbase = musb->mregs;
-       u16     temp;
 
        /* disable interrupts */
        musb_writeb(mbase, MUSB_INTRUSBE, 0);
@@ -1159,9 +1164,9 @@ static void musb_disable_interrupts(struct musb *musb)
        musb_writew(mbase, MUSB_INTRRXE, 0);
 
        /*  flush pending interrupts */
-       temp = musb_readb(mbase, MUSB_INTRUSB);
-       temp = musb_readw(mbase, MUSB_INTRTX);
-       temp = musb_readw(mbase, MUSB_INTRRX);
+       musb_clearb(mbase, MUSB_INTRUSB);
+       musb_clearw(mbase, MUSB_INTRTX);
+       musb_clearw(mbase, MUSB_INTRRX);
 }
 
 static void musb_enable_interrupts(struct musb *musb)
@@ -2388,10 +2393,19 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
                musb_readb = musb->ops->readb;
        if (musb->ops->writeb)
                musb_writeb = musb->ops->writeb;
+       if (musb->ops->clearb)
+               musb_clearb = musb->ops->clearb;
+       else
+               musb_clearb = musb_readb;
+
        if (musb->ops->readw)
                musb_readw = musb->ops->readw;
        if (musb->ops->writew)
                musb_writew = musb->ops->writew;
+       if (musb->ops->clearw)
+               musb_clearw = musb->ops->clearw;
+       else
+               musb_clearw = musb_readw;
 
 #ifndef CONFIG_MUSB_PIO_ONLY
        if (!musb->ops->dma_init || !musb->ops->dma_exit) {
index 2e4fcf1a1a5c3679895e41985caba4b85340a474..290a2bc466064ca9c0c0cf5bfae18531e5658007 100644 (file)
@@ -120,8 +120,10 @@ struct musb_io;
  * @fifo_offset: returns the fifo offset
  * @readb:     read 8 bits
  * @writeb:    write 8 bits
+ * @clearb:    could be clear-on-readb or W1C
  * @readw:     read 16 bits
  * @writew:    write 16 bits
+ * @clearw:    could be clear-on-readw or W1C
  * @read_fifo: reads the fifo
  * @write_fifo:        writes to fifo
  * @get_toggle:        platform specific get toggle function
@@ -164,10 +166,12 @@ struct musb_platform_ops {
        u16     fifo_mode;
        u32     (*fifo_offset)(u8 epnum);
        u32     (*busctl_offset)(u8 epnum, u16 offset);
-       u8      (*readb)(const void __iomem *addr, unsigned offset);
-       void    (*writeb)(void __iomem *addr, unsigned offset, u8 data);
-       u16     (*readw)(const void __iomem *addr, unsigned offset);
-       void    (*writew)(void __iomem *addr, unsigned offset, u16 data);
+       u8      (*readb)(void __iomem *addr, u32 offset);
+       void    (*writeb)(void __iomem *addr, u32 offset, u8 data);
+       u8      (*clearb)(void __iomem *addr, u32 offset);
+       u16     (*readw)(void __iomem *addr, u32 offset);
+       void    (*writew)(void __iomem *addr, u32 offset, u16 data);
+       u16     (*clearw)(void __iomem *addr, u32 offset);
        void    (*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf);
        void    (*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf);
        u16     (*get_toggle)(struct musb_qh *qh, int is_out);
index 8179334f405b5ae4f95cfd897eeb0982fbc454a3..f17aabd95a501f91d2b8c64fdfaacc937cd76b59 100644 (file)
@@ -37,11 +37,13 @@ struct musb_io {
 };
 
 /* Do not add new entries here, add them the struct musb_io instead */
-extern u8 (*musb_readb)(const void __iomem *addr, unsigned offset);
-extern void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data);
-extern u16 (*musb_readw)(const void __iomem *addr, unsigned offset);
-extern void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data);
-extern u32 musb_readl(const void __iomem *addr, unsigned offset);
-extern void musb_writel(void __iomem *addr, unsigned offset, u32 data);
+extern u8 (*musb_readb)(void __iomem *addr, u32 offset);
+extern void (*musb_writeb)(void __iomem *addr, u32 offset, u8 data);
+extern u8 (*musb_clearb)(void __iomem *addr, u32 offset);
+extern u16 (*musb_readw)(void __iomem *addr, u32 offset);
+extern void (*musb_writew)(void __iomem *addr, u32 offset, u16 data);
+extern u16 (*musb_clearw)(void __iomem *addr, u32 offset);
+extern u32 musb_readl(void __iomem *addr, u32 offset);
+extern void musb_writel(void __iomem *addr, u32 offset, u32 data);
 
 #endif
index bcc0fbf42ba88d07aec420a9c4fd80734f425cbc..0aacfc8be5a19583d107556a1f3ceeb71a6a397d 100644 (file)
@@ -284,7 +284,7 @@ irqreturn_t dma_controller_irq(int irq, void *private_data)
 
        spin_lock_irqsave(&musb->lock, flags);
 
-       int_hsdma = musb_readb(mbase, MUSB_HSDMA_INTR);
+       int_hsdma = musb_clearb(mbase, MUSB_HSDMA_INTR);
 
        if (!int_hsdma) {
                musb_dbg(musb, "spurious DMA irq");
index a72665fbf111e9bf001aa8e45d076c34fbdaddec..f3f76f2ac63f9b694d9b19b9799c18ab6553760f 100644 (file)
@@ -407,7 +407,7 @@ static u32 sunxi_musb_busctl_offset(u8 epnum, u16 offset)
        return SUNXI_MUSB_TXFUNCADDR + offset;
 }
 
-static u8 sunxi_musb_readb(const void __iomem *addr, unsigned offset)
+static u8 sunxi_musb_readb(void __iomem *addr, u32 offset)
 {
        struct sunxi_glue *glue;
 
@@ -520,7 +520,7 @@ static void sunxi_musb_writeb(void __iomem *addr, unsigned offset, u8 data)
                (int)(addr - sunxi_musb->mregs));
 }
 
-static u16 sunxi_musb_readw(const void __iomem *addr, unsigned offset)
+static u16 sunxi_musb_readw(void __iomem *addr, u32 offset)
 {
        if (addr == sunxi_musb->mregs) {
                /* generic control or fifo control reg access */
index 39453287b5c36813288e0beb4c2f73f603e02c4e..5d449089e3ad64b39483db75ff0333c90a221386 100644 (file)
@@ -142,7 +142,7 @@ static void tusb_ep_select(void __iomem *mbase, u8 epnum)
 /*
  * TUSB6010 doesn't allow 8-bit access; 16-bit access is the minimum.
  */
-static u8 tusb_readb(const void __iomem *addr, unsigned offset)
+static u8 tusb_readb(void __iomem *addr, u32 offset)
 {
        u16 tmp;
        u8 val;