3 patches to fix sh7757lcr board added
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 31 Jul 2012 20:51:39 +0000 (13:51 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 31 Jul 2012 20:51:39 +0000 (13:51 -0700)
15 files changed:
patches.r8a66597-udc/001-usb-gadget-add-platform-module-alias-where-it-is-missing.patch
patches.r8a66597-udc/002-usb-update-email-address-in-r8a66597-udc-and-m66592-udc.patch
patches.r8a66597-udc/003-usb-gadget-r8a66597-udc-make-buswait-configurable-through-platform-data.patch
patches.r8a66597-udc/004-usb-gadget-r8a66597-udc-add-support-for-test_mode.patch
patches.r8a66597-udc/005-usb-gadget-clean-up-fsf-boilerplate-text.patch
patches.r8a66597-udc/006-usb-irq-remove-irqf_disabled.patch
patches.r8a66597-udc/007-usb-gadget-r8a66597-udc-change-prototype-of-r8a66597_write_fifo.patch
patches.r8a66597-udc/008-usb-r8a66597-hcd-add-function-for-external-controller.patch
patches.r8a66597-udc/009-usb-gadget-r8a66597-udc-add-function-for-external-controller.patch
patches.r8a66597-udc/010-usb-gadget-r8a66597-udc-use-dev_-instead-of-printk.patch
patches.r8a66597-udc/011-usb-gadget-r8a66597-udc-add-support-for-sudmac.patch
patches.sh7757lcr/drivers-sh-generalize-runtime-pm-platform-stub.patch [new file with mode: 0644]
patches.sh7757lcr/sh-also-without-pm_runtime-pm_runtime.o-must-be-built.patch [new file with mode: 0644]
patches.sh7757lcr/sh-fix-clock-sh7757-for-the-latest-sh_mobile_sdhi-driver.patch [new file with mode: 0644]
series

index 390208c085449868107b35b64f16de55f1ed08a4..47b46d786bbf8ca838da38571fcab577e2c18df9 100644 (file)
@@ -29,24 +29,15 @@ Conflicts:
 Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
 ---
  drivers/usb/gadget/r8a66597-udc.c |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ 1 file changed, 1 insertion(+)
 
-diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c
-index 6dcc1f6..600a2e7 100644
 --- a/drivers/usb/gadget/r8a66597-udc.c
 +++ b/drivers/usb/gadget/r8a66597-udc.c
-@@ -1679,6 +1679,7 @@ static struct platform_driver r8a66597_driver = {
+@@ -1679,6 +1679,7 @@ static struct platform_driver r8a66597_d
                .name = (char *) udc_name,
        },
  };
 +MODULE_ALIAS("platform:r8a66597_udc");
-
  static int __init r8a66597_udc_init(void)
  {
--- 
-1.7.1
-_______________________________________________
-LTSI-dev mailing list
-LTSI-dev@lists.linuxfoundation.org
-https://lists.linuxfoundation.org/mailman/listinfo/ltsi-dev
-
index a6fea327f2f4e0bb6318f19f7fc7017d637173f6..f269dfd3cdd8673ba1164c6442ded636d6c2544c 100644 (file)
@@ -26,8 +26,6 @@ Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
  drivers/usb/gadget/r8a66597-udc.h |    2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
-diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c
-index 600a2e7..9fc3979 100644
 --- a/drivers/usb/gadget/r8a66597-udc.c
 +++ b/drivers/usb/gadget/r8a66597-udc.c
 @@ -3,7 +3,7 @@
@@ -39,8 +37,6 @@ index 600a2e7..9fc3979 100644
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
-diff --git a/drivers/usb/gadget/r8a66597-udc.h b/drivers/usb/gadget/r8a66597-udc.h
-index 5fc22e0..503f766 100644
 --- a/drivers/usb/gadget/r8a66597-udc.h
 +++ b/drivers/usb/gadget/r8a66597-udc.h
 @@ -3,7 +3,7 @@
@@ -52,10 +48,3 @@ index 5fc22e0..503f766 100644
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
--- 
-1.7.1
-_______________________________________________
-LTSI-dev mailing list
-LTSI-dev@lists.linuxfoundation.org
-https://lists.linuxfoundation.org/mailman/listinfo/ltsi-dev
-
index d5b936dece469bcc2afa02ec95ca064400dae832..a2bc8474783f59bfc1830c3d7d31f81ab0292c2e 100644 (file)
@@ -32,15 +32,13 @@ Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
 ---
  drivers/usb/gadget/r8a66597-udc.c |    6 +++++-
  include/linux/usb/r8a66597.h      |    3 +++
- 2 files changed, 8 insertions(+), 1 deletions(-)
+ 2 files changed, 8 insertions(+), 1 deletion(-)
 
-diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c
-index 9fc3979..8a3a32a 100644
 --- a/drivers/usb/gadget/r8a66597-udc.c
 +++ b/drivers/usb/gadget/r8a66597-udc.c
-@@ -576,7 +576,11 @@ static void init_controller(struct r8a66597 *r8a66597)
+@@ -576,7 +576,11 @@ static void init_controller(struct r8a66
        u16 endian = r8a66597->pdata->endian ? BIGEND : 0;
-
        if (r8a66597->pdata->on_chip) {
 -              r8a66597_bset(r8a66597, 0x04, SYSCFG1);
 +              if (r8a66597->pdata->buswait)
@@ -49,26 +47,17 @@ index 9fc3979..8a3a32a 100644
 +              else
 +                      r8a66597_write(r8a66597, 0x0f, SYSCFG1);
                r8a66597_bset(r8a66597, HSE, SYSCFG0);
-
                r8a66597_bclr(r8a66597, USBE, SYSCFG0);
-diff --git a/include/linux/usb/r8a66597.h b/include/linux/usb/r8a66597.h
-index 26d2167..6e1bfae 100644
 --- a/include/linux/usb/r8a66597.h
 +++ b/include/linux/usb/r8a66597.h
 @@ -31,6 +31,9 @@ struct r8a66597_platdata {
        /* This callback can control port power instead of DVSTCTR register. */
        void (*port_power)(int port, int power);
-
 +      /* This parameter is for BUSWAIT */
 +      u16             buswait;
 +
        /* set one = on chip controller, set zero = external controller */
        unsigned        on_chip:1;
-
--- 
-1.7.1
-_______________________________________________
-LTSI-dev mailing list
-LTSI-dev@lists.linuxfoundation.org
-https://lists.linuxfoundation.org/mailman/listinfo/ltsi-dev
-
index 841a2cf6a729d9ddf2fb39b631f5d4f112ad70f6..e187abf2946dc48c845998d9c6bab2090051dc5a 100644 (file)
@@ -23,35 +23,33 @@ Signed-off-by: Felipe Balbi <balbi@ti.com>
 Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
 ---
  drivers/usb/gadget/r8a66597-udc.c |   23 ++++++++++++++++++++++-
- 1 files changed, 22 insertions(+), 1 deletions(-)
+ 1 file changed, 22 insertions(+), 1 deletion(-)
 
-diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c
-index 8a3a32a..eb1ad72 100644
 --- a/drivers/usb/gadget/r8a66597-udc.c
 +++ b/drivers/usb/gadget/r8a66597-udc.c
-@@ -622,6 +622,7 @@ static void disable_controller(struct r8a66597 *r8a66597)
+@@ -622,6 +622,7 @@ static void disable_controller(struct r8
  {
        if (r8a66597->pdata->on_chip) {
                r8a66597_bset(r8a66597, SCKE, SYSCFG0);
 +              r8a66597_bclr(r8a66597, UTST, TESTMODE);
-
                /* disable interrupts */
                r8a66597_write(r8a66597, 0, INTENB0);
-@@ -639,6 +640,7 @@ static void disable_controller(struct r8a66597 *r8a66597)
+@@ -639,6 +640,7 @@ static void disable_controller(struct r8
                r8a66597_bclr(r8a66597, SCKE, SYSCFG0);
-
        } else {
 +              r8a66597_bclr(r8a66597, UTST, TESTMODE);
                r8a66597_bclr(r8a66597, SCKE, SYSCFG0);
                udelay(1);
                r8a66597_bclr(r8a66597, PLLC, SYSCFG0);
-@@ -1003,10 +1005,29 @@ static void clear_feature(struct r8a66597 *r8a66597,
-
+@@ -1003,10 +1005,29 @@ static void clear_feature(struct r8a6659
  static void set_feature(struct r8a66597 *r8a66597, struct usb_ctrlrequest *ctrl)
  {
 +      u16 tmp;
 +      int timeout = 3000;
-
        switch (ctrl->bRequestType & USB_RECIP_MASK) {
        case USB_RECIP_DEVICE:
 -              control_end(r8a66597, 1);
@@ -76,10 +74,3 @@ index 8a3a32a..eb1ad72 100644
                break;
        case USB_RECIP_INTERFACE:
                control_end(r8a66597, 1);
--- 
-1.7.1
-_______________________________________________
-LTSI-dev mailing list
-LTSI-dev@lists.linuxfoundation.org
-https://lists.linuxfoundation.org/mailman/listinfo/ltsi-dev
-
index 91309889b3f0794b11034f12a2b1094588a8e2e7..f4c3082086838f82690412abc7904587ec3c1a86 100644 (file)
@@ -92,10 +92,8 @@ Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
 ---
  drivers/usb/gadget/r8a66597-udc.c |   10 ----------
  drivers/usb/gadget/r8a66597-udc.h |   10 ----------
- 2 files changed, 0 insertions(+), 20 deletions(-)
+ 2 files changed, 20 deletions(-)
 
-diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c
-index eb1ad72..fe3313a 100644
 --- a/drivers/usb/gadget/r8a66597-udc.c
 +++ b/drivers/usb/gadget/r8a66597-udc.c
 @@ -8,16 +8,6 @@
@@ -113,10 +111,8 @@ index eb1ad72..fe3313a 100644
 - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 - *
   */
-
  #include <linux/module.h>
-diff --git a/drivers/usb/gadget/r8a66597-udc.h b/drivers/usb/gadget/r8a66597-udc.h
-index 503f766..a373c4e 100644
 --- a/drivers/usb/gadget/r8a66597-udc.h
 +++ b/drivers/usb/gadget/r8a66597-udc.h
 @@ -8,16 +8,6 @@
@@ -134,12 +130,5 @@ index 503f766..a373c4e 100644
 - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 - *
   */
-
  #ifndef __R8A66597_H__
--- 
-1.7.1
-_______________________________________________
-LTSI-dev mailing list
-LTSI-dev@lists.linuxfoundation.org
-https://lists.linuxfoundation.org/mailman/listinfo/ltsi-dev
-
index 9fbc2940c6483204245cfb04519ec08058d9c39b..bcd8c99863547c70aad9fc4b73c63492905f6b8c 100644 (file)
@@ -77,26 +77,16 @@ Conflicts:
 Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
 ---
  drivers/usb/gadget/r8a66597-udc.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c
-index fe3313a..460b3bf 100644
 --- a/drivers/usb/gadget/r8a66597-udc.c
 +++ b/drivers/usb/gadget/r8a66597-udc.c
-@@ -1618,7 +1618,7 @@ static int __init r8a66597_probe(struct platform_device *pdev)
-
+@@ -1618,7 +1618,7 @@ static int __init r8a66597_probe(struct
        disable_controller(r8a66597); /* make sure controller is disabled */
-
 -      ret = request_irq(irq, r8a66597_irq, IRQF_DISABLED | IRQF_SHARED,
 +      ret = request_irq(irq, r8a66597_irq, IRQF_SHARED,
                        udc_name, r8a66597);
        if (ret < 0) {
                printk(KERN_ERR "request_irq error (%d)\n", ret);
--- 
-1.7.1
-
-_______________________________________________
-LTSI-dev mailing list
-LTSI-dev@lists.linuxfoundation.org
-https://lists.linuxfoundation.org/mailman/listinfo/ltsi-dev
-
index 2bd54abcceb7154c82fd942e5fad224a7d787192..cdcc57b087b05edc4dfecedc1116171bf313953d 100644 (file)
@@ -21,11 +21,9 @@ Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
  drivers/usb/gadget/r8a66597-udc.h |    4 ++--
  2 files changed, 4 insertions(+), 4 deletions(-)
 
-diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c
-index 460b3bf..3450038 100644
 --- a/drivers/usb/gadget/r8a66597-udc.c
 +++ b/drivers/usb/gadget/r8a66597-udc.c
-@@ -723,7 +723,7 @@ static void irq_ep0_write(struct r8a66597_ep *ep, struct r8a66597_request *req)
+@@ -723,7 +723,7 @@ static void irq_ep0_write(struct r8a6659
        /* write fifo */
        if (req->req.buf) {
                if (size > 0)
@@ -34,8 +32,8 @@ index 460b3bf..3450038 100644
                if ((size == 0) || ((size % ep->ep.maxpacket) != 0))
                        r8a66597_bset(r8a66597, BVAL, ep->fifoctr);
        }
-@@ -770,7 +770,7 @@ static void irq_packet_write(struct r8a66597_ep *ep,
-
+@@ -770,7 +770,7 @@ static void irq_packet_write(struct r8a6
        /* write fifo */
        if (req->req.buf) {
 -              r8a66597_write_fifo(r8a66597, ep->fifoaddr, buf, size);
@@ -43,13 +41,11 @@ index 460b3bf..3450038 100644
                if ((size == 0)
                                || ((size % ep->ep.maxpacket) != 0)
                                || ((bufsize != ep->ep.maxpacket)
-diff --git a/drivers/usb/gadget/r8a66597-udc.h b/drivers/usb/gadget/r8a66597-udc.h
-index a373c4e..31047f8 100644
 --- a/drivers/usb/gadget/r8a66597-udc.h
 +++ b/drivers/usb/gadget/r8a66597-udc.h
-@@ -173,11 +173,11 @@ static inline void r8a66597_write(struct r8a66597 *r8a66597, u16 val,
+@@ -173,11 +173,11 @@ static inline void r8a66597_write(struct
  }
-
  static inline void r8a66597_write_fifo(struct r8a66597 *r8a66597,
 -                                     unsigned long offset,
 +                                     struct r8a66597_ep *ep,
@@ -60,11 +56,4 @@ index a373c4e..31047f8 100644
 +      void __iomem *fifoaddr = r8a66597->reg + ep->fifoaddr;
        int adj = 0;
        int i;
-
--- 
-1.7.1
-_______________________________________________
-LTSI-dev mailing list
-LTSI-dev@lists.linuxfoundation.org
-https://lists.linuxfoundation.org/mailman/listinfo/ltsi-dev
-
index e5efd83f84382430553ddbeee62f4c00746e3f7a..0ed2690e2f4af559050e462098836eeb7878ec93 100644 (file)
@@ -28,26 +28,17 @@ Conflicts:
 Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
 ---
  include/linux/usb/r8a66597.h |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ 1 file changed, 3 insertions(+)
 
-diff --git a/include/linux/usb/r8a66597.h b/include/linux/usb/r8a66597.h
-index 6e1bfae..7cd89e7 100644
 --- a/include/linux/usb/r8a66597.h
 +++ b/include/linux/usb/r8a66597.h
 @@ -45,6 +45,9 @@ struct r8a66597_platdata {
-
        /* set one = big endian, set zero = little endian */
        unsigned        endian:1;
 +
 +      /* (external controller only) set one = WR0_N shorted to WR1_N */
 +      unsigned        wr0_shorted_to_wr1:1;
  };
-
  /* Register definitions */
--- 
-1.7.1
-_______________________________________________
-LTSI-dev mailing list
-LTSI-dev@lists.linuxfoundation.org
-https://lists.linuxfoundation.org/mailman/listinfo/ltsi-dev
-
index 8683cb5ff5755abd6f3d65192ec2e0e06d97e320..e3017c7bb7810d44fa8ea46c9cb61b2d2ee053b1 100644 (file)
@@ -23,16 +23,14 @@ Signed-off-by: Felipe Balbi <balbi@ti.com>
 Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
 ---
  drivers/usb/gadget/r8a66597-udc.h |   34 +++++++++++++++++++---------------
- 1 files changed, 19 insertions(+), 15 deletions(-)
+ 1 file changed, 19 insertions(+), 15 deletions(-)
 
-diff --git a/drivers/usb/gadget/r8a66597-udc.h b/drivers/usb/gadget/r8a66597-udc.h
-index 31047f8..f9ac2d7 100644
 --- a/drivers/usb/gadget/r8a66597-udc.h
 +++ b/drivers/usb/gadget/r8a66597-udc.h
-@@ -172,6 +172,21 @@ static inline void r8a66597_write(struct r8a66597 *r8a66597, u16 val,
+@@ -172,6 +172,21 @@ static inline void r8a66597_write(struct
        iowrite16(val, r8a66597->reg + offset);
  }
-
 +static inline void r8a66597_mdfy(struct r8a66597 *r8a66597,
 +                               u16 val, u16 pat, unsigned long offset)
 +{
@@ -51,10 +49,10 @@ index 31047f8..f9ac2d7 100644
  static inline void r8a66597_write_fifo(struct r8a66597 *r8a66597,
                                       struct r8a66597_ep *ep,
                                       unsigned char *buf,
-@@ -205,18 +220,12 @@ static inline void r8a66597_write_fifo(struct r8a66597 *r8a66597,
+@@ -205,18 +220,12 @@ static inline void r8a66597_write_fifo(s
                        adj = 0x01; /* 16-bit wide */
        }
-
 +      if (r8a66597->pdata->wr0_shorted_to_wr1)
 +              r8a66597_bclr(r8a66597, MBW_16, ep->fifosel);
        for (i = 0; i < len; i++)
@@ -72,24 +70,17 @@ index 31047f8..f9ac2d7 100644
 +      if (r8a66597->pdata->wr0_shorted_to_wr1)
 +              r8a66597_bclr(r8a66597, MBW_16, ep->fifosel);
  }
-
  static inline u16 get_xtal_from_pdata(struct r8a66597_platdata *pdata)
-@@ -241,11 +250,6 @@ static inline u16 get_xtal_from_pdata(struct r8a66597_platdata *pdata)
+@@ -241,11 +250,6 @@ static inline u16 get_xtal_from_pdata(st
        return clock;
  }
-
 -#define r8a66597_bclr(r8a66597, val, offset)  \
 -                      r8a66597_mdfy(r8a66597, 0, val, offset)
 -#define r8a66597_bset(r8a66597, val, offset)  \
 -                      r8a66597_mdfy(r8a66597, val, 0, offset)
 -
  #define get_pipectr_addr(pipenum)     (PIPE1CTR + (pipenum - 1) * 2)
-
  #define enable_irq_ready(r8a66597, pipenum)   \
--- 
-1.7.1
-_______________________________________________
-LTSI-dev mailing list
-LTSI-dev@lists.linuxfoundation.org
-https://lists.linuxfoundation.org/mailman/listinfo/ltsi-dev
-
index 131ff5e91d05b965b49ebe03de4d947c813ecf5e..5eed4afb8bb1722f782c01761781eb87d49ec9b7 100644 (file)
@@ -19,18 +19,16 @@ Signed-off-by: Felipe Balbi <balbi@ti.com>
 
 Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
 ---
- drivers/usb/gadget/r8a66597-udc.c |   99 ++++++++++++++++++++++---------------
- drivers/usb/gadget/r8a66597-udc.h |    1 +
+ drivers/usb/gadget/r8a66597-udc.c |   99 ++++++++++++++++++++++----------------
+ drivers/usb/gadget/r8a66597-udc.h |    1 
  2 files changed, 60 insertions(+), 40 deletions(-)
 
-diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c
-index 3450038..fd9ce15 100644
 --- a/drivers/usb/gadget/r8a66597-udc.c
 +++ b/drivers/usb/gadget/r8a66597-udc.c
-@@ -105,13 +105,15 @@ static inline u16 control_reg_get_pid(struct r8a66597 *r8a66597, u16 pipenum)
+@@ -105,13 +105,15 @@ static inline u16 control_reg_get_pid(st
        u16 pid = 0;
        unsigned long offset;
-
 -      if (pipenum == 0)
 +      if (pipenum == 0) {
                pid = r8a66597_read(r8a66597, DCPCTR) & PID;
@@ -44,13 +42,13 @@ index 3450038..fd9ce15 100644
 +              dev_err(r8a66597_to_dev(r8a66597), "unexpect pipe num (%d)\n",
 +                      pipenum);
 +      }
-
        return pid;
  }
-@@ -121,13 +123,15 @@ static inline void control_reg_set_pid(struct r8a66597 *r8a66597, u16 pipenum,
+@@ -121,13 +123,15 @@ static inline void control_reg_set_pid(s
  {
        unsigned long offset;
-
 -      if (pipenum == 0)
 +      if (pipenum == 0) {
                r8a66597_mdfy(r8a66597, pid, PID, DCPCTR);
@@ -65,12 +63,12 @@ index 3450038..fd9ce15 100644
 +                      pipenum);
 +      }
  }
-
  static inline void pipe_start(struct r8a66597 *r8a66597, u16 pipenum)
-@@ -150,13 +154,15 @@ static inline u16 control_reg_get(struct r8a66597 *r8a66597, u16 pipenum)
+@@ -150,13 +154,15 @@ static inline u16 control_reg_get(struct
        u16 ret = 0;
        unsigned long offset;
-
 -      if (pipenum == 0)
 +      if (pipenum == 0) {
                ret = r8a66597_read(r8a66597, DCPCTR);
@@ -84,13 +82,13 @@ index 3450038..fd9ce15 100644
 +              dev_err(r8a66597_to_dev(r8a66597), "unexpect pipe num (%d)\n",
 +                      pipenum);
 +      }
-
        return ret;
  }
-@@ -167,13 +173,15 @@ static inline void control_reg_sqclr(struct r8a66597 *r8a66597, u16 pipenum)
-
+@@ -167,13 +173,15 @@ static inline void control_reg_sqclr(str
        pipe_stop(r8a66597, pipenum);
-
 -      if (pipenum == 0)
 +      if (pipenum == 0) {
                r8a66597_bset(r8a66597, SQCLR, DCPCTR);
@@ -105,12 +103,12 @@ index 3450038..fd9ce15 100644
 +                      pipenum);
 +      }
  }
-
  static inline int get_buffer_size(struct r8a66597 *r8a66597, u16 pipenum)
-@@ -287,17 +295,18 @@ static void pipe_buffer_release(struct r8a66597 *r8a66597,
+@@ -287,17 +295,18 @@ static void pipe_buffer_release(struct r
        if (info->pipe == 0)
                return;
-
 -      if (is_bulk_pipe(info->pipe))
 +      if (is_bulk_pipe(info->pipe)) {
                r8a66597->bulk--;
@@ -130,9 +128,9 @@ index 3450038..fd9ce15 100644
 +                      "ep_release: unexpect pipenum (%d)\n", info->pipe);
 +      }
  }
-
  static void pipe_initialize(struct r8a66597_ep *ep)
-@@ -371,7 +380,8 @@ static int alloc_pipe_config(struct r8a66597_ep *ep,
+@@ -371,7 +380,8 @@ static int alloc_pipe_config(struct r8a6
        case USB_ENDPOINT_XFER_BULK:
                if (r8a66597->bulk >= R8A66597_MAX_NUM_BULK) {
                        if (r8a66597->isochronous >= R8A66597_MAX_NUM_ISOC) {
@@ -142,7 +140,7 @@ index 3450038..fd9ce15 100644
                                return -ENODEV;
                        } else {
                                info.pipe = R8A66597_BASE_PIPENUM_ISOC
-@@ -387,7 +397,8 @@ static int alloc_pipe_config(struct r8a66597_ep *ep,
+@@ -387,7 +397,8 @@ static int alloc_pipe_config(struct r8a6
                break;
        case USB_ENDPOINT_XFER_INT:
                if (r8a66597->interrupt >= R8A66597_MAX_NUM_INT) {
@@ -152,7 +150,7 @@ index 3450038..fd9ce15 100644
                        return -ENODEV;
                }
                info.pipe = R8A66597_BASE_PIPENUM_INT + r8a66597->interrupt;
-@@ -396,7 +407,8 @@ static int alloc_pipe_config(struct r8a66597_ep *ep,
+@@ -396,7 +407,8 @@ static int alloc_pipe_config(struct r8a6
                break;
        case USB_ENDPOINT_XFER_ISOC:
                if (r8a66597->isochronous >= R8A66597_MAX_NUM_ISOC) {
@@ -162,7 +160,7 @@ index 3450038..fd9ce15 100644
                        return -ENODEV;
                }
                info.pipe = R8A66597_BASE_PIPENUM_ISOC + r8a66597->isochronous;
-@@ -404,7 +416,7 @@ static int alloc_pipe_config(struct r8a66597_ep *ep,
+@@ -404,7 +416,7 @@ static int alloc_pipe_config(struct r8a6
                counter = &r8a66597->isochronous;
                break;
        default:
@@ -171,8 +169,8 @@ index 3450038..fd9ce15 100644
                return -EINVAL;
        }
        ep->type = info.type;
-@@ -419,7 +431,8 @@ static int alloc_pipe_config(struct r8a66597_ep *ep,
-
+@@ -419,7 +431,8 @@ static int alloc_pipe_config(struct r8a6
        ret = pipe_buffer_setting(r8a66597, &info);
        if (ret < 0) {
 -              printk(KERN_ERR "pipe_buffer_setting fail\n");
@@ -180,8 +178,8 @@ index 3450038..fd9ce15 100644
 +                      "pipe_buffer_setting fail\n");
                return ret;
        }
-
-@@ -554,7 +567,8 @@ static void start_ep0(struct r8a66597_ep *ep, struct r8a66597_request *req)
+@@ -554,7 +567,8 @@ static void start_ep0(struct r8a66597_ep
                control_end(ep->r8a66597, 0);
                break;
        default:
@@ -191,7 +189,7 @@ index 3450038..fd9ce15 100644
                break;
        }
  }
-@@ -708,7 +722,8 @@ static void irq_ep0_write(struct r8a66597_ep *ep, struct r8a66597_request *req)
+@@ -708,7 +722,8 @@ static void irq_ep0_write(struct r8a6659
        do {
                tmp = r8a66597_read(r8a66597, ep->fifoctr);
                if (i++ > 100000) {
@@ -201,7 +199,7 @@ index 3450038..fd9ce15 100644
                                "conflict. please power off this controller.");
                        return;
                }
-@@ -759,7 +774,8 @@ static void irq_packet_write(struct r8a66597_ep *ep,
+@@ -759,7 +774,8 @@ static void irq_packet_write(struct r8a6
        if (unlikely((tmp & FRDY) == 0)) {
                pipe_stop(r8a66597, pipenum);
                pipe_irq_disable(r8a66597, pipenum);
@@ -210,8 +208,8 @@ index 3450038..fd9ce15 100644
 +                      "write fifo not ready. pipnum=%d\n", pipenum);
                return;
        }
-
-@@ -809,7 +825,7 @@ static void irq_packet_read(struct r8a66597_ep *ep,
+@@ -809,7 +825,7 @@ static void irq_packet_read(struct r8a66
                req->req.status = -EPIPE;
                pipe_stop(r8a66597, pipenum);
                pipe_irq_disable(r8a66597, pipenum);
@@ -219,8 +217,8 @@ index 3450038..fd9ce15 100644
 +              dev_err(r8a66597_to_dev(r8a66597), "read fifo not ready");
                return;
        }
-
-@@ -1085,7 +1101,7 @@ static void r8a66597_update_usb_speed(struct r8a66597 *r8a66597)
+@@ -1085,7 +1101,7 @@ static void r8a66597_update_usb_speed(st
                break;
        default:
                r8a66597->gadget.speed = USB_SPEED_UNKNOWN;
@@ -228,7 +226,7 @@ index 3450038..fd9ce15 100644
 +              dev_err(r8a66597_to_dev(r8a66597), "USB speed unknown\n");
        }
  }
-
 @@ -1148,7 +1164,8 @@ __acquires(r8a66597->lock)
                control_end(r8a66597, 0);
                break;
@@ -239,8 +237,8 @@ index 3450038..fd9ce15 100644
                break;
        }
  }
-@@ -1448,13 +1465,15 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
-
+@@ -1448,13 +1465,15 @@ int usb_gadget_probe_driver(struct usb_g
        retval = device_add(&r8a66597->gadget.dev);
        if (retval) {
 -              printk(KERN_ERR "device_add error (%d)\n", retval);
@@ -248,7 +246,7 @@ index 3450038..fd9ce15 100644
 +                      retval);
                goto error;
        }
-
        retval = bind(&r8a66597->gadget);
        if (retval) {
 -              printk(KERN_ERR "bind to driver error (%d)\n", retval);
@@ -257,7 +255,7 @@ index 3450038..fd9ce15 100644
                device_del(&r8a66597->gadget.dev);
                goto error;
        }
-@@ -1554,7 +1573,7 @@ static int __init r8a66597_probe(struct platform_device *pdev)
+@@ -1554,7 +1573,7 @@ static int __init r8a66597_probe(struct
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        if (!res) {
                ret = -ENODEV;
@@ -265,16 +263,16 @@ index 3450038..fd9ce15 100644
 +              dev_err(&pdev->dev, "platform_get_resource error.\n");
                goto clean_up;
        }
-
-@@ -1564,14 +1583,14 @@ static int __init r8a66597_probe(struct platform_device *pdev)
-
+@@ -1564,14 +1583,14 @@ static int __init r8a66597_probe(struct
        if (irq < 0) {
                ret = -ENODEV;
 -              printk(KERN_ERR "platform_get_irq error.\n");
 +              dev_err(&pdev->dev, "platform_get_irq error.\n");
                goto clean_up;
        }
-
        reg = ioremap(res->start, resource_size(res));
        if (reg == NULL) {
                ret = -ENOMEM;
@@ -282,8 +280,8 @@ index 3450038..fd9ce15 100644
 +              dev_err(&pdev->dev, "ioremap error.\n");
                goto clean_up;
        }
-
-@@ -1579,7 +1598,7 @@ static int __init r8a66597_probe(struct platform_device *pdev)
+@@ -1579,7 +1598,7 @@ static int __init r8a66597_probe(struct
        r8a66597 = kzalloc(sizeof(struct r8a66597), GFP_KERNEL);
        if (r8a66597 == NULL) {
                ret = -ENOMEM;
@@ -291,8 +289,8 @@ index 3450038..fd9ce15 100644
 +              dev_err(&pdev->dev, "kzalloc error\n");
                goto clean_up;
        }
-
-@@ -1621,7 +1640,7 @@ static int __init r8a66597_probe(struct platform_device *pdev)
+@@ -1621,7 +1640,7 @@ static int __init r8a66597_probe(struct
        ret = request_irq(irq, r8a66597_irq, IRQF_SHARED,
                        udc_name, r8a66597);
        if (ret < 0) {
@@ -300,9 +298,7 @@ index 3450038..fd9ce15 100644
 +              dev_err(&pdev->dev, "request_irq error (%d)\n", ret);
                goto clean_up2;
        }
-
-diff --git a/drivers/usb/gadget/r8a66597-udc.h b/drivers/usb/gadget/r8a66597-udc.h
-index f9ac2d7..832ee59 100644
 --- a/drivers/usb/gadget/r8a66597-udc.h
 +++ b/drivers/usb/gadget/r8a66597-udc.h
 @@ -114,6 +114,7 @@ struct r8a66597 {
@@ -310,13 +306,6 @@ index f9ac2d7..832ee59 100644
                container_of(_gadget, struct r8a66597, gadget)
  #define r8a66597_to_gadget(r8a66597) (&r8a66597->gadget)
 +#define r8a66597_to_dev(r8a66597)     (r8a66597->gadget.dev.parent)
-
  static inline u16 r8a66597_read(struct r8a66597 *r8a66597, unsigned long offset)
  {
--- 
-1.7.1
-_______________________________________________
-LTSI-dev mailing list
-LTSI-dev@lists.linuxfoundation.org
-https://lists.linuxfoundation.org/mailman/listinfo/ltsi-dev
-
index fa0335d7b72893adcf3b1a379d9a4905b41bd603..8a7a41d91eaea3d9c14fd4833619f3150c5af868 100644 (file)
@@ -21,13 +21,11 @@ Signed-off-by: Felipe Balbi <balbi@ti.com>
 
 Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
 ---
- drivers/usb/gadget/r8a66597-udc.c |  364 +++++++++++++++++++++++++++++++++++--
- drivers/usb/gadget/r8a66597-udc.h |   26 +++-
+ drivers/usb/gadget/r8a66597-udc.c |  364 ++++++++++++++++++++++++++++++++++++--
+ drivers/usb/gadget/r8a66597-udc.h |   26 ++
  include/linux/usb/r8a66597.h      |   60 ++++++
  3 files changed, 430 insertions(+), 20 deletions(-)
 
-diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c
-index fd9ce15..7f37a2a 100644
 --- a/drivers/usb/gadget/r8a66597-udc.c
 +++ b/drivers/usb/gadget/r8a66597-udc.c
 @@ -18,13 +18,14 @@
@@ -35,21 +33,21 @@ index fd9ce15..7f37a2a 100644
  #include <linux/err.h>
  #include <linux/slab.h>
 +#include <linux/dma-mapping.h>
-
  #include <linux/usb/ch9.h>
  #include <linux/usb/gadget.h>
-
  #include "r8a66597-udc.h"
-
 -#define DRIVER_VERSION        "2009-08-18"
 +#define DRIVER_VERSION        "2011-09-26"
-
  static const char udc_name[] = "r8a66597_udc";
  static const char *r8a66597_ep_name[] = {
-@@ -184,6 +185,54 @@ static inline void control_reg_sqclr(struct r8a66597 *r8a66597, u16 pipenum)
+@@ -184,6 +185,54 @@ static inline void control_reg_sqclr(str
        }
  }
-
 +static void control_reg_sqset(struct r8a66597 *r8a66597, u16 pipenum)
 +{
 +      unsigned long offset;
@@ -101,10 +99,10 @@ index fd9ce15..7f37a2a 100644
  static inline int get_buffer_size(struct r8a66597 *r8a66597, u16 pipenum)
  {
        u16 tmp;
-@@ -220,18 +269,51 @@ static inline unsigned short mbw_value(struct r8a66597 *r8a66597)
+@@ -220,18 +269,51 @@ static inline unsigned short mbw_value(s
                return MBW_16;
  }
-
 +static void r8a66597_change_curpipe(struct r8a66597 *r8a66597, u16 pipenum,
 +                                  u16 isel, u16 fifosel)
 +{
@@ -135,15 +133,15 @@ index fd9ce15..7f37a2a 100644
  static inline void pipe_change(struct r8a66597 *r8a66597, u16 pipenum)
  {
        struct r8a66597_ep *ep = r8a66597->pipenum2ep[pipenum];
-
        if (ep->use_dma)
 -              return;
 +              r8a66597_bclr(r8a66597, DREQE, ep->fifosel);
-
        r8a66597_mdfy(r8a66597, pipenum, CURPIPE, ep->fifosel);
-
        ndelay(450);
-
 -      r8a66597_bset(r8a66597, mbw_value(r8a66597), ep->fifosel);
 +      if (r8a66597_is_sudmac(r8a66597) && ep->use_dma)
 +              r8a66597_bclr(r8a66597, mbw_value(r8a66597), ep->fifosel);
@@ -153,14 +151,14 @@ index fd9ce15..7f37a2a 100644
 +      if (ep->use_dma)
 +              r8a66597_bset(r8a66597, DREQE, ep->fifosel);
  }
-
  static int pipe_buffer_setting(struct r8a66597 *r8a66597,
-@@ -336,9 +418,15 @@ static void r8a66597_ep_setting(struct r8a66597 *r8a66597,
+@@ -336,9 +418,15 @@ static void r8a66597_ep_setting(struct r
        ep->fifoaddr = CFIFO;
        ep->fifosel = CFIFOSEL;
        ep->fifoctr = CFIFOCTR;
 -      ep->fifotrn = 0;
-
        ep->pipectr = get_pipectr_addr(pipenum);
 +      if (is_bulk_pipe(pipenum) || is_isoc_pipe(pipenum)) {
 +              ep->pipetre = get_pipetre_addr(pipenum);
@@ -172,10 +170,10 @@ index fd9ce15..7f37a2a 100644
        ep->pipenum = pipenum;
        ep->ep.maxpacket = le16_to_cpu(desc->wMaxPacketSize);
        r8a66597->pipenum2ep[pipenum] = ep;
-@@ -498,6 +586,124 @@ static void start_ep0_write(struct r8a66597_ep *ep,
+@@ -498,6 +586,124 @@ static void start_ep0_write(struct r8a66
        }
  }
-
 +static void disable_fifosel(struct r8a66597 *r8a66597, u16 pipenum,
 +                          u16 fifosel)
 +{
@@ -297,10 +295,10 @@ index fd9ce15..7f37a2a 100644
  static void start_packet_write(struct r8a66597_ep *ep,
                                struct r8a66597_request *req)
  {
-@@ -508,11 +714,29 @@ static void start_packet_write(struct r8a66597_ep *ep,
+@@ -508,11 +714,29 @@ static void start_packet_write(struct r8
        disable_irq_empty(r8a66597, ep->pipenum);
        pipe_start(r8a66597, ep->pipenum);
-
 -      tmp = r8a66597_read(r8a66597, ep->fifoctr);
 -      if (unlikely((tmp & FRDY) == 0))
 -              pipe_irq_enable(r8a66597, ep->pipenum);
@@ -330,9 +328,9 @@ index fd9ce15..7f37a2a 100644
 +              }
 +      }
  }
-
  static void start_packet_read(struct r8a66597_ep *ep,
-@@ -527,17 +751,26 @@ static void start_packet_read(struct r8a66597_ep *ep,
+@@ -527,17 +751,26 @@ static void start_packet_read(struct r8a
                pipe_start(r8a66597, pipenum);
                pipe_irq_enable(r8a66597, pipenum);
        } else {
@@ -367,11 +365,11 @@ index fd9ce15..7f37a2a 100644
 -              pipe_irq_enable(r8a66597, pipenum);
        }
  }
-
 @@ -694,6 +927,9 @@ __acquires(r8a66597->lock)
        if (!list_empty(&ep->queue))
                restart = 1;
-
 +      if (ep->use_dma)
 +              sudmac_free_channel(ep->r8a66597, ep, req);
 +
@@ -381,7 +379,7 @@ index fd9ce15..7f37a2a 100644
 @@ -1170,6 +1406,65 @@ __acquires(r8a66597->lock)
        }
  }
-
 +static void sudmac_finish(struct r8a66597 *r8a66597, struct r8a66597_ep *ep)
 +{
 +      u16 pipenum;
@@ -444,18 +442,18 @@ index fd9ce15..7f37a2a 100644
  static irqreturn_t r8a66597_irq(int irq, void *_r8a66597)
  {
        struct r8a66597 *r8a66597 = _r8a66597;
-@@ -1180,6 +1475,9 @@ static irqreturn_t r8a66597_irq(int irq, void *_r8a66597)
+@@ -1180,6 +1475,9 @@ static irqreturn_t r8a66597_irq(int irq,
        u16 savepipe;
        u16 mask0;
-
 +      if (r8a66597_is_sudmac(r8a66597))
 +              r8a66597_sudmac_irq(r8a66597);
 +
        spin_lock(&r8a66597->lock);
-
        intsts0 = r8a66597_read(r8a66597, INTSTS0);
-@@ -1541,6 +1839,8 @@ static int __exit r8a66597_remove(struct platform_device *pdev)
-
+@@ -1541,6 +1839,8 @@ static int __exit r8a66597_remove(struct
        del_timer_sync(&r8a66597->timer);
        iounmap(r8a66597->reg);
 +      if (r8a66597->pdata->sudmac)
@@ -463,10 +461,10 @@ index fd9ce15..7f37a2a 100644
        free_irq(platform_get_irq(pdev, 0), r8a66597);
        r8a66597_free_request(&r8a66597->ep[0].ep, r8a66597->ep0_req);
  #ifdef CONFIG_HAVE_CLK
-@@ -1557,6 +1857,26 @@ static void nop_completion(struct usb_ep *ep, struct usb_request *r)
+@@ -1557,6 +1857,26 @@ static void nop_completion(struct usb_ep
  {
  }
-
 +static int __init r8a66597_sudmac_ioremap(struct r8a66597 *r8a66597,
 +                                        struct platform_device *pdev)
 +{
@@ -490,7 +488,7 @@ index fd9ce15..7f37a2a 100644
  static int __init r8a66597_probe(struct platform_device *pdev)
  {
  #ifdef CONFIG_HAVE_CLK
-@@ -1634,6 +1954,11 @@ static int __init r8a66597_probe(struct platform_device *pdev)
+@@ -1634,6 +1954,11 @@ static int __init r8a66597_probe(struct
                clk_enable(r8a66597->clk);
        }
  #endif
@@ -499,10 +497,10 @@ index fd9ce15..7f37a2a 100644
 +              if (ret < 0)
 +                      goto clean_up2;
 +      }
-
        disable_controller(r8a66597); /* make sure controller is disabled */
-
-@@ -1666,7 +1991,6 @@ static int __init r8a66597_probe(struct platform_device *pdev)
+@@ -1666,7 +1991,6 @@ static int __init r8a66597_probe(struct
        r8a66597->ep[0].fifoaddr = CFIFO;
        r8a66597->ep[0].fifosel = CFIFOSEL;
        r8a66597->ep[0].fifoctr = CFIFOCTR;
@@ -519,14 +517,12 @@ index fd9ce15..7f37a2a 100644
                if (r8a66597->ep0_req)
                        r8a66597_free_request(&r8a66597->ep[0].ep,
                                                r8a66597->ep0_req);
-diff --git a/drivers/usb/gadget/r8a66597-udc.h b/drivers/usb/gadget/r8a66597-udc.h
-index 832ee59..8e3de61 100644
 --- a/drivers/usb/gadget/r8a66597-udc.h
 +++ b/drivers/usb/gadget/r8a66597-udc.h
 @@ -43,6 +43,7 @@
        ((pipenum >= R8A66597_BASE_PIPENUM_ISOC) && \
         (pipenum < (R8A66597_BASE_PIPENUM_ISOC + R8A66597_MAX_NUM_ISOC)))
-
 +#define r8a66597_is_sudmac(r8a66597)  (r8a66597->pdata->sudmac)
  struct r8a66597_pipe_info {
        u16     pipe;
@@ -536,7 +532,7 @@ index 832ee59..8e3de61 100644
        struct usb_ep           ep;
        struct r8a66597         *r8a66597;
 +      struct r8a66597_dma     *dma;
-
        struct list_head        queue;
        unsigned                busy:1;
 @@ -75,13 +77,20 @@ struct r8a66597_ep {
@@ -553,12 +549,12 @@ index 832ee59..8e3de61 100644
 +      unsigned                used:1;
 +      unsigned                dir:1;  /* 1 = IN(write), 0 = OUT(read) */
  };
-
  struct r8a66597 {
        spinlock_t              lock;
        void __iomem            *reg;
 +      void __iomem            *sudmac_reg;
-
  #ifdef CONFIG_HAVE_CLK
        struct clk *clk;
 @@ -94,6 +103,7 @@ struct r8a66597 {
@@ -566,13 +562,13 @@ index 832ee59..8e3de61 100644
        struct r8a66597_ep      *pipenum2ep[R8A66597_MAX_NUM_PIPE];
        struct r8a66597_ep      *epaddr2ep[16];
 +      struct r8a66597_dma     dma;
-
        struct timer_list       timer;
        struct usb_request      *ep0_req;       /* for internal request */
-@@ -251,7 +261,21 @@ static inline u16 get_xtal_from_pdata(struct r8a66597_platdata *pdata)
+@@ -251,7 +261,21 @@ static inline u16 get_xtal_from_pdata(st
        return clock;
  }
-
 +static inline u32 r8a66597_sudmac_read(struct r8a66597 *r8a66597,
 +                                     unsigned long offset)
 +{
@@ -588,27 +584,25 @@ index 832ee59..8e3de61 100644
  #define get_pipectr_addr(pipenum)     (PIPE1CTR + (pipenum - 1) * 2)
 +#define get_pipetre_addr(pipenum)     (PIPE1TRE + (pipenum - 1) * 4)
 +#define get_pipetrn_addr(pipenum)     (PIPE1TRN + (pipenum - 1) * 4)
-
  #define enable_irq_ready(r8a66597, pipenum)   \
        enable_pipe_irq(r8a66597, pipenum, BRDYENB)
-diff --git a/include/linux/usb/r8a66597.h b/include/linux/usb/r8a66597.h
-index 7cd89e7..1f5ef88 100644
 --- a/include/linux/usb/r8a66597.h
 +++ b/include/linux/usb/r8a66597.h
 @@ -48,6 +48,9 @@ struct r8a66597_platdata {
-
        /* (external controller only) set one = WR0_N shorted to WR1_N */
        unsigned        wr0_shorted_to_wr1:1;
 +
 +      /* set one = using SUDMAC */
 +      unsigned        sudmac:1;
  };
-
  /* Register definitions */
 @@ -417,5 +420,62 @@ struct r8a66597_platdata {
  #define       USBSPD          0x00C0
  #define       RTPORT          0x0001
-
 +/* SUDMAC registers */
 +#define CH0CFG                0x00
 +#define CH1CFG                0x04
@@ -667,11 +661,4 @@ index 7cd89e7..1f5ef88 100644
 +#define CH0ENDC               0x0001 /* b1: Ch0 DMA Transfer End Int Stat Clear */
 +
  #endif /* __LINUX_USB_R8A66597_H */
-
--- 
-1.7.1
-_______________________________________________
-LTSI-dev mailing list
-LTSI-dev@lists.linuxfoundation.org
-https://lists.linuxfoundation.org/mailman/listinfo/ltsi-dev
-
diff --git a/patches.sh7757lcr/drivers-sh-generalize-runtime-pm-platform-stub.patch b/patches.sh7757lcr/drivers-sh-generalize-runtime-pm-platform-stub.patch
new file mode 100644 (file)
index 0000000..f9d1a53
--- /dev/null
@@ -0,0 +1,198 @@
+From ltsi-dev-bounces@lists.linuxfoundation.org Tue Jul 10 22:13:21 2012
+From: "Shimoda, Yoshihiro" <yoshihiro.shimoda.uh@renesas.com>
+Date: Wed, 11 Jul 2012 14:13:16 +0900
+Subject: drivers: sh: Generalize runtime PM platform stub.
+To: ltsi-dev@lists.linuxfoundation.org
+Message-ID: <4FFD0B6C.1060006@renesas.com>
+
+
+>From 11b01cfe8fbb175d81f1049e7c265d5618234357 Mon Sep 17 00:00:00 2001
+From: Paul Mundt <lethal@linux-sh.org>
+Date: Fri, 11 Nov 2011 15:41:50 +0900
+Subject: drivers: sh: Generalize runtime PM platform stub.
+
+The runtime PM platform support stub in use by ARM-based SH/R-Mobile
+platforms contains nothing that's specifically ARM-related and instead of
+wholly generic to anything using the clock framework.
+
+The recent runtime PM changes interact rather badly with the lazy
+disabling of clocks late in the boot process through the clock framework,
+leading to situations where the runtime suspend/resume paths are entered
+without a clock being actively driven due to having been lazily gated
+off.
+
+In order to correct this we can trivially tie in the aforementioned stub
+as a general fallback for all SH platforms that don't presently have
+their own runtime PM implementations (the corner case being SH-based
+SH-Mobile platforms, which have their own stub through the hwblk API --
+which in turn has bitrotted and will be subsequently adapted to use the
+same stub as everyone else), regardless of whether the platforms choose
+to define power domains of their own or not.
+
+This fixes up regressions for clock framework users who also build in
+runtime PM support without any specific power domains of their own, which
+was previously causing the serial console to be lost when warring with
+lazy clock disabling.
+
+Signed-off-by: Paul Mundt <lethal@linux-sh.org>
+(cherry picked from commit 750a7eee7395492960a7aeb3a3a1aa74158ec326)
+Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
+Tested-by: Simon Horman <horms@verge.net.au>
+---
+ arch/arm/mach-shmobile/Makefile     |    2 -
+ arch/arm/mach-shmobile/pm_runtime.c |   59 ------------------------------------
+ drivers/sh/Makefile                 |    8 ++++
+ drivers/sh/pm_runtime.c             |   59 ++++++++++++++++++++++++++++++++++++
+ 4 files changed, 68 insertions(+), 60 deletions(-)
+ delete mode 100644 arch/arm/mach-shmobile/pm_runtime.c
+ create mode 100644 drivers/sh/pm_runtime.c
+
+--- a/arch/arm/mach-shmobile/Makefile
++++ b/arch/arm/mach-shmobile/Makefile
+@@ -3,7 +3,7 @@
+ #
+ # Common objects
+-obj-y                         := timer.o console.o clock.o pm_runtime.o
++obj-y                         := timer.o console.o clock.o
+ # CPU objects
+ obj-$(CONFIG_ARCH_SH7367)     += setup-sh7367.o clock-sh7367.o intc-sh7367.o
+--- a/arch/arm/mach-shmobile/pm_runtime.c
++++ /dev/null
+@@ -1,59 +0,0 @@
+-/*
+- * arch/arm/mach-shmobile/pm_runtime.c
+- *
+- * Runtime PM support code for SuperH Mobile ARM
+- *
+- *  Copyright (C) 2009-2010 Magnus Damm
+- *
+- * This file is subject to the terms and conditions of the GNU General Public
+- * License.  See the file "COPYING" in the main directory of this archive
+- * for more details.
+- */
+-
+-#include <linux/init.h>
+-#include <linux/kernel.h>
+-#include <linux/io.h>
+-#include <linux/pm_runtime.h>
+-#include <linux/pm_clock.h>
+-#include <linux/platform_device.h>
+-#include <linux/clk.h>
+-#include <linux/sh_clk.h>
+-#include <linux/bitmap.h>
+-#include <linux/slab.h>
+-
+-#ifdef CONFIG_PM_RUNTIME
+-
+-static int default_platform_runtime_idle(struct device *dev)
+-{
+-      /* suspend synchronously to disable clocks immediately */
+-      return pm_runtime_suspend(dev);
+-}
+-
+-static struct dev_pm_domain default_pm_domain = {
+-      .ops = {
+-              .runtime_suspend = pm_clk_suspend,
+-              .runtime_resume = pm_clk_resume,
+-              .runtime_idle = default_platform_runtime_idle,
+-              USE_PLATFORM_PM_SLEEP_OPS
+-      },
+-};
+-
+-#define DEFAULT_PM_DOMAIN_PTR (&default_pm_domain)
+-
+-#else
+-
+-#define DEFAULT_PM_DOMAIN_PTR NULL
+-
+-#endif /* CONFIG_PM_RUNTIME */
+-
+-static struct pm_clk_notifier_block platform_bus_notifier = {
+-      .pm_domain = DEFAULT_PM_DOMAIN_PTR,
+-      .con_ids = { NULL, },
+-};
+-
+-static int __init sh_pm_runtime_init(void)
+-{
+-      pm_clk_add_notifier(&platform_bus_type, &platform_bus_notifier);
+-      return 0;
+-}
+-core_initcall(sh_pm_runtime_init);
+--- a/drivers/sh/Makefile
++++ b/drivers/sh/Makefile
+@@ -7,3 +7,11 @@ obj-$(CONFIG_HAVE_CLK)                += clk/
+ obj-$(CONFIG_MAPLE)           += maple/
+ obj-$(CONFIG_SUPERHYWAY)      += superhyway/
+ obj-$(CONFIG_GENERIC_GPIO)    += pfc.o
++
++#
++# For the moment we only use this framework for ARM-based SH/R-Mobile
++# platforms and generic SH. SH-based SH-Mobile platforms are still using
++# an older framework that is pending up-porting, at which point this
++# special casing can go away.
++#
++obj-$(CONFIG_SUPERH)$(CONFIG_ARCH_SHMOBILE)   += pm_runtime.o
+--- /dev/null
++++ b/drivers/sh/pm_runtime.c
+@@ -0,0 +1,59 @@
++/*
++ * arch/arm/mach-shmobile/pm_runtime.c
++ *
++ * Runtime PM support code for SuperH Mobile ARM
++ *
++ *  Copyright (C) 2009-2010 Magnus Damm
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License.  See the file "COPYING" in the main directory of this archive
++ * for more details.
++ */
++
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/io.h>
++#include <linux/pm_runtime.h>
++#include <linux/pm_clock.h>
++#include <linux/platform_device.h>
++#include <linux/clk.h>
++#include <linux/sh_clk.h>
++#include <linux/bitmap.h>
++#include <linux/slab.h>
++
++#ifdef CONFIG_PM_RUNTIME
++
++static int default_platform_runtime_idle(struct device *dev)
++{
++      /* suspend synchronously to disable clocks immediately */
++      return pm_runtime_suspend(dev);
++}
++
++static struct dev_pm_domain default_pm_domain = {
++      .ops = {
++              .runtime_suspend = pm_clk_suspend,
++              .runtime_resume = pm_clk_resume,
++              .runtime_idle = default_platform_runtime_idle,
++              USE_PLATFORM_PM_SLEEP_OPS
++      },
++};
++
++#define DEFAULT_PM_DOMAIN_PTR (&default_pm_domain)
++
++#else
++
++#define DEFAULT_PM_DOMAIN_PTR NULL
++
++#endif /* CONFIG_PM_RUNTIME */
++
++static struct pm_clk_notifier_block platform_bus_notifier = {
++      .pm_domain = DEFAULT_PM_DOMAIN_PTR,
++      .con_ids = { NULL, },
++};
++
++static int __init sh_pm_runtime_init(void)
++{
++      pm_clk_add_notifier(&platform_bus_type, &platform_bus_notifier);
++      return 0;
++}
++core_initcall(sh_pm_runtime_init);
diff --git a/patches.sh7757lcr/sh-also-without-pm_runtime-pm_runtime.o-must-be-built.patch b/patches.sh7757lcr/sh-also-without-pm_runtime-pm_runtime.o-must-be-built.patch
new file mode 100644 (file)
index 0000000..32a8aee
--- /dev/null
@@ -0,0 +1,41 @@
+From ltsi-dev-bounces@lists.linuxfoundation.org Tue Jul 10 22:13:24 2012
+From: "Shimoda, Yoshihiro" <yoshihiro.shimoda.uh@renesas.com>
+Date: Wed, 11 Jul 2012 14:13:20 +0900
+Subject: sh: also without PM_RUNTIME pm_runtime.o must be built
+To: ltsi-dev@lists.linuxfoundation.org
+Message-ID: <4FFD0B70.1010608@renesas.com>
+
+
+>From c219336ade79e8ce6f70b527c20391a239278ce3 Mon Sep 17 00:00:00 2001
+From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+Date: Tue, 10 Jan 2012 16:04:11 +0100
+Subject: sh: also without PM_RUNTIME pm_runtime.o must be built
+
+When CONFIG_PM_RUNTIME is off, drivers/sh/pm_runtime.o still has to be
+built on sh platforms, because then it provides means to statically
+switch on device PM clocks.
+
+Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+Signed-off-by: Paul Mundt <lethal@linux-sh.org>
+(cherry picked from commit d3442b2bb7ce4089fadcf483b8ae9766ab480238)
+Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
+Tested-by: Simon Horman <horms@verge.net.au>
+---
+ drivers/sh/Makefile |    9 +--------
+ 1 file changed, 1 insertion(+), 8 deletions(-)
+
+--- a/drivers/sh/Makefile
++++ b/drivers/sh/Makefile
+@@ -7,11 +7,4 @@ obj-$(CONFIG_HAVE_CLK)                += clk/
+ obj-$(CONFIG_MAPLE)           += maple/
+ obj-$(CONFIG_SUPERHYWAY)      += superhyway/
+ obj-$(CONFIG_GENERIC_GPIO)    += pfc.o
+-
+-#
+-# For the moment we only use this framework for ARM-based SH/R-Mobile
+-# platforms and generic SH. SH-based SH-Mobile platforms are still using
+-# an older framework that is pending up-porting, at which point this
+-# special casing can go away.
+-#
+-obj-$(CONFIG_SUPERH)$(CONFIG_ARCH_SHMOBILE)   += pm_runtime.o
++obj-y                         += pm_runtime.o
diff --git a/patches.sh7757lcr/sh-fix-clock-sh7757-for-the-latest-sh_mobile_sdhi-driver.patch b/patches.sh7757lcr/sh-fix-clock-sh7757-for-the-latest-sh_mobile_sdhi-driver.patch
new file mode 100644 (file)
index 0000000..89f047d
--- /dev/null
@@ -0,0 +1,41 @@
+From ltsi-dev-bounces@lists.linuxfoundation.org Tue Jul 10 22:14:44 2012
+From: "Shimoda, Yoshihiro" <yoshihiro.shimoda.uh@renesas.com>
+Date: Wed, 11 Jul 2012 14:13:25 +0900
+Subject: sh: fix clock-sh7757 for the latest sh_mobile_sdhi driver
+To: ltsi-dev@lists.linuxfoundation.org
+Message-ID: <4FFD0B75.1040907@renesas.com>
+
+
+>From 87fa88ba8cdcd7425e8d941fef3e5a904da37cc8 Mon Sep 17 00:00:00 2001
+From: Shimoda, Yoshihiro <yoshihiro.shimoda.uh@renesas.com>
+Date: Wed, 4 Apr 2012 11:56:07 +0900
+Subject: sh: fix clock-sh7757 for the latest sh_mobile_sdhi driver
+
+The commit 996bc8aebd2cd5b6d4c5d85085f171fa2447f364 (mmc: sh_mobile_sdhi:
+do not manage PM clocks manually) modified the sh_mobile_sdhi driver to
+remove the clk_enable/clk_disable. So, we need to change
+the "CLKDEV_CON_ID" to "CLKDEV_DEV_ID".
+
+If we don't change this, we will see the following error from the driver:
+    sh_mobile_sdhi sh_mobile_sdhi.0: timeout waiting for hardware interrupt (CMD52)
+
+Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
+Signed-off-by: Paul Mundt <lethal@linux-sh.org>
+(cherry picked from commit a052d2c31b7b87e9b4bdee634af666b5e830e56f)
+Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
+Tested-by: Simon Horman <horms@verge.net.au>
+---
+ arch/sh/kernel/cpu/sh4a/clock-sh7757.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/sh/kernel/cpu/sh4a/clock-sh7757.c
++++ b/arch/sh/kernel/cpu/sh4a/clock-sh7757.c
+@@ -113,7 +113,7 @@ static struct clk_lookup lookups[] = {
+       CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]),
+       /* MSTP32 clocks */
+-      CLKDEV_CON_ID("sdhi0", &mstp_clks[MSTP004]),
++      CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP004]),
+       CLKDEV_CON_ID("riic0", &mstp_clks[MSTP000]),
+       CLKDEV_CON_ID("riic1", &mstp_clks[MSTP000]),
+       CLKDEV_CON_ID("riic2", &mstp_clks[MSTP000]),
diff --git a/series b/series
index 1f2fdc5db9fddf80a5c2d17161b26da1845fc76b..e83c375df445758712c943eca3f0f014eb607b62 100644 (file)
--- a/series
+++ b/series
@@ -904,6 +904,9 @@ patches.sh7757lcr/018-sh-fix-the-sh_mmcif_plat_data-in-board-sh7757lcr.patch
 patches.sh7757lcr/019-sh-modify-a-resource-of-sh_eth_giga1_resources-in-board-sh7757lcr.patch
 patches.sh7757lcr/020-sh-kexec-register-crashk_res.patch
 patches.sh7757lcr/021-sh-kexec-add-physical_start.patch
+patches.sh7757lcr/drivers-sh-generalize-runtime-pm-platform-stub.patch
+patches.sh7757lcr/sh-also-without-pm_runtime-pm_runtime.o-must-be-built.patch
+patches.sh7757lcr/sh-fix-clock-sh7757-for-the-latest-sh_mobile_sdhi-driver.patch
 
 
 patches.r8a66597-udc/001-usb-gadget-add-platform-module-alias-where-it-is-missing.patch