Re: [PATCH v2 1/2] mfd: viperboard: allocate I/O buffer separately

2014-09-23 Thread Johan Hovold
On Mon, Sep 22, 2014 at 10:39:18PM +0300, Octavian Purdila wrote:
 Currently the I/O buffer is allocated part of the device status
 structure, potentially sharing the same cache line with other members
 in this structure.
 
 Allocate the buffer separately, to avoid the I/O operations corrupting
 the device status structure due to cache line sharing.
 
 Compiled tested only as I don't have access to hardware.
 
 Signed-off-by: Octavian Purdila octavian.purd...@intel.com
 ---
  drivers/mfd/viperboard.c   | 8 
  include/linux/mfd/viperboard.h | 2 +-
  2 files changed, 9 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/mfd/viperboard.c b/drivers/mfd/viperboard.c
 index e00f534..5f62f4e 100644
 --- a/drivers/mfd/viperboard.c
 +++ b/drivers/mfd/viperboard.c
 @@ -64,6 +64,12 @@ static int vprbrd_probe(struct usb_interface *interface,
   return -ENOMEM;
   }
  
 + vb-buf = kzalloc(sizeof(struct vprbrd_i2c_write_msg), GFP_KERNEL);
 + if (vb-buf == NULL) {
 + ret = -ENOMEM;
 + goto error;

This will cause a kref imbalance as you have a usb_put_dev in error,
but haven't done the get yet.

 + }
 +
   mutex_init(vb-lock);
  
   vb-usb_dev = usb_get_dev(interface_to_usbdev(interface));

Here's the get.

Johan
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/2] mfd: viperboard: allocate I/O buffer separately

2014-09-23 Thread Johan Hovold
On Tue, Sep 23, 2014 at 09:35:41AM +0200, Johan Hovold wrote:
 On Mon, Sep 22, 2014 at 10:39:18PM +0300, Octavian Purdila wrote:
  Currently the I/O buffer is allocated part of the device status
  structure, potentially sharing the same cache line with other members
  in this structure.
  
  Allocate the buffer separately, to avoid the I/O operations corrupting
  the device status structure due to cache line sharing.
  
  Compiled tested only as I don't have access to hardware.
  
  Signed-off-by: Octavian Purdila octavian.purd...@intel.com
  ---
   drivers/mfd/viperboard.c   | 8 
   include/linux/mfd/viperboard.h | 2 +-
   2 files changed, 9 insertions(+), 1 deletion(-)
  
  diff --git a/drivers/mfd/viperboard.c b/drivers/mfd/viperboard.c
  index e00f534..5f62f4e 100644
  --- a/drivers/mfd/viperboard.c
  +++ b/drivers/mfd/viperboard.c
  @@ -64,6 +64,12 @@ static int vprbrd_probe(struct usb_interface *interface,
  return -ENOMEM;
  }
   
  +   vb-buf = kzalloc(sizeof(struct vprbrd_i2c_write_msg), GFP_KERNEL);
  +   if (vb-buf == NULL) {
  +   ret = -ENOMEM;
  +   goto error;
 
 This will cause a kref imbalance as you have a usb_put_dev in error,
 but haven't done the get yet.

Nevermind. This isn't problem as the usb device is null.

Haven't had my morning coffee yet. ;)

Johan
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/2] mfd: viperboard: allocate I/O buffer separately

2014-09-23 Thread Johan Hovold
On Mon, Sep 22, 2014 at 10:39:18PM +0300, Octavian Purdila wrote:
 Currently the I/O buffer is allocated part of the device status
 structure, potentially sharing the same cache line with other members
 in this structure.
 
 Allocate the buffer separately, to avoid the I/O operations corrupting
 the device status structure due to cache line sharing.
 
 Compiled tested only as I don't have access to hardware.
 
 Signed-off-by: Octavian Purdila octavian.purd...@intel.com

Reviewed-by: Johan Hovold jo...@kernel.org

 ---
  drivers/mfd/viperboard.c   | 8 
  include/linux/mfd/viperboard.h | 2 +-
  2 files changed, 9 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/mfd/viperboard.c b/drivers/mfd/viperboard.c
 index e00f534..5f62f4e 100644
 --- a/drivers/mfd/viperboard.c
 +++ b/drivers/mfd/viperboard.c
 @@ -64,6 +64,12 @@ static int vprbrd_probe(struct usb_interface *interface,
   return -ENOMEM;
   }
  
 + vb-buf = kzalloc(sizeof(struct vprbrd_i2c_write_msg), GFP_KERNEL);
 + if (vb-buf == NULL) {
 + ret = -ENOMEM;
 + goto error;
 + }
 +
   mutex_init(vb-lock);
  
   vb-usb_dev = usb_get_dev(interface_to_usbdev(interface));
 @@ -105,6 +111,7 @@ static int vprbrd_probe(struct usb_interface *interface,
  error:
   if (vb) {
   usb_put_dev(vb-usb_dev);
 + kfree(vb-buf);
   kfree(vb);
   }
  
 @@ -118,6 +125,7 @@ static void vprbrd_disconnect(struct usb_interface 
 *interface)
   mfd_remove_devices(interface-dev);
   usb_set_intfdata(interface, NULL);
   usb_put_dev(vb-usb_dev);
 + kfree(vb-buf);
   kfree(vb);
  
   dev_dbg(interface-dev, disconnected\n);
 diff --git a/include/linux/mfd/viperboard.h b/include/linux/mfd/viperboard.h
 index 1934528..af928d0 100644
 --- a/include/linux/mfd/viperboard.h
 +++ b/include/linux/mfd/viperboard.h
 @@ -103,7 +103,7 @@ struct vprbrd_i2c_addr_msg {
  struct vprbrd {
   struct usb_device *usb_dev; /* the usb device for this device */
   struct mutex lock;
 - u8 buf[sizeof(struct vprbrd_i2c_write_msg)];
 + u8 *buf;
   struct platform_device pdev;
  };
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH net] r8152: fix the carrier off when autoresuming

2014-09-23 Thread Hayes Wang
netif_carrier_off would be called when autoresuming, even though
the cable is plugged. This causes some applications do relative
actions when detecting the carrier off. Keep the status of the
carrier, and let it be modified when the linking change occurs.

Signed-off-by: Hayes Wang hayesw...@realtek.com
---
 drivers/net/usb/r8152.c | 52 +
 1 file changed, 35 insertions(+), 17 deletions(-)

diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index 74760e8..e039442 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -1949,10 +1949,34 @@ static void rxdy_gated_en(struct r8152 *tp, bool enable)
ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data);
 }
 
+static int rtl_start_rx(struct r8152 *tp)
+{
+   int i, ret = 0;
+
+   INIT_LIST_HEAD(tp-rx_done);
+   for (i = 0; i  RTL8152_MAX_RX; i++) {
+   INIT_LIST_HEAD(tp-rx_info[i].list);
+   ret = r8152_submit_rx(tp, tp-rx_info[i], GFP_KERNEL);
+   if (ret)
+   break;
+   }
+
+   return ret;
+}
+
+static int rtl_stop_rx(struct r8152 *tp)
+{
+   int i;
+
+   for (i = 0; i  RTL8152_MAX_RX; i++)
+   usb_kill_urb(tp-rx_info[i].urb);
+
+   return 0;
+}
+
 static int rtl_enable(struct r8152 *tp)
 {
u32 ocp_data;
-   int i, ret;
 
r8152b_reset_packet_filter(tp);
 
@@ -1962,14 +1986,7 @@ static int rtl_enable(struct r8152 *tp)
 
rxdy_gated_en(tp, false);
 
-   INIT_LIST_HEAD(tp-rx_done);
-   ret = 0;
-   for (i = 0; i  RTL8152_MAX_RX; i++) {
-   INIT_LIST_HEAD(tp-rx_info[i].list);
-   ret |= r8152_submit_rx(tp, tp-rx_info[i], GFP_KERNEL);
-   }
-
-   return ret;
+   return rtl_start_rx(tp);
 }
 
 static int rtl8152_enable(struct r8152 *tp)
@@ -2053,8 +2070,7 @@ static void rtl_disable(struct r8152 *tp)
mdelay(1);
}
 
-   for (i = 0; i  RTL8152_MAX_RX; i++)
-   usb_kill_urb(tp-rx_info[i].urb);
+   rtl_stop_rx(tp);
 
rtl8152_nic_reset(tp);
 }
@@ -3083,13 +3099,14 @@ static int rtl8152_suspend(struct usb_interface *intf, 
pm_message_t message)
clear_bit(WORK_ENABLE, tp-flags);
usb_kill_urb(tp-intr_urb);
cancel_delayed_work_sync(tp-schedule);
+   tasklet_disable(tp-tl);
if (test_bit(SELECTIVE_SUSPEND, tp-flags)) {
+   rtl_stop_rx(tp);
rtl_runtime_suspend_enable(tp, true);
} else {
-   tasklet_disable(tp-tl);
tp-rtl_ops.down(tp);
-   tasklet_enable(tp-tl);
}
+   tasklet_enable(tp-tl);
}
 
return 0;
@@ -3108,17 +3125,18 @@ static int rtl8152_resume(struct usb_interface *intf)
if (test_bit(SELECTIVE_SUSPEND, tp-flags)) {
rtl_runtime_suspend_enable(tp, false);
clear_bit(SELECTIVE_SUSPEND, tp-flags);
+   set_bit(WORK_ENABLE, tp-flags);
if (tp-speed  LINK_STATUS)
-   tp-rtl_ops.disable(tp);
+   rtl_start_rx(tp);
} else {
tp-rtl_ops.up(tp);
rtl8152_set_speed(tp, AUTONEG_ENABLE,
tp-mii.supports_gmii ? SPEED_1000 : SPEED_100,
DUPLEX_FULL);
+   tp-speed = 0;
+   netif_carrier_off(tp-netdev);
+   set_bit(WORK_ENABLE, tp-flags);
}
-   tp-speed = 0;
-   netif_carrier_off(tp-netdev);
-   set_bit(WORK_ENABLE, tp-flags);
usb_submit_urb(tp-intr_urb, GFP_KERNEL);
}
 
-- 
1.9.3

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 1/7] usb: move the OTG state from the USB PHY to the OTG structure

2014-09-23 Thread Antoine Tenart
Before using the PHY framework instead of the USB PHY one, we need to
move the OTG state into another place, since it won't be available when
USB PHY isn't used. This patch moves the OTG state into the OTG
structure, and makes all the needed modifications in the drivers
using the OTG state.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
Acked-by: Peter Chen peter.c...@freescale.com
---
 drivers/phy/phy-omap-usb2.c |  8 +---
 drivers/usb/chipidea/debug.c|  2 +-
 drivers/usb/chipidea/otg_fsm.c  | 12 ++---
 drivers/usb/common/usb-otg-fsm.c|  8 ++--
 drivers/usb/host/ohci-omap.c|  2 +-
 drivers/usb/musb/am35x.c| 28 +--
 drivers/usb/musb/blackfin.c | 18 +++
 drivers/usb/musb/da8xx.c| 28 +--
 drivers/usb/musb/davinci.c  | 18 +++
 drivers/usb/musb/musb_core.c| 94 ++---
 drivers/usb/musb/musb_dsps.c| 26 +-
 drivers/usb/musb/musb_gadget.c  | 36 +++---
 drivers/usb/musb/musb_host.c|  8 ++--
 drivers/usb/musb/musb_virthub.c | 22 -
 drivers/usb/musb/omap2430.c | 30 ++--
 drivers/usb/musb/tusb6010.c | 40 
 drivers/usb/musb/ux500.c| 10 ++--
 drivers/usb/phy/phy-ab8500-usb.c| 10 ++--
 drivers/usb/phy/phy-fsl-usb.c   | 10 ++--
 drivers/usb/phy/phy-generic.c   |  4 +-
 drivers/usb/phy/phy-gpio-vbus-usb.c | 10 ++--
 drivers/usb/phy/phy-msm-usb.c   | 34 +++---
 drivers/usb/phy/phy-mv-usb.c| 46 +-
 include/linux/usb/otg.h |  2 +
 include/linux/usb/phy.h |  1 -
 25 files changed, 252 insertions(+), 255 deletions(-)

diff --git a/drivers/phy/phy-omap-usb2.c b/drivers/phy/phy-omap-usb2.c
index 93d78359246c..3bb54e55c762 100644
--- a/drivers/phy/phy-omap-usb2.c
+++ b/drivers/phy/phy-omap-usb2.c
@@ -80,11 +80,9 @@ static int omap_usb_start_srp(struct usb_otg *otg)
 
 static int omap_usb_set_host(struct usb_otg *otg, struct usb_bus *host)
 {
-   struct usb_phy  *phy = otg-phy;
-
otg-host = host;
if (!host)
-   phy-state = OTG_STATE_UNDEFINED;
+   otg-state = OTG_STATE_UNDEFINED;
 
return 0;
 }
@@ -92,11 +90,9 @@ static int omap_usb_set_host(struct usb_otg *otg, struct 
usb_bus *host)
 static int omap_usb_set_peripheral(struct usb_otg *otg,
struct usb_gadget *gadget)
 {
-   struct usb_phy  *phy = otg-phy;
-
otg-gadget = gadget;
if (!gadget)
-   phy-state = OTG_STATE_UNDEFINED;
+   otg-state = OTG_STATE_UNDEFINED;
 
return 0;
 }
diff --git a/drivers/usb/chipidea/debug.c b/drivers/usb/chipidea/debug.c
index 795d6538d630..8878eea38d44 100644
--- a/drivers/usb/chipidea/debug.c
+++ b/drivers/usb/chipidea/debug.c
@@ -220,7 +220,7 @@ static int ci_otg_show(struct seq_file *s, void *unused)
 
/* -- State - */
seq_printf(s, OTG state: %s\n\n,
-   usb_otg_state_string(ci-transceiver-state));
+   usb_otg_state_string(ci-transceiver-otg.state));
 
/* -- State Machine Variables - */
seq_printf(s, a_bus_drop: %d\n, fsm-a_bus_drop);
diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c
index caaabc58021e..8cb2508a6b71 100644
--- a/drivers/usb/chipidea/otg_fsm.c
+++ b/drivers/usb/chipidea/otg_fsm.c
@@ -328,7 +328,7 @@ static void b_ssend_srp_tmout_func(void *ptr, unsigned long 
indicator)
set_tmout(ci, indicator);
 
/* only vbus fall below B_sess_vld in b_idle state */
-   if (ci-transceiver-state == OTG_STATE_B_IDLE)
+   if (ci-fsm.otg-state == OTG_STATE_B_IDLE)
ci_otg_queue_work(ci);
 }
 
@@ -582,11 +582,11 @@ int ci_otg_fsm_work(struct ci_hdrc *ci)
 * when there is no gadget class driver
 */
if (ci-fsm.id  !(ci-driver) 
-   ci-transceiver-state  OTG_STATE_A_IDLE)
+   ci-fsm.otg-state  OTG_STATE_A_IDLE)
return 0;
 
if (otg_statemachine(ci-fsm)) {
-   if (ci-transceiver-state == OTG_STATE_A_IDLE) {
+   if (ci-fsm.otg-state == OTG_STATE_A_IDLE) {
/*
 * Further state change for cases:
 * a_idle to b_idle; or
@@ -600,7 +600,7 @@ int ci_otg_fsm_work(struct ci_hdrc *ci)
ci_otg_queue_work(ci);
if (ci-id_event)
ci-id_event = false;
-   } else if (ci-transceiver-state == OTG_STATE_B_IDLE) {
+   } else if (ci-fsm.otg-state == OTG_STATE_B_IDLE) {
if (ci-fsm.b_sess_vld) {
ci-fsm.power_up = 0;
/*
@@ -627,7 +627,7 @@ static void ci_otg_fsm_event(struct ci_hdrc *ci)
otg_bsess_vld = hw_read_otgsc(ci, OTGSC_BSV);

[PATCH v6 2/7] usb: rename phy to usb_phy in OTG

2014-09-23 Thread Antoine Tenart
This patch prepares the introduction of the generic PHY support in the
USB OTG common functions. The USB PHY member of the OTG structure is
renamed to 'usb_phy' and modifications are done in all drivers accessing
it. Renaming this pointer will allow to keep the compatibility for USB
PHY drivers.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
---
 drivers/phy/phy-omap-usb2.c |  6 ++--
 drivers/usb/chipidea/otg_fsm.c  |  2 +-
 drivers/usb/phy/phy-ab8500-usb.c|  6 ++--
 drivers/usb/phy/phy-fsl-usb.c   | 13 
 drivers/usb/phy/phy-generic.c   |  2 +-
 drivers/usb/phy/phy-gpio-vbus-usb.c |  4 +--
 drivers/usb/phy/phy-isp1301-omap.c  | 10 +++---
 drivers/usb/phy/phy-msm-usb.c   | 61 +++--
 drivers/usb/phy/phy-mv-usb.c|  4 +--
 drivers/usb/phy/phy-samsung-usb2.c  |  2 +-
 drivers/usb/phy/phy-tahvo.c |  8 +++--
 drivers/usb/phy/phy-ulpi.c  |  6 ++--
 include/linux/usb/otg.h |  2 +-
 13 files changed, 66 insertions(+), 60 deletions(-)

diff --git a/drivers/phy/phy-omap-usb2.c b/drivers/phy/phy-omap-usb2.c
index 3bb54e55c762..a454042ddb06 100644
--- a/drivers/phy/phy-omap-usb2.c
+++ b/drivers/phy/phy-omap-usb2.c
@@ -60,7 +60,7 @@ EXPORT_SYMBOL_GPL(omap_usb2_set_comparator);
 
 static int omap_usb_set_vbus(struct usb_otg *otg, bool enabled)
 {
-   struct omap_usb *phy = phy_to_omapusb(otg-phy);
+   struct omap_usb *phy = phy_to_omapusb(otg-usb_phy);
 
if (!phy-comparator)
return -ENODEV;
@@ -70,7 +70,7 @@ static int omap_usb_set_vbus(struct usb_otg *otg, bool 
enabled)
 
 static int omap_usb_start_srp(struct usb_otg *otg)
 {
-   struct omap_usb *phy = phy_to_omapusb(otg-phy);
+   struct omap_usb *phy = phy_to_omapusb(otg-usb_phy);
 
if (!phy-comparator)
return -ENODEV;
@@ -255,7 +255,7 @@ static int omap_usb2_probe(struct platform_device *pdev)
otg-set_vbus   = omap_usb_set_vbus;
if (phy_data-flags  OMAP_USB2_HAS_START_SRP)
otg-start_srp  = omap_usb_start_srp;
-   otg-phy= phy-phy;
+   otg-usb_phy= phy-phy;
 
platform_set_drvdata(pdev, phy);
 
diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c
index 8cb2508a6b71..d8490e758a74 100644
--- a/drivers/usb/chipidea/otg_fsm.c
+++ b/drivers/usb/chipidea/otg_fsm.c
@@ -788,7 +788,7 @@ int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci)
return -ENOMEM;
}
 
-   otg-phy = ci-transceiver;
+   otg-usb_phy = ci-transceiver;
otg-gadget = ci-gadget;
ci-fsm.otg = otg;
ci-transceiver-otg = ci-fsm.otg;
diff --git a/drivers/usb/phy/phy-ab8500-usb.c b/drivers/usb/phy/phy-ab8500-usb.c
index 2d5250143ce1..3a802fa7dae2 100644
--- a/drivers/usb/phy/phy-ab8500-usb.c
+++ b/drivers/usb/phy/phy-ab8500-usb.c
@@ -1056,7 +1056,7 @@ static int ab8500_usb_set_peripheral(struct usb_otg *otg,
if (!otg)
return -ENODEV;
 
-   ab = phy_to_ab(otg-phy);
+   ab = phy_to_ab(otg-usb_phy);
 
ab-phy.otg-gadget = gadget;
 
@@ -1080,7 +1080,7 @@ static int ab8500_usb_set_host(struct usb_otg *otg, 
struct usb_bus *host)
if (!otg)
return -ENODEV;
 
-   ab = phy_to_ab(otg-phy);
+   ab = phy_to_ab(otg-usb_phy);
 
ab-phy.otg-host = host;
 
@@ -1382,7 +1382,7 @@ static int ab8500_usb_probe(struct platform_device *pdev)
ab-phy.set_power   = ab8500_usb_set_power;
ab-phy.otg-state  = OTG_STATE_UNDEFINED;
 
-   otg-phy= ab-phy;
+   otg-usb_phy= ab-phy;
otg-set_host   = ab8500_usb_set_host;
otg-set_peripheral = ab8500_usb_set_peripheral;
 
diff --git a/drivers/usb/phy/phy-fsl-usb.c b/drivers/usb/phy/phy-fsl-usb.c
index a22f88fb8176..b4cc341094ac 100644
--- a/drivers/usb/phy/phy-fsl-usb.c
+++ b/drivers/usb/phy/phy-fsl-usb.c
@@ -499,7 +499,8 @@ int fsl_otg_start_host(struct otg_fsm *fsm, int on)
 {
struct usb_otg *otg = fsm-otg;
struct device *dev;
-   struct fsl_otg *otg_dev = container_of(otg-phy, struct fsl_otg, phy);
+   struct fsl_otg *otg_dev =
+   container_of(otg-usb_phy, struct fsl_otg, phy);
u32 retval = 0;
 
if (!otg-host)
@@ -594,7 +595,7 @@ static int fsl_otg_set_host(struct usb_otg *otg, struct 
usb_bus *host)
if (!otg)
return -ENODEV;
 
-   otg_dev = container_of(otg-phy, struct fsl_otg, phy);
+   otg_dev = container_of(otg-usb_phy, struct fsl_otg, phy);
if (otg_dev != fsl_otg_dev)
return -ENODEV;
 
@@ -644,7 +645,7 @@ static int fsl_otg_set_peripheral(struct usb_otg *otg,
if (!otg)
return -ENODEV;
 
-   otg_dev = container_of(otg-phy, struct fsl_otg, phy);
+   otg_dev = container_of(otg-usb_phy, struct fsl_otg, phy);
VDBG(otg_dev 0x%x\n, 

[PATCH v6 6/7] usb: chipidea: move usb_otg into struct ci_hdrc

2014-09-23 Thread Antoine Tenart
Move the usb_otg member from struct usb_phy to struct ci_hdrc. Rework
its initialization taking in account this modification.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
Acked-by: Peter Chen peter.c...@freescale.com
---
 drivers/usb/chipidea/ci.h  |  1 +
 drivers/usb/chipidea/debug.c   |  2 +-
 drivers/usb/chipidea/host.c|  5 +++--
 drivers/usb/chipidea/otg_fsm.c | 16 +++-
 4 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
index b2caa1772712..dac5ab6adfa2 100644
--- a/drivers/usb/chipidea/ci.h
+++ b/drivers/usb/chipidea/ci.h
@@ -177,6 +177,7 @@ struct ci_hdrc {
struct ci_role_driver   *roles[CI_ROLE_END];
enum ci_rolerole;
boolis_otg;
+   struct usb_otg  otg;
struct otg_fsm  fsm;
struct ci_otg_fsm_timer_list*fsm_timer;
struct work_struct  work;
diff --git a/drivers/usb/chipidea/debug.c b/drivers/usb/chipidea/debug.c
index 8f437e1512fa..999e9d683d7a 100644
--- a/drivers/usb/chipidea/debug.c
+++ b/drivers/usb/chipidea/debug.c
@@ -220,7 +220,7 @@ static int ci_otg_show(struct seq_file *s, void *unused)
 
/* -- State - */
seq_printf(s, OTG state: %s\n\n,
-   usb_otg_state_string(ci-usb_phy-otg.state));
+  usb_otg_state_string(ci-otg.state));
 
/* -- State Machine Variables - */
seq_printf(s, a_bus_drop: %d\n, fsm-a_bus_drop);
diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c
index 0b67d78dd953..4fcebb6a6d14 100644
--- a/drivers/usb/chipidea/host.c
+++ b/drivers/usb/chipidea/host.c
@@ -85,10 +85,11 @@ static int host_start(struct ci_hdrc *ci)
if (ret) {
goto disable_reg;
} else {
-   struct usb_otg *otg = ci-usb_phy-otg;
+   struct usb_otg *otg = ci-otg;
 
ci-hcd = hcd;
-   if (otg) {
+
+   if (ci_otg_is_fsm_mode(ci)) {
otg-host = hcd-self;
hcd-self.otg_port = 1;
}
diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c
index 8a64ce87364e..862d7cb01b92 100644
--- a/drivers/usb/chipidea/otg_fsm.c
+++ b/drivers/usb/chipidea/otg_fsm.c
@@ -778,20 +778,10 @@ void ci_hdrc_otg_fsm_start(struct ci_hdrc *ci)
 int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci)
 {
int retval = 0;
-   struct usb_otg *otg;
 
-   otg = devm_kzalloc(ci-dev,
-   sizeof(struct usb_otg), GFP_KERNEL);
-   if (!otg) {
-   dev_err(ci-dev,
-   Failed to allocate usb_otg structure for ci hdrc otg!\n);
-   return -ENOMEM;
-   }
-
-   otg-usb_phy = ci-usb_phy;
-   otg-gadget = ci-gadget;
-   ci-fsm.otg = otg;
-   ci-usb_phy-otg = ci-fsm.otg;
+   ci-otg.usb_phy = ci-usb_phy;
+   ci-otg.gadget = ci-gadget;
+   ci-fsm.otg = ci-otg;
ci-fsm.power_up = 1;
ci-fsm.id = hw_read_otgsc(ci, OTGSC_ID) ? 1 : 0;
ci-fsm.otg-state = OTG_STATE_UNDEFINED;
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 3/7] usb: add support to the generic PHY framework in OTG

2014-09-23 Thread Antoine Tenart
This patch adds support of the PHY framework in OTG and keeps the USB
PHY compatibility. Here the only modification is to add PHY member in
the OTG structure, along with the USB PHY one.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
---
 include/linux/usb/otg.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
index 978fbbb0e266..52661c5da690 100644
--- a/include/linux/usb/otg.h
+++ b/include/linux/usb/otg.h
@@ -9,11 +9,14 @@
 #ifndef __LINUX_USB_OTG_H
 #define __LINUX_USB_OTG_H
 
+#include linux/phy/phy.h
 #include linux/usb/phy.h
 
 struct usb_otg {
u8  default_a;
 
+   struct phy  *phy;
+   /* old usb_phy interface */
struct usb_phy  *usb_phy;
struct usb_bus  *host;
struct usb_gadget   *gadget;
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 4/7] usb: allow to supply the PHY in the drivers when using HCD

2014-09-23 Thread Antoine Tenart
This patch modify the generic code handling PHYs to allow them to be
supplied from the drivers. This adds checks to ensure no PHY was already
there when looking for one in the generic code. This also makes sure we
do not modify its state in the generic HCD functions, it was provided by
the driver.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
Acked-by: Alan Stern st...@rowland.harvard.edu
---
 drivers/usb/core/hcd.c | 7 ---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 6619239baf6d..dc0e46e5e618 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -2646,7 +2646,7 @@ int usb_add_hcd(struct usb_hcd *hcd,
}
}
 
-   if (IS_ENABLED(CONFIG_GENERIC_PHY)) {
+   if (IS_ENABLED(CONFIG_GENERIC_PHY)  !hcd-phy) {
struct phy *phy = phy_get(hcd-self.controller, usb);
 
if (IS_ERR(phy)) {
@@ -2666,6 +2666,7 @@ int usb_add_hcd(struct usb_hcd *hcd,
goto err_phy;
}
hcd-phy = phy;
+   hcd-remove_phy = 1;
}
}
 
@@ -2812,7 +2813,7 @@ err_allocate_root_hub:
 err_register_bus:
hcd_buffer_destroy(hcd);
 err_create_buf:
-   if (IS_ENABLED(CONFIG_GENERIC_PHY)  hcd-phy) {
+   if (IS_ENABLED(CONFIG_GENERIC_PHY)  hcd-remove_phy  hcd-phy) {
phy_power_off(hcd-phy);
phy_exit(hcd-phy);
phy_put(hcd-phy);
@@ -2896,7 +2897,7 @@ void usb_remove_hcd(struct usb_hcd *hcd)
usb_deregister_bus(hcd-self);
hcd_buffer_destroy(hcd);
 
-   if (IS_ENABLED(CONFIG_GENERIC_PHY)  hcd-phy) {
+   if (IS_ENABLED(CONFIG_GENERIC_PHY)  hcd-remove_phy  hcd-phy) {
phy_power_off(hcd-phy);
phy_exit(hcd-phy);
phy_put(hcd-phy);
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 5/7] usb: rename transceiver and phy to usb_phy in ChipIdea

2014-09-23 Thread Antoine Tenart
This patch prepares the introduction of the generic PHY support in the
USB ChipIdea common functions. The USB PHY member of the ChipIdea
structure ('transceiver') is renamed to 'usb_phy', the 'phy' member of
the ChipIdea pdata structure is renamed to 'usb_phy' and modifications
are done in all drivers accessing it. Renaming this pointer will allow
to keep the compatibility for USB PHY drivers.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
---
 drivers/usb/chipidea/ci.h  |  4 ++--
 drivers/usb/chipidea/ci_hdrc_imx.c |  2 +-
 drivers/usb/chipidea/ci_hdrc_msm.c |  8 
 drivers/usb/chipidea/core.c| 20 ++--
 drivers/usb/chipidea/debug.c   |  2 +-
 drivers/usb/chipidea/host.c|  4 ++--
 drivers/usb/chipidea/otg_fsm.c |  4 ++--
 drivers/usb/chipidea/udc.c |  4 ++--
 include/linux/usb/chipidea.h   |  2 +-
 9 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
index 9563cb56d564..b2caa1772712 100644
--- a/drivers/usb/chipidea/ci.h
+++ b/drivers/usb/chipidea/ci.h
@@ -161,7 +161,7 @@ struct hw_bank {
  * @test_mode: the selected test mode
  * @platdata: platform specific information supplied by parent device
  * @vbus_active: is VBUS active
- * @transceiver: pointer to USB PHY, if any
+ * @usb_phy: pointer to USB PHY, if any
  * @hcd: pointer to usb_hcd for ehci host driver
  * @debugfs: root dentry for this controller in debugfs
  * @id_event: indicates there is an id event, and handled at ci_otg_work
@@ -201,7 +201,7 @@ struct ci_hdrc {
 
struct ci_hdrc_platform_data*platdata;
int vbus_active;
-   struct usb_phy  *transceiver;
+   struct usb_phy  *usb_phy;
struct usb_hcd  *hcd;
struct dentry   *debugfs;
boolid_event;
diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c 
b/drivers/usb/chipidea/ci_hdrc_imx.c
index a7ab0f15926e..6f8b1b1045b5 100644
--- a/drivers/usb/chipidea/ci_hdrc_imx.c
+++ b/drivers/usb/chipidea/ci_hdrc_imx.c
@@ -147,7 +147,7 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
goto err_clk;
}
 
-   pdata.phy = data-phy;
+   pdata.usb_phy = data-phy;
 
if (imx_platform_flag-flags  CI_HDRC_IMX_IMX28_WRITE_FIX)
pdata.flags |= CI_HDRC_IMX28_WRITE_FIX;
diff --git a/drivers/usb/chipidea/ci_hdrc_msm.c 
b/drivers/usb/chipidea/ci_hdrc_msm.c
index 4935ac38fd00..3edf969ed797 100644
--- a/drivers/usb/chipidea/ci_hdrc_msm.c
+++ b/drivers/usb/chipidea/ci_hdrc_msm.c
@@ -26,15 +26,15 @@ static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, 
unsigned event)
dev_dbg(dev, CI_HDRC_CONTROLLER_RESET_EVENT received\n);
writel(0, USB_AHBBURST);
writel(0, USB_AHBMODE);
-   usb_phy_init(ci-transceiver);
+   usb_phy_init(ci-usb_phy);
break;
case CI_HDRC_CONTROLLER_STOPPED_EVENT:
dev_dbg(dev, CI_HDRC_CONTROLLER_STOPPED_EVENT received\n);
/*
-* Put the transceiver in non-driving mode. Otherwise host
+* Put the phy in non-driving mode. Otherwise host
 * may not detect soft-disconnection.
 */
-   usb_phy_notify_disconnect(ci-transceiver, USB_SPEED_UNKNOWN);
+   usb_phy_notify_disconnect(ci-usb_phy, USB_SPEED_UNKNOWN);
break;
default:
dev_dbg(dev, unknown ci_hdrc event\n);
@@ -68,7 +68,7 @@ static int ci_hdrc_msm_probe(struct platform_device *pdev)
if (IS_ERR(phy))
return PTR_ERR(phy);
 
-   ci_hdrc_msm_platdata.phy = phy;
+   ci_hdrc_msm_platdata.usb_phy = phy;
 
plat_ci = ci_hdrc_add_device(pdev-dev,
pdev-resource, pdev-num_resources,
diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index 579b3538cb27..ee96b0696a7b 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -306,7 +306,7 @@ static int ci_usb_phy_init(struct ci_hdrc *ci)
case USBPHY_INTERFACE_MODE_UTMI:
case USBPHY_INTERFACE_MODE_UTMIW:
case USBPHY_INTERFACE_MODE_HSIC:
-   ret = usb_phy_init(ci-transceiver);
+   ret = usb_phy_init(ci-usb_phy);
if (ret)
return ret;
hw_phymode_configure(ci);
@@ -314,12 +314,12 @@ static int ci_usb_phy_init(struct ci_hdrc *ci)
case USBPHY_INTERFACE_MODE_ULPI:
case USBPHY_INTERFACE_MODE_SERIAL:
hw_phymode_configure(ci);
-   ret = usb_phy_init(ci-transceiver);
+   ret = usb_phy_init(ci-usb_phy);
if (ret)
return ret;
break;
default:
-   ret = 

[PATCH v6 7/7] usb: chipidea: add support to the generic PHY framework in ChipIdea

2014-09-23 Thread Antoine Tenart
This patch adds support of the PHY framework for ChipIdea drivers.
Changes are done in both the ChipIdea common code and in the drivers
accessing the PHY. This is done by adding a new PHY member in
ChipIdea's structures and by taking care of it in the code.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
---
 drivers/usb/chipidea/ci.h  |  5 ++-
 drivers/usb/chipidea/core.c| 83 +-
 drivers/usb/chipidea/host.c|  5 ++-
 drivers/usb/chipidea/otg_fsm.c |  6 ++-
 include/linux/usb/chipidea.h   |  2 +
 5 files changed, 80 insertions(+), 21 deletions(-)

diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
index dac5ab6adfa2..7e9e8223672a 100644
--- a/drivers/usb/chipidea/ci.h
+++ b/drivers/usb/chipidea/ci.h
@@ -161,7 +161,8 @@ struct hw_bank {
  * @test_mode: the selected test mode
  * @platdata: platform specific information supplied by parent device
  * @vbus_active: is VBUS active
- * @usb_phy: pointer to USB PHY, if any
+ * @phy: pointer to PHY, if any
+ * @usb_phy: pointer to USB PHY, if any and if using the USB PHY framework
  * @hcd: pointer to usb_hcd for ehci host driver
  * @debugfs: root dentry for this controller in debugfs
  * @id_event: indicates there is an id event, and handled at ci_otg_work
@@ -202,6 +203,8 @@ struct ci_hdrc {
 
struct ci_hdrc_platform_data*platdata;
int vbus_active;
+   struct phy  *phy;
+   /* old usb_phy interface */
struct usb_phy  *usb_phy;
struct usb_hcd  *hcd;
struct dentry   *debugfs;
diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index ee96b0696a7b..e1d3d3f44075 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -47,6 +47,7 @@
 #include linux/delay.h
 #include linux/device.h
 #include linux/dma-mapping.h
+#include linux/phy/phy.h
 #include linux/platform_device.h
 #include linux/module.h
 #include linux/idr.h
@@ -293,6 +294,49 @@ static void hw_phymode_configure(struct ci_hdrc *ci)
 }
 
 /**
+ * _ci_usb_phy_init: initialize phy taking in account both phy and usb_phy
+ * interfaces
+ * @ci: the controller
+ *
+ * This function returns an error code if the phy failed to init
+ */
+static int _ci_usb_phy_init(struct ci_hdrc *ci)
+{
+   int ret;
+
+   if (ci-phy) {
+   ret = phy_init(ci-phy);
+   if (ret)
+   return ret;
+
+   ret = phy_power_on(ci-phy);
+   if (ret) {
+   phy_exit(ci-phy);
+   return ret;
+   }
+   } else {
+   ret = usb_phy_init(ci-usb_phy);
+   }
+
+   return ret;
+}
+
+/**
+ * _ci_usb_phy_exit: deinitialize phy taking in account both phy and usb_phy
+ * interfaces
+ * @ci: the controller
+ */
+static void ci_usb_phy_exit(struct ci_hdrc *ci)
+{
+   if (ci-phy) {
+   phy_power_off(ci-phy);
+   phy_exit(ci-phy);
+   } else {
+   usb_phy_shutdown(ci-usb_phy);
+   }
+}
+
+/**
  * ci_usb_phy_init: initialize phy according to different phy type
  * @ci: the controller
   *
@@ -306,7 +350,7 @@ static int ci_usb_phy_init(struct ci_hdrc *ci)
case USBPHY_INTERFACE_MODE_UTMI:
case USBPHY_INTERFACE_MODE_UTMIW:
case USBPHY_INTERFACE_MODE_HSIC:
-   ret = usb_phy_init(ci-usb_phy);
+   ret = _ci_usb_phy_init(ci);
if (ret)
return ret;
hw_phymode_configure(ci);
@@ -314,12 +358,12 @@ static int ci_usb_phy_init(struct ci_hdrc *ci)
case USBPHY_INTERFACE_MODE_ULPI:
case USBPHY_INTERFACE_MODE_SERIAL:
hw_phymode_configure(ci);
-   ret = usb_phy_init(ci-usb_phy);
+   ret = _ci_usb_phy_init(ci);
if (ret)
return ret;
break;
default:
-   ret = usb_phy_init(ci-usb_phy);
+   ret = _ci_usb_phy_init(ci);
}
 
return ret;
@@ -595,23 +639,26 @@ static int ci_hdrc_probe(struct platform_device *pdev)
return -ENODEV;
}
 
-   if (ci-platdata-usb_phy)
+   if (ci-platdata-phy) {
+   ci-phy = ci-platdata-phy;
+   } else if (ci-platdata-usb_phy) {
ci-usb_phy = ci-platdata-usb_phy;
-   else
+   } else {
+   ci-phy = devm_phy_get(dev, usb-phy);
ci-usb_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
 
-   if (IS_ERR(ci-usb_phy)) {
-   ret = PTR_ERR(ci-usb_phy);
-   /*
-* if -ENXIO is returned, it means PHY layer wasn't
-* enabled, so it makes no sense to return -EPROBE_DEFER
-* in that case, since no PHY driver will ever probe.
-*/
-   if (ret == -ENXIO)
-

[PATCH v6 0/7] usb: add support for the generic PHY framework

2014-09-23 Thread Antoine Tenart
Patches can also be found at:
git://git.free-electrons.com:users/antoine-tenart/linux.git usb-phy

The series applies on top of Sergei generic PHY support in HCD[1]
and on top of Peter Chen's ci-for-usb-next branch[2].

Thanks a lot!

Antoine

Changes since v5:
- rebased on the latest version of Sergei's series[1]
- fixed one modifiaction made in the wrong patch

Changes since v4:
- reworked the PHY handling in ci_hdrc_probe()
- fixed a rebase error
- rebased on top of [3]

Changes since v3:
- moved phy_exit() after phy_power_on()
- fixed the PHY handling in ci_hdrc_probe()
- some little fixes

Changes since v2:
- rebased the series on top of v3.17-rc1 (and [2])
- switched to devm_phy_get() to handle non DT cases
- moved usb_otg into the ci_hdrc structure

Changes since v1:
- rebased the series on top of [2] (generic PHY support for HCD)
- split s/phy/usb_phy/ renaming and generic PHY support in separate
  patches

[1] https://www.mail-archive.com/linux-usb%40vger.kernel.org/msg48068.html
[2] git://github.com/hzpeterchen/linux-usb.git ci-for-usb-next

Antoine Tenart (7):
  usb: move the OTG state from the USB PHY to the OTG structure
  usb: rename phy to usb_phy in OTG
  usb: add support to the generic PHY framework in OTG
  usb: allow to supply the PHY in the drivers when using HCD
  usb: rename transceiver and phy to usb_phy in ChipIdea
  usb: chipidea: move usb_otg into struct ci_hdrc
  usb: chipidea: add support to the generic PHY framework in ChipIdea

 drivers/phy/phy-omap-usb2.c | 14 ++
 drivers/usb/chipidea/ci.h   |  8 +++-
 drivers/usb/chipidea/ci_hdrc_imx.c  |  2 +-
 drivers/usb/chipidea/ci_hdrc_msm.c  |  8 ++--
 drivers/usb/chipidea/core.c | 89 ++
 drivers/usb/chipidea/debug.c|  2 +-
 drivers/usb/chipidea/host.c | 10 ++--
 drivers/usb/chipidea/otg_fsm.c  | 30 +---
 drivers/usb/chipidea/udc.c  |  4 +-
 drivers/usb/common/usb-otg-fsm.c|  8 ++--
 drivers/usb/core/hcd.c  |  7 +--
 drivers/usb/host/ohci-omap.c|  2 +-
 drivers/usb/musb/am35x.c| 28 +--
 drivers/usb/musb/blackfin.c | 18 +++
 drivers/usb/musb/da8xx.c| 28 +--
 drivers/usb/musb/davinci.c  | 18 +++
 drivers/usb/musb/musb_core.c| 94 ++--
 drivers/usb/musb/musb_dsps.c| 26 +-
 drivers/usb/musb/musb_gadget.c  | 36 +++---
 drivers/usb/musb/musb_host.c|  8 ++--
 drivers/usb/musb/musb_virthub.c | 22 -
 drivers/usb/musb/omap2430.c | 30 ++--
 drivers/usb/musb/tusb6010.c | 40 
 drivers/usb/musb/ux500.c| 10 ++--
 drivers/usb/phy/phy-ab8500-usb.c| 16 +++
 drivers/usb/phy/phy-fsl-usb.c   | 23 -
 drivers/usb/phy/phy-generic.c   |  6 +--
 drivers/usb/phy/phy-gpio-vbus-usb.c | 14 +++---
 drivers/usb/phy/phy-isp1301-omap.c  | 10 ++--
 drivers/usb/phy/phy-msm-usb.c   | 95 +++--
 drivers/usb/phy/phy-mv-usb.c| 50 +--
 drivers/usb/phy/phy-samsung-usb2.c  |  2 +-
 drivers/usb/phy/phy-tahvo.c |  8 ++--
 drivers/usb/phy/phy-ulpi.c  |  6 +--
 include/linux/usb/chipidea.h|  4 +-
 include/linux/usb/otg.h |  7 ++-
 include/linux/usb/phy.h |  1 -
 37 files changed, 421 insertions(+), 363 deletions(-)

-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH] libusbg: Fix usbg_disable_gadget to actually clear the UDC

2014-09-23 Thread Krzysztof Opasiak
 -Original Message-
 From: Tony Lindgren [mailto:t...@atomide.com]
 Sent: Monday, September 22, 2014 3:17 PM
 To: Krzysztof Opasiak
 Cc: 'Matt Porter'; linux-usb@vger.kernel.org; Stanislaw Wadas;
 Andrzej Pietrasiewicz; Marek Szyprowski; Karol Lewandowski;
 philippedesw...@gmail.com
 Subject: Re: [PATCH] libusbg: Fix usbg_disable_gadget to actually
 clear the UDC
 
 * Krzysztof Opasiak k.opas...@samsung.com [140922 01:07]:
  Dear Tony,
 
   -Original Message-
   From: linux-usb-ow...@vger.kernel.org [mailto:linux-usb-
   ow...@vger.kernel.org] On Behalf Of Tony Lindgren
   Sent: Saturday, September 20, 2014 5:51 PM
   To: Matt Porter
   Cc: linux-usb@vger.kernel.org
   Subject: [PATCH] libusbg: Fix usbg_disable_gadget to actually
 clear
   the UDC
  
   Currently usbg_disable_gadget() does not actually write
 anything
   to UDC to clear it and the configured UDC name stays there.
  
 
  No, udc name doesn't stay there due to O_TRUNC flag which is
 always used
  for writing in usbg_write_string(). With this flag we don't need
 to
  write new line to file because size of file is set to 0 while
 opening.
 
  Summing up:
 
  open(/sys/kernel/config/usb_gadget/g1/UDC,
 O_WRONLY|O_CREAT|O_TRUNC,
  0666) = 3
  close(3)= 0
 
  causes unbind, so everything works fine.
 
 Hmm not clearing for me doing this afterwards:
 
 # cat /sys/kernel/config/usb_gadget/g1/UDC
 musb-hdrc.0.auto
 
 The UDC name stays there and won't get cleared.
 
 Am I missing something?

Please forgive me, I have checked it once again and you are right. I
thought that truncate flag works on configfs in a similar way than on
others fs but I was wrong. This flag simply does nothing and you have
definitely found a bug.

I was certain sure that this function works fine due to
gadget-vid-pid-remove example. In this simple program gadget is disabled
before removing. I had in my mind that it is impossible to modify a
gadget if it is bound to any udc. This example worked fine so I assumed
that usbg_disable_gadget() also works fine. I have look into configfs
composite gadget source and there I have found some surprise:

/*
 * ideally I would like to forbid to unlink functions while a
gadget is
 * bound to an UDC. Since this isn't possible at the moment, we
simply
 * force an unbind, the function is available here and then we
can
 * remove the function.
 */
mutex_lock(gi-lock);
if (gi-udc_name)
unregister_gadget(gi);
WARN_ON(gi-udc_name);

This means that it is currently possible to remove function binding on
enabled gadget and it will cause unbind. This is why usbg_rm_gadget()
also worked fine without proper usbg_disable_gadget().

Summing up, Your patch fix an important bug. Its form is good for me. I
have checked it and it works fine. You may add:

Reviewed-by: Krzysztof Opasiak k.opas...@samsung.com

If it is going about Matt Porter activity, he is not responding for
mails or patches since April. I have github-fork of libusbg [1] with
latest source (my master is 35 commits ahead of libusbg/master and some
devel branches are even more). All patches which are intended for
libusbg (sent on a list or from pull requests) are merged there after
review.

Please let me also notice that your patch has been also merged into my
master.

Thank you for fixing this issue.

Foot notes:
1 - https://github.com/kopasiak/libusbg

-- 
Best Regards,
Krzysztof Opasiak
Samsung RD Institute Poland
Samsung Electronics
k.opas...@samsung.com




--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 01/12] reset: add the Berlin reset controller driver

2014-09-23 Thread Antoine Tenart
Add a reset controller for Marvell Berlin SoCs which is used by the
USB PHYs drivers (for now).

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
Signed-off-by: Sebastian Hesselbarth sebastian.hesselba...@gmail.com
Acked-by: Philipp Zabel p.za...@pengutronix.de
---
 drivers/reset/Makefile   |   1 +
 drivers/reset/reset-berlin.c | 131 +++
 2 files changed, 132 insertions(+)
 create mode 100644 drivers/reset/reset-berlin.c

diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile
index 60fed3d7820b..157d421f755b 100644
--- a/drivers/reset/Makefile
+++ b/drivers/reset/Makefile
@@ -1,4 +1,5 @@
 obj-$(CONFIG_RESET_CONTROLLER) += core.o
 obj-$(CONFIG_ARCH_SOCFPGA) += reset-socfpga.o
+obj-$(CONFIG_ARCH_BERLIN) += reset-berlin.o
 obj-$(CONFIG_ARCH_SUNXI) += reset-sunxi.o
 obj-$(CONFIG_ARCH_STI) += sti/
diff --git a/drivers/reset/reset-berlin.c b/drivers/reset/reset-berlin.c
new file mode 100644
index ..f8b48a13cf0b
--- /dev/null
+++ b/drivers/reset/reset-berlin.c
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2014 Marvell Technology Group Ltd.
+ *
+ * Antoine Tenart antoine.ten...@free-electrons.com
+ * Sebastian Hesselbarth sebastian.hesselba...@gmail.com
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed as is without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include linux/delay.h
+#include linux/io.h
+#include linux/module.h
+#include linux/of.h
+#include linux/of_address.h
+#include linux/platform_device.h
+#include linux/reset-controller.h
+#include linux/slab.h
+#include linux/types.h
+
+#define BERLIN_MAX_RESETS  32
+
+#define to_berlin_reset_priv(p)\
+   container_of((p), struct berlin_reset_priv, rcdev)
+
+struct berlin_reset_priv {
+   void __iomem*base;
+   unsigned intsize;
+   struct reset_controller_dev rcdev;
+};
+
+static int berlin_reset_reset(struct reset_controller_dev *rcdev,
+ unsigned long id)
+{
+   struct berlin_reset_priv *priv = to_berlin_reset_priv(rcdev);
+   int offset = id  8;
+   int mask = BIT(id  0x1f);
+
+   writel(mask, priv-base + offset);
+
+   /* let the reset be effective */
+   udelay(10);
+
+   return 0;
+}
+
+static struct reset_control_ops berlin_reset_ops = {
+   .reset  = berlin_reset_reset,
+};
+
+static int berlin_reset_xlate(struct reset_controller_dev *rcdev,
+ const struct of_phandle_args *reset_spec)
+{
+   struct berlin_reset_priv *priv = to_berlin_reset_priv(rcdev);
+   unsigned offset, bit;
+
+   if (WARN_ON(reset_spec-args_count != rcdev-of_reset_n_cells))
+   return -EINVAL;
+
+   offset = reset_spec-args[0];
+   bit = reset_spec-args[1];
+
+   if (offset = priv-size)
+   return -EINVAL;
+
+   if (bit = BERLIN_MAX_RESETS)
+   return -EINVAL;
+
+   return (offset  8) | bit;
+}
+
+static int __berlin_reset_init(struct device_node *np)
+{
+   struct berlin_reset_priv *priv;
+   struct resource res;
+   resource_size_t size;
+   int ret;
+
+   priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+   if (!priv)
+   return -ENOMEM;
+
+   ret = of_address_to_resource(np, 0, res);
+   if (ret)
+   goto err;
+
+   size = resource_size(res);
+   priv-base = ioremap(res.start, size);
+   if (!priv-base) {
+   ret = -ENOMEM;
+   goto err;
+   }
+   priv-size = size;
+
+   priv-rcdev.owner = THIS_MODULE;
+   priv-rcdev.ops = berlin_reset_ops;
+   priv-rcdev.of_node = np;
+   priv-rcdev.of_reset_n_cells = 2;
+   priv-rcdev.of_xlate = berlin_reset_xlate;
+
+   reset_controller_register(priv-rcdev);
+
+   return 0;
+
+err:
+   kfree(priv);
+   return ret;
+}
+
+static const struct of_device_id berlin_reset_of_match[] __initconst = {
+   { .compatible = marvell,berlin2-chip-ctrl },
+   { .compatible = marvell,berlin2cd-chip-ctrl },
+   { .compatible = marvell,berlin2q-chip-ctrl },
+   { },
+};
+
+static int __init berlin_reset_init(void)
+{
+   struct device_node *np;
+   int ret;
+
+   for_each_matching_node(np, berlin_reset_of_match) {
+   ret = __berlin_reset_init(np);
+   if (ret)
+   return ret;
+   }
+
+   return 0;
+}
+arch_initcall(berlin_reset_init);
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 12/12] ARM: dts: berlin: enable USB on the Google Chromecast

2014-09-23 Thread Antoine Tenart
From: Sebastian Hesselbarth sebastian.hesselba...@gmail.com

Enable usb1 on Google Chromecast which is connected to micro-USB
plug used for external power supply, too.

Signed-off-by: Sebastian Hesselbarth sebastian.hesselba...@gmail.com
Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
---
 arch/arm/boot/dts/berlin2cd-google-chromecast.dts | 4 
 1 file changed, 4 insertions(+)

diff --git a/arch/arm/boot/dts/berlin2cd-google-chromecast.dts 
b/arch/arm/boot/dts/berlin2cd-google-chromecast.dts
index bcd81ffc495d..5c42c3bfb613 100644
--- a/arch/arm/boot/dts/berlin2cd-google-chromecast.dts
+++ b/arch/arm/boot/dts/berlin2cd-google-chromecast.dts
@@ -27,3 +27,7 @@
 };
 
 uart0 { status = okay; };
+
+usb_phy1 { status = okay; };
+
+usb1 { status = okay; };
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 11/12] ARM: dts: berlin: add BG2CD nodes for USB support

2014-09-23 Thread Antoine Tenart
From: Sebastian Hesselbarth sebastian.hesselba...@gmail.com

Adds nodes describing the Marvell Berlin BG2CD USB PHY and USB. The BG2CD
SoC has 2 USB ChipIdea controllers, with usb0 host-only and usb1 dual-role
capable.

Signed-off-by: Sebastian Hesselbarth sebastian.hesselba...@gmail.com
Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
---
 arch/arm/boot/dts/berlin2cd.dtsi | 34 ++
 1 file changed, 34 insertions(+)

diff --git a/arch/arm/boot/dts/berlin2cd.dtsi b/arch/arm/boot/dts/berlin2cd.dtsi
index 68f7032b4686..5c6950531327 100644
--- a/arch/arm/boot/dts/berlin2cd.dtsi
+++ b/arch/arm/boot/dts/berlin2cd.dtsi
@@ -66,6 +66,22 @@
clocks = chip CLKID_TWD;
};
 
+   usb_phy0: usb-phy@b74000 {
+   compatible = marvell,berlin2cd-usb-phy;
+   reg = 0xb74000 0x128;
+   #phy-cells = 0;
+   resets = chip 0x178 23;
+   status = disabled;
+   };
+
+   usb_phy1: usb-phy@b78000 {
+   compatible = marvell,berlin2cd-usb-phy;
+   reg = 0xb78000 0x128;
+   #phy-cells = 0;
+   resets = chip 0x178 24;
+   status = disabled;
+   };
+
apb@e8 {
compatible = simple-bus;
#address-cells = 1;
@@ -242,6 +258,24 @@
};
};
 
+   usb0: usb@ed {
+   compatible = chipidea,usb2;
+   reg = 0xed 0x200;
+   interrupts = GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH;
+   clocks = chip CLKID_USB0;
+   usb-phy = usb_phy0;
+   status = disabled;
+   };
+
+   usb1: usb@ee {
+   compatible = chipidea,usb2;
+   reg = 0xee 0x200;
+   interrupts = GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH;
+   clocks = chip CLKID_USB1;
+   usb-phy = usb_phy1;
+   status = disabled;
+   };
+
apb@fc {
compatible = simple-bus;
#address-cells = 1;
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 10/12] ARM: dts: Berlin: enable USB on the BG2Q DMP

2014-09-23 Thread Antoine Tenart
Enable the 2 available USB PHY and USB nodes on the Marvell Berlin BG2Q
DMP.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
---
 arch/arm/boot/dts/berlin2q-marvell-dmp.dts | 53 ++
 1 file changed, 53 insertions(+)

diff --git a/arch/arm/boot/dts/berlin2q-marvell-dmp.dts 
b/arch/arm/boot/dts/berlin2q-marvell-dmp.dts
index a357ce02a64e..663aedb173e0 100644
--- a/arch/arm/boot/dts/berlin2q-marvell-dmp.dts
+++ b/arch/arm/boot/dts/berlin2q-marvell-dmp.dts
@@ -7,6 +7,8 @@
  */
 
 /dts-v1/;
+
+#include dt-bindings/gpio/gpio.h
 #include berlin2q.dtsi
 
 / {
@@ -21,6 +23,39 @@
choosen {
bootargs = console=ttyS0,115200 earlyprintk;
};
+
+   regulators {
+   compatible = simple-bus;
+   #address-cells = 1;
+   #size-cells = 0;
+
+   reg_usb0_vbus: regulator@0 {
+   compatible = regulator-fixed;
+   regulator-name = usb0_vbus;
+   regulator-min-microvolt = 500;
+   regulator-max-microvolt = 500;
+   gpio = portb 8 GPIO_ACTIVE_HIGH;
+   enable-active-high;
+   };
+
+   reg_usb1_vbus: regulator@1 {
+   compatible = regulator-fixed;
+   regulator-name = usb1_vbus;
+   regulator-min-microvolt = 500;
+   regulator-max-microvolt = 500;
+   gpio = portb 10 GPIO_ACTIVE_HIGH;
+   enable-active-high;
+   };
+
+   reg_usb2_vbus: regulator@2 {
+   compatible = regulator-fixed;
+   regulator-name = usb2_vbus;
+   regulator-min-microvolt = 500;
+   regulator-max-microvolt = 500;
+   gpio = portb 12 GPIO_ACTIVE_HIGH;
+   enable-active-high;
+   };
+   };
 };
 
 sdhci1 {
@@ -45,3 +80,21 @@
 uart0 {
status = okay;
 };
+
+usb_phy0 {
+   status = okay;
+};
+
+usb_phy2 {
+   status = okay;
+};
+
+usb0 {
+   vbus-supply = reg_usb0_vbus;
+   status = okay;
+};
+
+usb2 {
+   vbus-supply = reg_usb2_vbus;
+   status = okay;
+};
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 06/12] Documentation: bindings: add doc for the Berlin USB PHY

2014-09-23 Thread Antoine Tenart
Document the bindings of the Marvell Berlin USB PHY driver.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
---
 Documentation/devicetree/bindings/phy/berlin-usb-phy.txt | 16 
 1 file changed, 16 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/phy/berlin-usb-phy.txt

diff --git a/Documentation/devicetree/bindings/phy/berlin-usb-phy.txt 
b/Documentation/devicetree/bindings/phy/berlin-usb-phy.txt
new file mode 100644
index ..be33780f668e
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/berlin-usb-phy.txt
@@ -0,0 +1,16 @@
+* Marvell Berlin USB PHY
+
+Required properties:
+- compatible: marvell,berlin2-usb-phy or marvell,berlin2cd-usb-phy
+- reg: base address and length of the registers
+- #phys-cells: should be 0
+- resets: reference to the reset controller
+
+Example:
+
+   usb-phy@f774000 {
+   compatible = marvell,berlin2-usb-phy;
+   reg = 0xf774000 0x128;
+   #phy-cells = 0;
+   resets = chip 0x104 14;
+   };
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 09/12] ARM: dts: berlin: add BG2Q nodes for USB support

2014-09-23 Thread Antoine Tenart
Adds nodes describing the Marvell Berlin BG2Q USB PHY and USB. The BG2Q
SoC has 3 USB host controller, compatible with ChipIdea.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
---
 arch/arm/boot/dts/berlin2q.dtsi | 52 +
 1 file changed, 52 insertions(+)

diff --git a/arch/arm/boot/dts/berlin2q.dtsi b/arch/arm/boot/dts/berlin2q.dtsi
index ffba5c3bdab8..faf7cbe2af20 100644
--- a/arch/arm/boot/dts/berlin2q.dtsi
+++ b/arch/arm/boot/dts/berlin2q.dtsi
@@ -114,6 +114,39 @@
#interrupt-cells = 3;
};
 
+   usb_phy2: phy@a2f400 {
+   compatible = marvell,berlin2-usb-phy;
+   reg = 0xa2f400 0x128;
+   #phy-cells = 0;
+   resets = chip 0x104 14;
+   status = disabled;
+   };
+
+   usb2: usb@a3 {
+   compatible = chipidea,usb2;
+   reg = 0xa3 0x1;
+   interrupts = GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH;
+   clocks = chip CLKID_USB2;
+   phys = usb_phy2;
+   status = disabled;
+   };
+
+   usb_phy0: phy@b74000 {
+   compatible = marvell,berlin2-usb-phy;
+   reg = 0xb74000 0x128;
+   #phy-cells = 0;
+   resets = chip 0x104 12;
+   status = disabled;
+   };
+
+   usb_phy1: phy@b78000 {
+   compatible = marvell,berlin2-usb-phy;
+   reg = 0xb78000 0x128;
+   #phy-cells = 0;
+   resets = chip 0x104 13;
+   status = disabled;
+   };
+
cpu-ctrl@dd {
compatible = marvell,berlin-cpu-ctrl;
reg = 0xdd 0x1;
@@ -348,6 +381,24 @@
};
};
 
+   usb0: usb@ed {
+   compatible = chipidea,usb2;
+   reg = 0xed 0x1;
+   interrupts = GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH;
+   clocks = chip CLKID_USB0;
+   phys = usb_phy0;
+   status = disabled;
+   };
+
+   usb1: usb@ee {
+   compatible = chipidea,usb2;
+   reg = 0xee 0x1;
+   interrupts = GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH;
+   clocks = chip CLKID_USB1;
+   phys = usb_phy1;
+   status = disabled;
+   };
+
apb@fc {
compatible = simple-bus;
#address-cells = 1;
@@ -440,5 +491,6 @@
interrupts = GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH;
};
};
+
};
 };
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 07/12] usb: chipidea: add a usb2 driver for ci13xxx

2014-09-23 Thread Antoine Tenart
Add a USB2 ChipIdea driver for ci13xxx, with optional PHY, clock
and DMA mask, to support USB2 ChipIdea controllers that don't need
specific functions.

Tested on the Marvell Berlin SoCs USB controllers.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
---
 drivers/usb/chipidea/Makefile   |   1 +
 drivers/usb/chipidea/ci_hdrc_usb2.c | 138 
 2 files changed, 139 insertions(+)
 create mode 100644 drivers/usb/chipidea/ci_hdrc_usb2.c

diff --git a/drivers/usb/chipidea/Makefile b/drivers/usb/chipidea/Makefile
index 2f099c7df7b5..1fc86a2ca22d 100644
--- a/drivers/usb/chipidea/Makefile
+++ b/drivers/usb/chipidea/Makefile
@@ -10,6 +10,7 @@ ci_hdrc-$(CONFIG_USB_OTG_FSM) += otg_fsm.o
 
 # Glue/Bridge layers go here
 
+obj-$(CONFIG_USB_CHIPIDEA) += ci_hdrc_usb2.o
 obj-$(CONFIG_USB_CHIPIDEA) += ci_hdrc_msm.o
 obj-$(CONFIG_USB_CHIPIDEA) += ci_hdrc_zevio.o
 
diff --git a/drivers/usb/chipidea/ci_hdrc_usb2.c 
b/drivers/usb/chipidea/ci_hdrc_usb2.c
new file mode 100644
index ..6eae1de587f2
--- /dev/null
+++ b/drivers/usb/chipidea/ci_hdrc_usb2.c
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2014 Marvell Technology Group Ltd.
+ *
+ * Antoine Tenart antoine.ten...@free-electrons.com
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed as is without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include linux/clk.h
+#include linux/dma-mapping.h
+#include linux/module.h
+#include linux/of.h
+#include linux/phy/phy.h
+#include linux/platform_device.h
+#include linux/usb/chipidea.h
+#include linux/usb/hcd.h
+#include linux/usb/ulpi.h
+
+#include ci.h
+
+struct ci_hdrc_usb2_priv {
+   struct platform_device  *ci_pdev;
+   struct clk  *clk;
+};
+
+static int ci_hdrc_usb2_dt_probe(struct device *dev,
+struct ci_hdrc_platform_data *ci_pdata)
+{
+   ci_pdata-phy = of_phy_get(dev-of_node, 0);
+   if (IS_ERR(ci_pdata-phy)) {
+   if (PTR_ERR(ci_pdata-phy) == -EPROBE_DEFER)
+   return -EPROBE_DEFER;
+
+   /* PHY is optional */
+   ci_pdata-phy = NULL;
+   }
+
+   return 0;
+}
+
+static struct ci_hdrc_platform_data ci_default_pdata = {
+   .capoffset  = DEF_CAPOFFSET,
+   .flags  = CI_HDRC_REQUIRE_TRANSCEIVER |
+ CI_HDRC_DISABLE_STREAMING,
+};
+
+static int ci_hdrc_usb2_probe(struct platform_device *pdev)
+{
+   struct device *dev = pdev-dev;
+   struct ci_hdrc_usb2_priv *priv;
+   struct ci_hdrc_platform_data *ci_pdata = dev_get_platdata(pdev-dev);
+   int ret;
+
+   if (!ci_pdata)
+   ci_pdata = ci_default_pdata;
+
+   priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
+   if (!priv)
+   return -ENOMEM;
+
+   priv-clk = devm_clk_get(dev, NULL);
+   if (!IS_ERR(priv-clk)) {
+   ret = clk_prepare_enable(priv-clk);
+   if (ret) {
+   dev_err(dev, failed to enable the clock: %d\n, ret);
+   return ret;
+   }
+   }
+
+   if (dev-of_node) {
+   ret = ci_hdrc_usb2_dt_probe(dev, ci_pdata);
+   if (ret)
+   goto clk_err;
+   } else {
+   ret = dma_set_mask_and_coherent(pdev-dev, DMA_BIT_MASK(32));
+   if (ret)
+   goto clk_err;
+   }
+
+   ci_pdata-name = dev_name(pdev-dev);
+
+   priv-ci_pdev = ci_hdrc_add_device(dev, pdev-resource,
+  pdev-num_resources, ci_pdata);
+   if (IS_ERR(priv-ci_pdev)) {
+   ret = PTR_ERR(priv-ci_pdev);
+   if (ret != -EPROBE_DEFER)
+   dev_err(dev,
+   failed to register ci_hdrc platform device: 
%d\n,
+   ret);
+   goto clk_err;
+   }
+
+   platform_set_drvdata(pdev, priv);
+
+   pm_runtime_no_callbacks(dev);
+   pm_runtime_enable(dev);
+
+   return 0;
+
+clk_err:
+   if (!IS_ERR(priv-clk))
+   clk_disable_unprepare(priv-clk);
+   return ret;
+}
+
+static int ci_hdrc_usb2_remove(struct platform_device *pdev)
+{
+   struct ci_hdrc_usb2_priv *priv = platform_get_drvdata(pdev);
+
+   pm_runtime_disable(pdev-dev);
+   ci_hdrc_remove_device(priv-ci_pdev);
+   clk_disable_unprepare(priv-clk);
+
+   return 0;
+}
+
+static const struct of_device_id ci_hdrc_usb2_of_match[] = {
+   { .compatible = chipidea,usb2 },
+   { }
+};
+MODULE_DEVICE_TABLE(of, ci_hdrc_usb2_of_match);
+
+static struct platform_driver ci_hdrc_usb2_driver = {
+   .probe  = ci_hdrc_usb2_probe,
+   .remove = ci_hdrc_usb2_remove,
+   .driver = {
+   .name   = chipidea-usb2,
+   .owner  = THIS_MODULE,
+

[PATCH v6 08/12] Documentation: bindings: add doc for the USB2 ChipIdea USB driver

2014-09-23 Thread Antoine Tenart
Document the USB2 ChipIdea driver (ci13xxx) bindings.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
---
 .../devicetree/bindings/usb/ci-hdrc-usb2.txt   | 22 ++
 1 file changed, 22 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/usb/ci-hdrc-usb2.txt

diff --git a/Documentation/devicetree/bindings/usb/ci-hdrc-usb2.txt 
b/Documentation/devicetree/bindings/usb/ci-hdrc-usb2.txt
new file mode 100644
index ..8dd6d8285dab
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/ci-hdrc-usb2.txt
@@ -0,0 +1,22 @@
+* USB2 ChipIdea USB controller for ci13xxx
+
+Required properties:
+- compatible: should be chipidea,usb2
+- reg: base address and length of the registers
+- interrupts: interrupt for the USB controller
+
+Optional properties:
+- clocks: reference to the USB clock
+- phys: reference to the USB PHY
+- vbus-supply: reference to the VBUS regulator
+
+Example:
+
+   usb@f7ed {
+   compatible = chipidea,usb2;
+   reg = 0xf7ed 0x1;
+   interrupts = GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH;
+   clocks = chip CLKID_USB0;
+   phys = usb_phy0;
+   vbus-supply = reg_usb0_vbus;
+   };
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 03/12] ARM: Berlin: select the reset controller

2014-09-23 Thread Antoine Tenart
The Marvell Berlin SoCs now has a reset controller. Add the needed
configuration.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
---
 arch/arm/mach-berlin/Kconfig | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm/mach-berlin/Kconfig b/arch/arm/mach-berlin/Kconfig
index 24f85be71671..5803f773a065 100644
--- a/arch/arm/mach-berlin/Kconfig
+++ b/arch/arm/mach-berlin/Kconfig
@@ -1,11 +1,13 @@
 menuconfig ARCH_BERLIN
bool Marvell Berlin SoCs if ARCH_MULTI_V7
+   select ARCH_HAS_RESET_CONTROLLER
select ARCH_REQUIRE_GPIOLIB
select ARM_GIC
select GENERIC_IRQ_CHIP
select DW_APB_ICTL
select DW_APB_TIMER_OF
select PINCTRL
+   select RESET_CONTROLLER
 
 if ARCH_BERLIN
 
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 00/12] ARM: berlin: USB support

2014-09-23 Thread Antoine Tenart
This series adds the support for ChipIdea USB2 (ci13xxx) controllers,
the USB PHYs of the Marvell Berlin SoCs and also adds a reset
controller for these SoCs.

The reset controller is used by the PHY driver and shares the
existing chip controller node with the clocks and one pin controller.

The Marvell Berlin USB controllers are host only on the BG2Q and are
compatible with USB ChipIdea. We here add a glue to use the available
common functions for this kind of controllers, and add a generic USB2
ChipIdea driver. A PHY driver is also added to control the USB PHY.

This series applies on top of the generic PHY support in the USB
framework[1].

Patches 1-4 have already been taken by Sebastian.

Changes since v5:
- added a missing header in ci_hdrc_usb2

Changes since v4:
- fixed the error handling of ci_hdrc_usb2_probe()

Changes since v3:
- removed the DMA mask property
- moved the clock handling in the common probe function
- fixed the documentation for the USB2 ChipIdea USB PHY binding
- made sure the reset bit is 0-31 in the reset driver

Changes since v2:
- moved the PHY driver to the generic PHY framework
- changed the compatible to 'chipidea,usb2'
- added a property to set the DMA mask in the USB2 CI driver
- separated dt specific calls in the CI probing function
- rebased on top of the generic PHY support for CI[1]

Changes since v1:
- made the Berlin CI USB driver a generic one
- added support to custom offset for the reset register
- added fixed regulators to support supply the VBUS
- modified the PHY driver to support the one one the BG2CD as
  well
- documented the reset properties
- added bindings for the BG2CD
- cosmetic fixes

[1] git://git.free-electrons.com:users/antoine-tenart/linux.git usb-phy

Antoine Tenart (10):
  reset: add the Berlin reset controller driver
  Documentation: bindings: add reset bindings docs for Marvell Berlin
SoCs
  ARM: Berlin: select the reset controller
  ARM: dts: berlin: add a required reset property in the chip controller
node
  phy: add the Berlin USB PHY driver
  Documentation: bindings: add doc for the Berlin USB PHY
  usb: chipidea: add a usb2 driver for ci13xxx
  Documentation: bindings: add doc for the USB2 ChipIdea USB driver
  ARM: dts: berlin: add BG2Q nodes for USB support
  ARM: dts: Berlin: enable USB on the BG2Q DMP

Sebastian Hesselbarth (2):
  ARM: dts: berlin: add BG2CD nodes for USB support
  ARM: dts: berlin: enable USB on the Google Chromecast

 .../devicetree/bindings/arm/marvell,berlin.txt |  10 +
 .../devicetree/bindings/phy/berlin-usb-phy.txt |  16 ++
 .../devicetree/bindings/usb/ci-hdrc-usb2.txt   |  22 ++
 arch/arm/boot/dts/berlin2.dtsi |   1 +
 arch/arm/boot/dts/berlin2cd-google-chromecast.dts  |   4 +
 arch/arm/boot/dts/berlin2cd.dtsi   |  35 
 arch/arm/boot/dts/berlin2q-marvell-dmp.dts |  53 +
 arch/arm/boot/dts/berlin2q.dtsi|  53 +
 arch/arm/mach-berlin/Kconfig   |   2 +
 drivers/phy/Kconfig|   7 +
 drivers/phy/Makefile   |   1 +
 drivers/phy/phy-berlin-usb.c   | 224 +
 drivers/reset/Makefile |   1 +
 drivers/reset/reset-berlin.c   | 131 
 drivers/usb/chipidea/Makefile  |   1 +
 drivers/usb/chipidea/ci_hdrc_usb2.c| 138 +
 16 files changed, 699 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/phy/berlin-usb-phy.txt
 create mode 100644 Documentation/devicetree/bindings/usb/ci-hdrc-usb2.txt
 create mode 100644 drivers/phy/phy-berlin-usb.c
 create mode 100644 drivers/reset/reset-berlin.c
 create mode 100644 drivers/usb/chipidea/ci_hdrc_usb2.c

-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 04/12] ARM: dts: berlin: add a required reset property in the chip controller node

2014-09-23 Thread Antoine Tenart
The chip controller node now also describes the Marvell Berlin reset
controller. Add the required 'reset-cells' property.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
Acked-by: Philipp Zabel p.za...@pengutronix.de
---
 arch/arm/boot/dts/berlin2.dtsi   | 1 +
 arch/arm/boot/dts/berlin2cd.dtsi | 1 +
 arch/arm/boot/dts/berlin2q.dtsi  | 1 +
 3 files changed, 3 insertions(+)

diff --git a/arch/arm/boot/dts/berlin2.dtsi b/arch/arm/boot/dts/berlin2.dtsi
index 9d7c810ebd0b..d7e81e124de0 100644
--- a/arch/arm/boot/dts/berlin2.dtsi
+++ b/arch/arm/boot/dts/berlin2.dtsi
@@ -249,6 +249,7 @@
chip: chip-control@ea {
compatible = marvell,berlin2-chip-ctrl;
#clock-cells = 1;
+   #reset-cells = 2;
reg = 0xea 0x400;
clocks = refclk;
clock-names = refclk;
diff --git a/arch/arm/boot/dts/berlin2cd.dtsi b/arch/arm/boot/dts/berlin2cd.dtsi
index cc1df65da504..68f7032b4686 100644
--- a/arch/arm/boot/dts/berlin2cd.dtsi
+++ b/arch/arm/boot/dts/berlin2cd.dtsi
@@ -231,6 +231,7 @@
chip: chip-control@ea {
compatible = marvell,berlin2cd-chip-ctrl;
#clock-cells = 1;
+   #reset-cells = 2;
reg = 0xea 0x400;
clocks = refclk;
clock-names = refclk;
diff --git a/arch/arm/boot/dts/berlin2q.dtsi b/arch/arm/boot/dts/berlin2q.dtsi
index 400c40fceccc..ffba5c3bdab8 100644
--- a/arch/arm/boot/dts/berlin2q.dtsi
+++ b/arch/arm/boot/dts/berlin2q.dtsi
@@ -332,6 +332,7 @@
chip: chip-control@ea {
compatible = marvell,berlin2q-chip-ctrl;
#clock-cells = 1;
+   #reset-cells = 2;
reg = 0xea 0x400, 0xdd0170 0x10;
clocks = refclk;
clock-names = refclk;
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v6 02/12] Documentation: bindings: add reset bindings docs for Marvell Berlin SoCs

2014-09-23 Thread Antoine Tenart
Add the reset binding documentation to the SoC binding documentation as
the reset driver in Marvell Berlin SoC is part of the chip/system
control registers. This patch adds the required properties to configure
the reset controller.

Signed-off-by: Antoine Tenart antoine.ten...@free-electrons.com
Acked-by: Philipp Zabel p.za...@pengutronix.de
---
 Documentation/devicetree/bindings/arm/marvell,berlin.txt | 10 ++
 1 file changed, 10 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/marvell,berlin.txt 
b/Documentation/devicetree/bindings/arm/marvell,berlin.txt
index 904de5781f44..a99eb9eb14c0 100644
--- a/Documentation/devicetree/bindings/arm/marvell,berlin.txt
+++ b/Documentation/devicetree/bindings/arm/marvell,berlin.txt
@@ -106,11 +106,21 @@ Required subnode-properties:
 - groups: a list of strings describing the group names.
 - function: a string describing the function used to mux the groups.
 
+* Reset controller binding
+
+A reset controller is part of the chip control registers set. The chip control
+node also provides the reset. The register set is not at the same offset 
between
+Berlin SoCs.
+
+Required property:
+- #reset-cells: must be set to 2
+
 Example:
 
 chip: chip-control@ea {
compatible = marvell,berlin2-chip-ctrl;
#clock-cells = 1;
+   #reset-cells = 2;
reg = 0xea 0x400;
clocks = refclk, externaldev 0;
clock-names = refclk, video_ext0;
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v6 07/12] usb: chipidea: add a usb2 driver for ci13xxx

2014-09-23 Thread Arnd Bergmann
On Tuesday 23 September 2014 12:28:03 Antoine Tenart wrote:
 +   if (dev-of_node) {
 +   ret = ci_hdrc_usb2_dt_probe(dev, ci_pdata);
 +   if (ret)
 +   goto clk_err;
 +   } else {
 +   ret = dma_set_mask_and_coherent(pdev-dev, DMA_BIT_MASK(32));
 +   if (ret)
 +   goto clk_err;
 +   }
 

Why do you care about the non-DT case here? I think it would be nicer to
open-code the ci_hdrc_usb2_dt_probe() function in here and remove
the dma_set_mask_and_coherent(), which should not even be necessary for
the case where you have a hardwired platform device.

Arnd
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/6] phy: improved lookup method

2014-09-23 Thread Heikki Krogerus
On Mon, Sep 22, 2014 at 05:07:55PM +0530, Kishon Vijay Abraham I wrote:
 On Thursday 18 September 2014 03:55 PM, Heikki Krogerus wrote:
  On Mon, Sep 15, 2014 at 03:35:08PM +0300, Heikki Krogerus wrote:
  On Fri, Sep 12, 2014 at 08:16:01PM +0530, Kishon Vijay Abraham I wrote:
  Assume you have 2 phys in your system..
  static struct phy_lookup usb_lookup = {
.phy_name   = phy-usb.0,
.dev_id = usb.0,
.con_id = usb,
  };
 
  static struct phy_lookup sata_lookup = {
.phy_name   = sata-usb.1,
.dev_id = sata.0,
.con_id = sata,
  };
 
  First you do modprobe phy-usb, the probe of USB PHY driver gets invoked 
  and it
  creates the PHY. The phy-core will find a free id (now it will be 0) and 
  then
  name the phy as phy-usb.0.
  Then with modprobe phy-sata, the phy-core will create phy-sata.1.
 
  This is an ideal case where the .phy_name in phy_lookup matches.
 
  Consider if the order is flipped and the user does modprobe phy-sata 
  first. The
  phy_names won't match anymore (the sata phy device name would be 
  sata-usb.0).
  
  Actually, I don't think there would be this problem if we used the
  name of the actual device which is the parent of phy devices, right?
 
 hmm.. but if the parent is a multi-phy phy provider (like pipe3 PHY driver), 
 we
 might end up with the same problem.

I'm not completely sure what you mean? If you are talking about
platforms with multiple instances of a single phy, I don't see how
there could ever be a scenario where we did not know the order in
which they were enumerated. Can you give an example again?


Thanks,

-- 
heikki
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/6] phy: improved lookup method

2014-09-23 Thread Kishon Vijay Abraham I
Hi,

On Tuesday 23 September 2014 04:23 PM, Heikki Krogerus wrote:
 On Mon, Sep 22, 2014 at 05:07:55PM +0530, Kishon Vijay Abraham I wrote:
 On Thursday 18 September 2014 03:55 PM, Heikki Krogerus wrote:
 On Mon, Sep 15, 2014 at 03:35:08PM +0300, Heikki Krogerus wrote:
 On Fri, Sep 12, 2014 at 08:16:01PM +0530, Kishon Vijay Abraham I wrote:
 Assume you have 2 phys in your system..
 static struct phy_lookup usb_lookup = {
   .phy_name   = phy-usb.0,
   .dev_id = usb.0,
   .con_id = usb,
 };

 static struct phy_lookup sata_lookup = {
   .phy_name   = sata-usb.1,
   .dev_id = sata.0,
   .con_id = sata,
 };

 First you do modprobe phy-usb, the probe of USB PHY driver gets invoked 
 and it
 creates the PHY. The phy-core will find a free id (now it will be 0) and 
 then
 name the phy as phy-usb.0.
 Then with modprobe phy-sata, the phy-core will create phy-sata.1.

 This is an ideal case where the .phy_name in phy_lookup matches.

 Consider if the order is flipped and the user does modprobe phy-sata 
 first. The
 phy_names won't match anymore (the sata phy device name would be 
 sata-usb.0).

 Actually, I don't think there would be this problem if we used the
 name of the actual device which is the parent of phy devices, right?

 hmm.. but if the parent is a multi-phy phy provider (like pipe3 PHY driver), 
 we
 might end up with the same problem.
 
 I'm not completely sure what you mean? If you are talking about
 platforms with multiple instances of a single phy, I don't see how
 there could ever be a scenario where we did not know the order in
 which they were enumerated. Can you give an example again?

If a single IP implements multiple PHYs (phy-miphy365x.c in linux-phy next),
the parent for all the phy devices would be the same.

Thanks
Kishon
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] storage: Add quirk for another SCM-based USB-SCSI converter

2014-09-23 Thread Mark
Hi,

There is apparently another SCM USB-SCSI converter with ID 04E6:000F. It is 
listed along with 04E6:000B in the Windows INF file for the Startech ICUSBSCSI2 
as eUSB SCSI Adapter (Bus Powered). The quirk allows devices with SCSI ID 
other than 0 to be accessed.

Also make a couple of existing SCM product IDs lower case to be consistent with 
other entries.

Signed-off-by: Mark Knibbs ma...@clara.co.uk

---
diff -up linux-3.17-rc6/drivers/usb/storage/unusual_devs.h.orig 
linux-3.17-rc6/drivers/usb/storage/unusual_devs.h
--- linux-3.17-rc6/drivers/usb/storage/unusual_devs.h.orig  2014-09-21 
23:43:02.0 +0100
+++ linux-3.17-rc6/drivers/usb/storage/unusual_devs.h   2014-09-23 
12:33:45.0 +0100
@@ -492,18 +492,24 @@ UNUSUAL_DEV(  0x04e6, 0x000a, 0x0200, 0x
eUSB CompactFlash Adapter,
USB_SC_8020, USB_PR_CB, NULL, 0),
 
-UNUSUAL_DEV(  0x04e6, 0x000B, 0x0100, 0x0100,
+UNUSUAL_DEV(  0x04e6, 0x000b, 0x0100, 0x0100,
Shuttle,
eUSCSI Bridge,
USB_SC_SCSI, USB_PR_BULK, usb_stor_euscsi_init,
US_FL_SCM_MULT_TARG ), 
 
-UNUSUAL_DEV(  0x04e6, 0x000C, 0x0100, 0x0100,
+UNUSUAL_DEV(  0x04e6, 0x000c, 0x0100, 0x0100,
Shuttle,
eUSCSI Bridge,
USB_SC_SCSI, USB_PR_BULK, usb_stor_euscsi_init,
US_FL_SCM_MULT_TARG ),
 
+UNUSUAL_DEV(  0x04e6, 0x000f, 0x, 0x,
+   SCM Microsystems,
+   eUSB SCSI Adapter (Bus Powered),
+   USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init,
+   US_FL_SCM_MULT_TARG ),
+
 UNUSUAL_DEV(  0x04e6, 0x0101, 0x0200, 0x0200,
Shuttle,
CD-RW Device,
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/6] phy: improved lookup method

2014-09-23 Thread Heikki Krogerus
On Tue, Sep 23, 2014 at 04:33:09PM +0530, Kishon Vijay Abraham I wrote:
 Hi,
 
 On Tuesday 23 September 2014 04:23 PM, Heikki Krogerus wrote:
  On Mon, Sep 22, 2014 at 05:07:55PM +0530, Kishon Vijay Abraham I wrote:
  On Thursday 18 September 2014 03:55 PM, Heikki Krogerus wrote:
  On Mon, Sep 15, 2014 at 03:35:08PM +0300, Heikki Krogerus wrote:
  On Fri, Sep 12, 2014 at 08:16:01PM +0530, Kishon Vijay Abraham I wrote:
  Assume you have 2 phys in your system..
  static struct phy_lookup usb_lookup = {
  .phy_name   = phy-usb.0,
  .dev_id = usb.0,
  .con_id = usb,
  };
 
  static struct phy_lookup sata_lookup = {
  .phy_name   = sata-usb.1,
  .dev_id = sata.0,
  .con_id = sata,
  };
 
  First you do modprobe phy-usb, the probe of USB PHY driver gets invoked 
  and it
  creates the PHY. The phy-core will find a free id (now it will be 0) 
  and then
  name the phy as phy-usb.0.
  Then with modprobe phy-sata, the phy-core will create phy-sata.1.
 
  This is an ideal case where the .phy_name in phy_lookup matches.
 
  Consider if the order is flipped and the user does modprobe phy-sata 
  first. The
  phy_names won't match anymore (the sata phy device name would be 
  sata-usb.0).
 
  Actually, I don't think there would be this problem if we used the
  name of the actual device which is the parent of phy devices, right?
 
  hmm.. but if the parent is a multi-phy phy provider (like pipe3 PHY 
  driver), we
  might end up with the same problem.
  
  I'm not completely sure what you mean? If you are talking about
  platforms with multiple instances of a single phy, I don't see how
  there could ever be a scenario where we did not know the order in
  which they were enumerated. Can you give an example again?
 
 If a single IP implements multiple PHYs (phy-miphy365x.c in linux-phy next),
 the parent for all the phy devices would be the same.

OK, got it. So I guess we need to match to the phy dev and to the phy
name. First to the dev and then in case the phy name is defined in the
lookup, to that as well. That should cover both cases.


Thanks,

-- 
heikki
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v6 07/12] usb: chipidea: add a usb2 driver for ci13xxx

2014-09-23 Thread Antoine Tenart
Arnd,

On Tue, Sep 23, 2014 at 12:39:04PM +0200, Arnd Bergmann wrote:
 On Tuesday 23 September 2014 12:28:03 Antoine Tenart wrote:
  +   if (dev-of_node) {
  +   ret = ci_hdrc_usb2_dt_probe(dev, ci_pdata);
  +   if (ret)
  +   goto clk_err;
  +   } else {
  +   ret = dma_set_mask_and_coherent(pdev-dev, 
  DMA_BIT_MASK(32));
  +   if (ret)
  +   goto clk_err;
  +   }
  
 
 Why do you care about the non-DT case here? I think it would be nicer to
 open-code the ci_hdrc_usb2_dt_probe() function in here and remove
 the dma_set_mask_and_coherent(), which should not even be necessary for
 the case where you have a hardwired platform device.
 

I thought we agreed to call dma_set_mask_and_coherent():
http://lists.infradead.org/pipermail/linux-arm-kernel/2014-July/273335.html

I do not have a strong opinion on this as I only use the dt case for my
usage.


Antoine

-- 
Antoine Ténart, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 0/6] libusbg: Add remove gadget/config/func/binding functionality.

2014-09-23 Thread Matt Porter
On Tue, Mar 18, 2014 at 09:29:00PM +0100, Krzysztof Opasiak wrote:
 Dear Matt,
 
 In this series of patch I have added remove gadget, config, function,
 binding functionality which was missing since introduction of library.
 
 I have also added remove strings functionality which allow to remove
 gadget and configuration strings in given language.
 
 To show how to use new part of API I have also added example
 gadget-vid-pid-remove which removes gadget created by
 gadget-acm-ecm (identified using VID and PID).
 
 This series of patch depends on all my previous series which you can
 find on a list or in github pull request.

Applied to master, thanks.

-Matt

 ---
 Changes since v1:
 - rebased on [1] and adjust to new memory management conventions
 - Replace sprintf with snprintf
 
 1 - http://article.gmane.org/gmane.linux.usb.general/105164
 
 Changes since v2:
 - rebased on v2 of earlier mentioned patch series
 - use sizeof(target) in snprintf() instead of macro with direct size
 - use USBG_MAX_PATH_LENGTH instead of PATH_MAX
 - clean up topic from unwanted patches added by mistake
 
 Krzysztof Opasiak (6):
   libusbg: Add remove binding functionality.
   libusbg: Add remove gadget/config strings functionality.
   libusbg: Add remove configuration functionality.
   libusbg: Add remove function functionality.
   libusbg: Add remove gadget functionality.
   libusbg: Update examples to new API functionality.
 
  examples/Makefile.am |3 +-
  examples/gadget-vid-pid-remove.c |  113 +
  include/usbg/usbg.h  |   57 -
  src/usbg.c   |  259 
 ++
  4 files changed, 430 insertions(+), 2 deletions(-)
  create mode 100644 examples/gadget-vid-pid-remove.c
 
 -- 
 1.7.9.5
 
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 0/4] libusbg: Fix potential issues found with coverity

2014-09-23 Thread Matt Porter
On Tue, May 13, 2014 at 05:13:18PM +0300, Philippe De Swert wrote:
 This patch series fixes a number of issues found with coverity in libusbg
 A pull request has also be made:
 https://github.com/libusbg/libusbg/pull/4
 
 This is the second version where we use a different fix for the readlink,
 actually use the right USB_MAX_STR_LENGTH define. I also fixed an issue
 I missed first time around.

Thanks, applied to master.

-Matt

 Philippe De Swert (4):
   libusbg: Fix readlink/buffer overrun issue. CID#56130, CID#56129
   libusbg: Fix buffer overrun issue. CID#56128
   libusbg: Do not try to dereference func when it is NULL. CID#56127
   libusbg: Do not dereference usb config attributes when they are NULL.
 CID#56126
 
  src/usbg.c | 7 ---
  1 file changed, 4 insertions(+), 3 deletions(-)
 
 -- 
 1.8.1.2
 
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH fix for 3.17] uas: Add another ASM1051 usb-id to the uas blacklist

2014-09-23 Thread Hans de Goede
As most ASM1051 based devices, this one has unfixable issues with uas too.

Cc: sta...@vger.kernel.org # 3.16
Signed-off-by: Hans de Goede hdego...@redhat.com
---
 drivers/usb/storage/unusual_uas.h | 8 
 1 file changed, 8 insertions(+)

diff --git a/drivers/usb/storage/unusual_uas.h 
b/drivers/usb/storage/unusual_uas.h
index 94fb09f..8511b54 100644
--- a/drivers/usb/storage/unusual_uas.h
+++ b/drivers/usb/storage/unusual_uas.h
@@ -67,3 +67,11 @@ UNUSUAL_DEV(0x152d, 0x0567, 0x, 0x,
JMS567,
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
US_FL_NO_REPORT_OPCODES),
+
+/* Most ASM1051 based devices have issues with uas, blacklist them all */
+/* Reported-by: Hans de Goede hdego...@redhat.com */
+UNUSUAL_DEV(0x174c, 0x5106, 0x, 0x,
+   ASMedia,
+   ASM1051,
+   USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+   US_FL_IGNORE_UAS),
-- 
2.1.0

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 0/4] libusbg: Add support for functionfs

2014-09-23 Thread Matt Porter
On Wed, Jun 11, 2014 at 05:09:46PM +0200, Krzysztof Opasiak wrote:
 Dear Matt,
 
 Configuration of function fs based functions using config fs has been
 merged to linux kernel quite long ago. To keep libusbg up to date I
 have prepared patches that add support for functionfs function type.
 
 When working with ffs I noticed that it would be a good feature to
 provide device name directly to user and avoid him confusion that
 instance name has to be the same as device to mount ffs. That's why I
 have added structure for ffs attributes which has only one, pure
 virtual (not present in configfs and read-only) attribute dev_name.
 
 Now user can create ffs function in a two ways:
 
 1) Pass instance name name and then get function attributes (device
 name)
 
 2) Pass NULL as instance name and pass function attributes with
 desired device name

This is great, I just made use of this in an application I'm working
on now and like it.

 First commit in this serie fix potential memory leak which could
 take place in usbg_init(). To avoid this usbg_init() has been
 refactored and now all memory should be free() properly.
 
 I have created pull request on github with those patches [1].
 
 Please also notice that there are still two pending patch series:
 
 1) Remove gadget functionality [2]
 This one has been changed according to your review but is still
 pending for over a month.
 
 2) Couple fixes from Philippe De Swert [3]
 That's a few commits which fix errors reported by coverity.
 I have reviewed this serie, build and run and it looks good
 to me. Please also run through this code and merge if you
 don't find anny issues.
 

Applied to master, thanks!

-Matt
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] usb: core: downgrade log severity to info when descriptor missing

2014-09-23 Thread Alan Stern
On Mon, 22 Sep 2014, Scot Doyle wrote:

 According to commit 0cce2eda19923e5e5ccc8b042dec5af87b3ffad0
 USB: fix LANGID=0 regression
 
 usb devices are not required to report string descriptors. Since they are
 optional, log an info message instead of an error message. In addition,
 use a higher level info message while moving the details to a debug message.
 
 Tested with USB device 0930:021c.

This is a good description, but it's not what the patch actually does.

 Signed-off-by: Scot Doyle lkm...@scotdoyle.com
 ---
  drivers/usb/core/message.c | 14 +-
  1 file changed, 13 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
 index 0c8a7fc..6b95de7 100644
 --- a/drivers/usb/core/message.c
 +++ b/drivers/usb/core/message.c
 @@ -766,7 +766,7 @@ static int usb_get_langid(struct usb_device *dev, 
 unsigned char *tbuf)
 
   /* If the string was reported but is malformed, default to english
* (0x0409) */
 - if (err == -ENODATA || (err  0  err  4)) {
 + if (err  0  err  4) {

Why treat ENODATA as a separate case?  It's just like the others -- the 
device returned some data, but the data was malformed.

If the device really does not support string descriptors at all, err
would be equal to -EPIPE.

   dev-string_langid = 0x0409;
   dev-have_langid = 1;
   dev_err(dev-dev,
 @@ -776,6 +776,18 @@ static int usb_get_langid(struct usb_device *dev, 
 unsigned char *tbuf)
   return 0;
   }
 
 + /* If the string was unavailable, default to english (0x0409) */

-ENODATA doesn't mean the string was unavailable.  It means that the
second byte of the reply was different from USB_DT_STRING, i.e., the
reply was malformed.

 + if (err == -ENODATA) {
 + dev-string_langid = 0x0409;
 + dev-have_langid = 1;
 + dev_info(dev-dev,
 + no string descriptor language, defaulting to English);
 + dev_dbg(dev-dev,
 + string descriptor 0 unavailable (err = -ENODATA), 
 + defaulting to 0x%04x\n, dev-string_langid);
 + return 0;
 + }

Therefore this section is completely unnecessary.

 +
   /* In case of all other errors, we assume the device is not able to
* deal with strings at all. Set string_langid to -1 in order to
* prevent any string to be retrieved from the device */

And down here is where you should call either dev_info() or dev_err(), 
depending on whether err is equal to -EPIPE or something else.

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] libusbg: Fix usbg_disable_gadget to actually clear the UDC

2014-09-23 Thread Tony Lindgren
* Krzysztof Opasiak k.opas...@samsung.com [140923 03:22]:
  -Original Message-
  From: Tony Lindgren [mailto:t...@atomide.com]
  Sent: Monday, September 22, 2014 3:17 PM
  To: Krzysztof Opasiak
  Cc: 'Matt Porter'; linux-usb@vger.kernel.org; Stanislaw Wadas;
  Andrzej Pietrasiewicz; Marek Szyprowski; Karol Lewandowski;
  philippedesw...@gmail.com
  Subject: Re: [PATCH] libusbg: Fix usbg_disable_gadget to actually
  clear the UDC
  
  * Krzysztof Opasiak k.opas...@samsung.com [140922 01:07]:
   Dear Tony,
  
-Original Message-
From: linux-usb-ow...@vger.kernel.org [mailto:linux-usb-
ow...@vger.kernel.org] On Behalf Of Tony Lindgren
Sent: Saturday, September 20, 2014 5:51 PM
To: Matt Porter
Cc: linux-usb@vger.kernel.org
Subject: [PATCH] libusbg: Fix usbg_disable_gadget to actually
  clear
the UDC
   
Currently usbg_disable_gadget() does not actually write
  anything
to UDC to clear it and the configured UDC name stays there.
   
  
   No, udc name doesn't stay there due to O_TRUNC flag which is
  always used
   for writing in usbg_write_string(). With this flag we don't need
  to
   write new line to file because size of file is set to 0 while
  opening.
  
   Summing up:
  
   open(/sys/kernel/config/usb_gadget/g1/UDC,
  O_WRONLY|O_CREAT|O_TRUNC,
   0666) = 3
   close(3)= 0
  
   causes unbind, so everything works fine.
  
  Hmm not clearing for me doing this afterwards:
  
  # cat /sys/kernel/config/usb_gadget/g1/UDC
  musb-hdrc.0.auto
  
  The UDC name stays there and won't get cleared.
  
  Am I missing something?
 
 Please forgive me, I have checked it once again and you are right. I
 thought that truncate flag works on configfs in a similar way than on
 others fs but I was wrong. This flag simply does nothing and you have
 definitely found a bug.
 
 I was certain sure that this function works fine due to
 gadget-vid-pid-remove example. In this simple program gadget is disabled
 before removing. I had in my mind that it is impossible to modify a
 gadget if it is bound to any udc. This example worked fine so I assumed
 that usbg_disable_gadget() also works fine. I have look into configfs
 composite gadget source and there I have found some surprise:
 
   /*
* ideally I would like to forbid to unlink functions while a
 gadget is
* bound to an UDC. Since this isn't possible at the moment, we
 simply
* force an unbind, the function is available here and then we
 can
* remove the function.
*/
   mutex_lock(gi-lock);
   if (gi-udc_name)
   unregister_gadget(gi);
   WARN_ON(gi-udc_name);
 
 This means that it is currently possible to remove function binding on
 enabled gadget and it will cause unbind. This is why usbg_rm_gadget()
 also worked fine without proper usbg_disable_gadget().
 
 Summing up, Your patch fix an important bug. Its form is good for me. I
 have checked it and it works fine. You may add:
 
 Reviewed-by: Krzysztof Opasiak k.opas...@samsung.com
 
 If it is going about Matt Porter activity, he is not responding for
 mails or patches since April. I have github-fork of libusbg [1] with
 latest source (my master is 35 commits ahead of libusbg/master and some
 devel branches are even more). All patches which are intended for
 libusbg (sent on a list or from pull requests) are merged there after
 review.

Oh OK maybe he's busy with other things then. I'll give your branch
a try then.
 
 Please let me also notice that your patch has been also merged into my
 master.

OK thanks.
 
 Thank you for fixing this issue.

No problem, thanks for queueing the pending patches.

Is there an example somewhere that completely clears any configured
gadget from /sys/config/?

Regards,

Tony
 
 Foot notes:
 1 - https://github.com/kopasiak/libusbg
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 00/15] Add import from/export to file functionality

2014-09-23 Thread Matt Porter
On Mon, Aug 25, 2014 at 10:54:51AM +0200, Krzysztof Opasiak wrote:
 Dear Matt,
 
 This quite big series adds new part of libusbg API which allows to
 import/export gadget/function/configuration from/to file.
 
 Motivation:
 
 Libusbg allows to create a binary file which set up custom
 gadget. This is useful but if we have to create custom binary for
 each gadget we wast a lot of work which kernel people put to separate
 code from configuration. This leads us to main idea of gadget
 schemes. Allow to create simple, human readable config file which
 library will be able to translate into usb gadget.
 
 Description:
 
 Gadget schemes is idea of describing gadget/function/configuration in
 config file. To not reinvent the wheel I have used existing library
 libconfig [1]. This means that the syntax is similar to this described
 in documentation of libconfig.

Thank goodness. Apparently you read my mind and avoided use of xml and
json here. I've used libconfig before and really like the human
readable/creatable syntax.

 
 I have extended the library with set of usbg_export_*() functions
 which allows to export selected gadget to given FILE. There is also
 set of complementary usbg_import_*() functions which allows to read
 scheme of gadget/function/config from file and create it using
 configfs.
 
 To avoid name conflict I have used the convention that
 usbg_import_gadget() function takes name of new gadget as parameter
 and usbg_export_gadget() doesn't export gadget name to scheme
 file. Similar idea is used in configuration and functions.
 
 Base convention of gadget schemes is simple: if something is not set
 in scheme file, default values provided by kernel are used. Moreover
 configfs has some attributes which are read only. To allow to store
 them in scheme file they are ignored by import functions.
 
 Usage of libconfig and whole design of gadget schemes allows us to use
 include directive in gadget definition to import complicated
 configurations or functions.
 
 Syntax and detailed rules of using schemes has been described in
 gadget_schemes.txt in commit:
 
snip

 Summary:
 
 I have created a pull request also for this series:
 
 https://github.com/libusbg/libusbg/pull/8

Applied this to master, thanks.

 
 Feel free to provide your comments about the whole idea and also about
 its implementation.

It all looks good, my major concern when you had first mentioned this
was about was schema/format would be used. APIs look great, and I've
tested this with my own WIP application and it works quite nicely.
Thanks for adding this feature.

-Matt
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 0/2] USB: core: add add device-qualifier quirk

2014-09-23 Thread Johan Hovold
On Mon, Aug 25, 2014 at 05:51:25PM +0200, Johan Hovold wrote:
 This is quirk is indeed needed to get the Elan Touchscreen found on some
 Samsung laptops to enumerate reliably.

[...]

 Johan Hovold (2):
   USB: core: add device-qualifier quirk
   USB: quirks: enable device-qualifier quirk for Elan Touchscreen

Are these patches still in your queue, Greg? Just checking now that the
merge window is around the corner.

Thanks,
Johan
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH] libusbg: Fix usbg_disable_gadget to actually clear the UDC

2014-09-23 Thread Krzysztof Opasiak


 -Original Message-
 From: Tony Lindgren [mailto:t...@atomide.com]
 Sent: Tuesday, September 23, 2014 4:34 PM
 To: Krzysztof Opasiak
 Cc: 'Matt Porter'; linux-usb@vger.kernel.org; Stanislaw Wadas;
 Andrzej Pietrasiewicz; Marek Szyprowski; Karol Lewandowski;
 philippedesw...@gmail.com
 Subject: Re: [PATCH] libusbg: Fix usbg_disable_gadget to actually
 clear the UDC
 
 * Krzysztof Opasiak k.opas...@samsung.com [140923 03:22]:
   -Original Message-
   From: Tony Lindgren [mailto:t...@atomide.com]
   Sent: Monday, September 22, 2014 3:17 PM
   To: Krzysztof Opasiak
   Cc: 'Matt Porter'; linux-usb@vger.kernel.org; Stanislaw Wadas;
   Andrzej Pietrasiewicz; Marek Szyprowski; Karol Lewandowski;
   philippedesw...@gmail.com
   Subject: Re: [PATCH] libusbg: Fix usbg_disable_gadget to
 actually
   clear the UDC
  
   * Krzysztof Opasiak k.opas...@samsung.com [140922 01:07]:
Dear Tony,
   
 -Original Message-
 From: linux-usb-ow...@vger.kernel.org [mailto:linux-usb-
 ow...@vger.kernel.org] On Behalf Of Tony Lindgren
 Sent: Saturday, September 20, 2014 5:51 PM
 To: Matt Porter
 Cc: linux-usb@vger.kernel.org
 Subject: [PATCH] libusbg: Fix usbg_disable_gadget to
 actually
   clear
 the UDC

 Currently usbg_disable_gadget() does not actually write
   anything
 to UDC to clear it and the configured UDC name stays there.

   
No, udc name doesn't stay there due to O_TRUNC flag which is
   always used
for writing in usbg_write_string(). With this flag we don't
 need
   to
write new line to file because size of file is set to 0 while
   opening.
   
Summing up:
   
open(/sys/kernel/config/usb_gadget/g1/UDC,
   O_WRONLY|O_CREAT|O_TRUNC,
0666) = 3
close(3)= 0
   
causes unbind, so everything works fine.
  
   Hmm not clearing for me doing this afterwards:
  
   # cat /sys/kernel/config/usb_gadget/g1/UDC
   musb-hdrc.0.auto
  
   The UDC name stays there and won't get cleared.
  
   Am I missing something?
 
  Please forgive me, I have checked it once again and you are
 right. I
  thought that truncate flag works on configfs in a similar way
 than on
  others fs but I was wrong. This flag simply does nothing and you
 have
  definitely found a bug.
 
  I was certain sure that this function works fine due to
  gadget-vid-pid-remove example. In this simple program gadget is
 disabled
  before removing. I had in my mind that it is impossible to modify
 a
  gadget if it is bound to any udc. This example worked fine so I
 assumed
  that usbg_disable_gadget() also works fine. I have look into
 configfs
  composite gadget source and there I have found some surprise:
 
  /*
   * ideally I would like to forbid to unlink functions while a
  gadget is
   * bound to an UDC. Since this isn't possible at the moment,
 we
  simply
   * force an unbind, the function is available here and then
 we
  can
   * remove the function.
   */
  mutex_lock(gi-lock);
  if (gi-udc_name)
  unregister_gadget(gi);
  WARN_ON(gi-udc_name);
 
  This means that it is currently possible to remove function
 binding on
  enabled gadget and it will cause unbind. This is why
 usbg_rm_gadget()
  also worked fine without proper usbg_disable_gadget().
 
  Summing up, Your patch fix an important bug. Its form is good for
 me. I
  have checked it and it works fine. You may add:
 
  Reviewed-by: Krzysztof Opasiak k.opas...@samsung.com
 
  If it is going about Matt Porter activity, he is not responding
 for
  mails or patches since April. I have github-fork of libusbg [1]
 with
  latest source (my master is 35 commits ahead of libusbg/master
 and some
  devel branches are even more). All patches which are intended for
  libusbg (sent on a list or from pull requests) are merged there
 after
  review.
 
 Oh OK maybe he's busy with other things then. I'll give your branch
 a try then.
 
  Please let me also notice that your patch has been also merged
 into my
  master.
 
 OK thanks.
 
  Thank you for fixing this issue.
 
 No problem, thanks for queueing the pending patches.
 
 Is there an example somewhere that completely clears any configured
 gadget from /sys/config/?
 

Yes, please check my master branch.

There is a set of functions: usbg_rm_*() which can be used to remove
selected entity. The most convenient usage for gadget is to use
usbg_rm_gadget() with USBG_RM_RECURSE flag which works quite like rm -rf
*.

There is also an example called gadget-vid-pid-remove which removes all
gadgets based on vid and pid. Currently this example is hardcoded to
remove gadget with vid 0x1d6b and pid 0x0104 (those are used along
almost all examples) but you may easily edit it to take vid pid or
gadget name from command line.

Moreover there is also a command line tool called gt [1] to manipulate
usb gadgets but it's in very initial state (only command line parsing is
ready). This tool would do the 

Re: [PATCH] libusbg: Fix usbg_disable_gadget to actually clear the UDC

2014-09-23 Thread Tony Lindgren
* Krzysztof Opasiak k.opas...@samsung.com [140923 07:48]:
  From: Tony Lindgren [mailto:t...@atomide.com]
 
  Is there an example somewhere that completely clears any configured
  gadget from /sys/config/?
  
 
 Yes, please check my master branch.
 
 There is a set of functions: usbg_rm_*() which can be used to remove
 selected entity. The most convenient usage for gadget is to use
 usbg_rm_gadget() with USBG_RM_RECURSE flag which works quite like rm -rf
 *.
 
 There is also an example called gadget-vid-pid-remove which removes all
 gadgets based on vid and pid. Currently this example is hardcoded to
 remove gadget with vid 0x1d6b and pid 0x0104 (those are used along
 almost all examples) but you may easily edit it to take vid pid or
 gadget name from command line.
 
 Moreover there is also a command line tool called gt [1] to manipulate
 usb gadgets but it's in very initial state (only command line parsing is
 ready). This tool would do the thing in a future but currently this
 functionality is not implemented.

OK great thanks.

Tony
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] Revert usb: gadget: composite: dequeue cdev-req before free it in composite_dev_cleanup

2014-09-23 Thread Greg KH
On Mon, Sep 22, 2014 at 09:28:26AM -0500, Felipe Balbi wrote:
 Hi,
 
 On Thu, Sep 18, 2014 at 09:31:32AM -0500, Felipe Balbi wrote:
  This reverts commit f2267089ea17fa97b796b1b4247e3f8957655df3.
  
  That commit causes more problem than fixes. Firstly, kfree()
  should be called after usb_ep_dequeue() and secondly, the way
  things are, we will try to dequeue a request that has already
  completed much more frequently than one which is pending.
  
  Cc: Li Jun b47...@freescale.com
  Signed-off-by: Felipe Balbi ba...@ti.com
  ---
  
  Greg, can you still apply this for v3.17 final ? Please take it as a patch
  directly so we avoid a pull request for a single patch. If you prefer a 
  pull,
  let me know.
 
 looks like -rc6 will be the last -rc for v3.17. If we can't get this on
 v3.17-final, do you mind merging this on usb-next and add a Cc stable
 #3.17 ?

Ick, sorry, missed this for an earlier release, will go do this now and
queue it up that way.

greg k-h
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 0/2] USB: core: add add device-qualifier quirk

2014-09-23 Thread Greg Kroah-Hartman
On Tue, Sep 23, 2014 at 04:56:24PM +0200, Johan Hovold wrote:
 On Mon, Aug 25, 2014 at 05:51:25PM +0200, Johan Hovold wrote:
  This is quirk is indeed needed to get the Elan Touchscreen found on some
  Samsung laptops to enumerate reliably.
 
 [...]
 
  Johan Hovold (2):
USB: core: add device-qualifier quirk
USB: quirks: enable device-qualifier quirk for Elan Touchscreen
 
 Are these patches still in your queue, Greg? Just checking now that the
 merge window is around the corner.

My queue is huge and I hope to tackle it tonight...

thanks,

greg k-h
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] Revert usb: gadget: composite: dequeue cdev-req before free it in composite_dev_cleanup

2014-09-23 Thread Felipe Balbi
On Tue, Sep 23, 2014 at 07:55:38AM -0700, Greg KH wrote:
 On Mon, Sep 22, 2014 at 09:28:26AM -0500, Felipe Balbi wrote:
  Hi,
  
  On Thu, Sep 18, 2014 at 09:31:32AM -0500, Felipe Balbi wrote:
   This reverts commit f2267089ea17fa97b796b1b4247e3f8957655df3.
   
   That commit causes more problem than fixes. Firstly, kfree()
   should be called after usb_ep_dequeue() and secondly, the way
   things are, we will try to dequeue a request that has already
   completed much more frequently than one which is pending.
   
   Cc: Li Jun b47...@freescale.com
   Signed-off-by: Felipe Balbi ba...@ti.com
   ---
   
   Greg, can you still apply this for v3.17 final ? Please take it as a patch
   directly so we avoid a pull request for a single patch. If you prefer a 
   pull,
   let me know.
  
  looks like -rc6 will be the last -rc for v3.17. If we can't get this on
  v3.17-final, do you mind merging this on usb-next and add a Cc stable
  #3.17 ?
 
 Ick, sorry, missed this for an earlier release, will go do this now and
 queue it up that way.

Thanks

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH 0/2] USB: core: add add device-qualifier quirk

2014-09-23 Thread Johan Hovold
On Tue, Sep 23, 2014 at 08:21:51AM -0700, Greg Kroah-Hartman wrote:
 On Tue, Sep 23, 2014 at 04:56:24PM +0200, Johan Hovold wrote:
  On Mon, Aug 25, 2014 at 05:51:25PM +0200, Johan Hovold wrote:
   This is quirk is indeed needed to get the Elan Touchscreen found on some
   Samsung laptops to enumerate reliably.
  
  [...]
  
   Johan Hovold (2):
 USB: core: add device-qualifier quirk
 USB: quirks: enable device-qualifier quirk for Elan Touchscreen
  
  Are these patches still in your queue, Greg? Just checking now that the
  merge window is around the corner.
 
 My queue is huge and I hope to tackle it tonight...

Yeah, that's the impression I got.

Just a heads up: There was another quirk submitted after this one that
uses the same quirk mask.

Good luck with the queue. :)

Johan
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] libusbg: Fix usbg_disable_gadget to actually clear the UDC

2014-09-23 Thread 'Matt Porter'
On Tue, Sep 23, 2014 at 12:21:01PM +0200, Krzysztof Opasiak wrote:
  -Original Message-
  From: Tony Lindgren [mailto:t...@atomide.com]
  Sent: Monday, September 22, 2014 3:17 PM
  To: Krzysztof Opasiak
  Cc: 'Matt Porter'; linux-usb@vger.kernel.org; Stanislaw Wadas;
  Andrzej Pietrasiewicz; Marek Szyprowski; Karol Lewandowski;
  philippedesw...@gmail.com
  Subject: Re: [PATCH] libusbg: Fix usbg_disable_gadget to actually
  clear the UDC
  
  * Krzysztof Opasiak k.opas...@samsung.com [140922 01:07]:
   Dear Tony,
  
-Original Message-
From: linux-usb-ow...@vger.kernel.org [mailto:linux-usb-
ow...@vger.kernel.org] On Behalf Of Tony Lindgren
Sent: Saturday, September 20, 2014 5:51 PM
To: Matt Porter
Cc: linux-usb@vger.kernel.org
Subject: [PATCH] libusbg: Fix usbg_disable_gadget to actually
  clear
the UDC
   
Currently usbg_disable_gadget() does not actually write
  anything
to UDC to clear it and the configured UDC name stays there.
   
  
   No, udc name doesn't stay there due to O_TRUNC flag which is
  always used
   for writing in usbg_write_string(). With this flag we don't need
  to
   write new line to file because size of file is set to 0 while
  opening.
  
   Summing up:
  
   open(/sys/kernel/config/usb_gadget/g1/UDC,
  O_WRONLY|O_CREAT|O_TRUNC,
   0666) = 3
   close(3)= 0
  
   causes unbind, so everything works fine.
  
  Hmm not clearing for me doing this afterwards:
  
  # cat /sys/kernel/config/usb_gadget/g1/UDC
  musb-hdrc.0.auto
  
  The UDC name stays there and won't get cleared.
  
  Am I missing something?
 
 Please forgive me, I have checked it once again and you are right. I
 thought that truncate flag works on configfs in a similar way than on
 others fs but I was wrong. This flag simply does nothing and you have
 definitely found a bug.
 
 I was certain sure that this function works fine due to
 gadget-vid-pid-remove example. In this simple program gadget is disabled
 before removing. I had in my mind that it is impossible to modify a
 gadget if it is bound to any udc. This example worked fine so I assumed
 that usbg_disable_gadget() also works fine. I have look into configfs
 composite gadget source and there I have found some surprise:
 
   /*
* ideally I would like to forbid to unlink functions while a
 gadget is
* bound to an UDC. Since this isn't possible at the moment, we
 simply
* force an unbind, the function is available here and then we
 can
* remove the function.
*/
   mutex_lock(gi-lock);
   if (gi-udc_name)
   unregister_gadget(gi);
   WARN_ON(gi-udc_name);
 
 This means that it is currently possible to remove function binding on
 enabled gadget and it will cause unbind. This is why usbg_rm_gadget()
 also worked fine without proper usbg_disable_gadget().
 
 Summing up, Your patch fix an important bug. Its form is good for me. I
 have checked it and it works fine. You may add:
 
 Reviewed-by: Krzysztof Opasiak k.opas...@samsung.com
 
 If it is going about Matt Porter activity, he is not responding for
 mails or patches since April. I have github-fork of libusbg [1] with
 latest source (my master is 35 commits ahead of libusbg/master and some
 devel branches are even more). All patches which are intended for
 libusbg (sent on a list or from pull requests) are merged there after
 review.
 
 Please let me also notice that your patch has been also merged into my
 master.
 
 Thank you for fixing this issue.

Also verified that it fixes the issue here. Applied to master [1] along
with all of the backlog, excluding the WIP usbg_udc patches. Thanks for
everybody's patience.

-Matt

[1] https://github.com/libusbg/libusbg
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v6 07/12] usb: chipidea: add a usb2 driver for ci13xxx

2014-09-23 Thread Arnd Bergmann
On Tuesday 23 September 2014 15:36:45 Antoine Tenart wrote:
 On Tue, Sep 23, 2014 at 12:39:04PM +0200, Arnd Bergmann wrote:
  On Tuesday 23 September 2014 12:28:03 Antoine Tenart wrote:
   +   if (dev-of_node) {
   +   ret = ci_hdrc_usb2_dt_probe(dev, ci_pdata);
   +   if (ret)
   +   goto clk_err;
   +   } else {
   +   ret = dma_set_mask_and_coherent(pdev-dev, 
   DMA_BIT_MASK(32));
   +   if (ret)
   +   goto clk_err;
   +   }
   
  
  Why do you care about the non-DT case here? I think it would be nicer to
  open-code the ci_hdrc_usb2_dt_probe() function in here and remove
  the dma_set_mask_and_coherent(), which should not even be necessary for
  the case where you have a hardwired platform device.
  
 
 I thought we agreed to call dma_set_mask_and_coherent():
 http://lists.infradead.org/pipermail/linux-arm-kernel/2014-July/273335.html
 
 I do not have a strong opinion on this as I only use the dt case for my
 usage.

The question is more about who actually wants the non-DT case.

Since this is a new driver, I suspect that the answer is nobody,
as the existing board files are all for legacy platforms that we
are not going to adapt for this driver.

I see in the thread that at least Peter Chen was assuming the non-DT
case was still needed, but I can't find a reason for this in the code.
If we no longer care about that, the call to dev_get_platdata()
can also get removed.

Looking through the code some more, I also notice that it's using
a strange way of doing the abstraction: ci_hdrc_add_device()
actually creates a child device node, while the preferred way would
be to just call into ci_hdrc_probe(), or a generalized version of
that.
That should probably be changed, but can be done as a later cleanup.


Arnd
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v6 07/12] usb: chipidea: add a usb2 driver for ci13xxx

2014-09-23 Thread Felipe Balbi
HI,

On Tue, Sep 23, 2014 at 06:44:40PM +0200, Arnd Bergmann wrote:
 On Tuesday 23 September 2014 15:36:45 Antoine Tenart wrote:
  On Tue, Sep 23, 2014 at 12:39:04PM +0200, Arnd Bergmann wrote:
   On Tuesday 23 September 2014 12:28:03 Antoine Tenart wrote:
+   if (dev-of_node) {
+   ret = ci_hdrc_usb2_dt_probe(dev, ci_pdata);
+   if (ret)
+   goto clk_err;
+   } else {
+   ret = dma_set_mask_and_coherent(pdev-dev, 
DMA_BIT_MASK(32));
+   if (ret)
+   goto clk_err;
+   }

   
   Why do you care about the non-DT case here? I think it would be nicer to
   open-code the ci_hdrc_usb2_dt_probe() function in here and remove
   the dma_set_mask_and_coherent(), which should not even be necessary for
   the case where you have a hardwired platform device.
   
  
  I thought we agreed to call dma_set_mask_and_coherent():
  http://lists.infradead.org/pipermail/linux-arm-kernel/2014-July/273335.html
  
  I do not have a strong opinion on this as I only use the dt case for my
  usage.
 
 The question is more about who actually wants the non-DT case.
 
 Since this is a new driver, I suspect that the answer is nobody,
 as the existing board files are all for legacy platforms that we
 are not going to adapt for this driver.

wait a minute... will the legacy platforms be adapted to DT and, thus,
to this driver in the future ? I really don't want to keep several
copies of chipidea driver just because there are still some legacy
platforms still using them. I have said in the past and will say again,
everybody should move to the generic chipidea driver at the earliest
opportunity so we avoid duplication of work.

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v6 07/12] usb: chipidea: add a usb2 driver for ci13xxx

2014-09-23 Thread Arnd Bergmann
On Tuesday 23 September 2014 11:55:15 Felipe Balbi wrote:
 On Tue, Sep 23, 2014 at 06:44:40PM +0200, Arnd Bergmann wrote:
  On Tuesday 23 September 2014 15:36:45 Antoine Tenart wrote:
   On Tue, Sep 23, 2014 at 12:39:04PM +0200, Arnd Bergmann wrote:
On Tuesday 23 September 2014 12:28:03 Antoine Tenart wrote:
 +   if (dev-of_node) {
 +   ret = ci_hdrc_usb2_dt_probe(dev, ci_pdata);
 +   if (ret)
 +   goto clk_err;
 +   } else {
 +   ret = dma_set_mask_and_coherent(pdev-dev, 
 DMA_BIT_MASK(32));
 +   if (ret)
 +   goto clk_err;
 +   }
 

Why do you care about the non-DT case here? I think it would be nicer to
open-code the ci_hdrc_usb2_dt_probe() function in here and remove
the dma_set_mask_and_coherent(), which should not even be necessary for
the case where you have a hardwired platform device.

   
   I thought we agreed to call dma_set_mask_and_coherent():
   http://lists.infradead.org/pipermail/linux-arm-kernel/2014-July/273335.html
   
   I do not have a strong opinion on this as I only use the dt case for my
   usage.
  
  The question is more about who actually wants the non-DT case.
  
  Since this is a new driver, I suspect that the answer is nobody,
  as the existing board files are all for legacy platforms that we
  are not going to adapt for this driver.
 
 wait a minute... will the legacy platforms be adapted to DT and, thus,
 to this driver in the future ? I really don't want to keep several
 copies of chipidea driver just because there are still some legacy
 platforms still using them. I have said in the past and will say again,
 everybody should move to the generic chipidea driver at the earliest
 opportunity so we avoid duplication of work.
 

Sorry, my mistake. The intention that this new driver is meant to
replace the existing ones wasn't clear to me from the changelog,
and if I'd been involved in the discussion before, then I've forgotten
about it.

It absolutely makes sense to migrate to a common driver, and in that
case we should keep the platform_data handling and dma_set_mask_and_coherent()
call in there, so we can do the two conversions (migrating from platform
specific frontends to the generic one, and migrating from platform_data
to DT) on independent schedules. Eventually I'd like all of the existing
users of the platform_data path to move to DT, but that should not
hold up the other cleanup if it takes longer.

There is however still my point that we shouldn't have an extra platform
device that is not attached to the device node. I think the generic driver
should just be part of the common code, without an extra framework.
Something like the (entirely untested) patch below.

Arnd

---
diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
index 9563cb56d564..a2b20c1342f1 100644
--- a/drivers/usb/chipidea/ci.h
+++ b/drivers/usb/chipidea/ci.h
@@ -207,6 +207,7 @@ struct ci_hdrc {
boolid_event;
boolb_sess_valid_event;
boolimx28_write_fix;
+   struct clk  *clk;
 };
 
 static inline struct ci_role_driver *ci_role(struct ci_hdrc *ci)
diff --git a/drivers/usb/chipidea/ci_hdrc_usb2.c 
b/drivers/usb/chipidea/ci_hdrc_usb2.c
index 6eae1de587f2..03ef35997dd8 100644
--- a/drivers/usb/chipidea/ci_hdrc_usb2.c
+++ b/drivers/usb/chipidea/ci_hdrc_usb2.c
@@ -70,6 +70,7 @@ static int ci_hdrc_usb2_probe(struct platform_device *pdev)
}
 
if (dev-of_node) {
+   ret = ci_get_platdata(dev, platdata);
ret = ci_hdrc_usb2_dt_probe(dev, ci_pdata);
if (ret)
goto clk_err;
diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index 619d13e29995..32613751e731 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -478,6 +478,15 @@ static int ci_get_platdata(struct device *dev,
if (of_usb_get_maximum_speed(dev-of_node) == USB_SPEED_FULL)
platdata-flags |= CI_HDRC_FORCE_FULLSPEED;
 
+   platdata-phy = of_phy_get(dev-of_node, 0);
+   if (IS_ERR(platdata-phy)) {
+   if (PTR_ERR(platdata-phy) == -EPROBE_DEFER)
+   return -EPROBE_DEFER;
+
+   /* PHY is optional */
+   platdata-phy = NULL;
+   }
+
return 0;
 }
 
@@ -559,6 +568,12 @@ static void ci_get_otg_capable(struct ci_hdrc *ci)
dev_dbg(ci-dev, It is OTG capable controller\n);
 }
 
+static const struct ci_hdrc_platform_data ci_default_pdata = {
+   .capoffset  = DEF_CAPOFFSET,
+   .flags  = CI_HDRC_REQUIRE_TRANSCEIVER |
+ CI_HDRC_DISABLE_STREAMING,
+};
+
 static int ci_hdrc_probe(struct platform_device *pdev)
 {
struct device   *dev = pdev-dev;
@@ -568,11 

Re: [PATCH v6 07/12] usb: chipidea: add a usb2 driver for ci13xxx

2014-09-23 Thread Felipe Balbi
Hi,

On Tue, Sep 23, 2014 at 07:37:25PM +0200, Arnd Bergmann wrote:
 On Tuesday 23 September 2014 11:55:15 Felipe Balbi wrote:
  On Tue, Sep 23, 2014 at 06:44:40PM +0200, Arnd Bergmann wrote:
   On Tuesday 23 September 2014 15:36:45 Antoine Tenart wrote:
On Tue, Sep 23, 2014 at 12:39:04PM +0200, Arnd Bergmann wrote:
 On Tuesday 23 September 2014 12:28:03 Antoine Tenart wrote:
  +   if (dev-of_node) {
  +   ret = ci_hdrc_usb2_dt_probe(dev, ci_pdata);
  +   if (ret)
  +   goto clk_err;
  +   } else {
  +   ret = dma_set_mask_and_coherent(pdev-dev, 
  DMA_BIT_MASK(32));
  +   if (ret)
  +   goto clk_err;
  +   }
  
 
 Why do you care about the non-DT case here? I think it would be nicer 
 to
 open-code the ci_hdrc_usb2_dt_probe() function in here and remove
 the dma_set_mask_and_coherent(), which should not even be necessary 
 for
 the case where you have a hardwired platform device.
 

I thought we agreed to call dma_set_mask_and_coherent():
http://lists.infradead.org/pipermail/linux-arm-kernel/2014-July/273335.html

I do not have a strong opinion on this as I only use the dt case for my
usage.
   
   The question is more about who actually wants the non-DT case.
   
   Since this is a new driver, I suspect that the answer is nobody,
   as the existing board files are all for legacy platforms that we
   are not going to adapt for this driver.
  
  wait a minute... will the legacy platforms be adapted to DT and, thus,
  to this driver in the future ? I really don't want to keep several
  copies of chipidea driver just because there are still some legacy
  platforms still using them. I have said in the past and will say again,
  everybody should move to the generic chipidea driver at the earliest
  opportunity so we avoid duplication of work.
  
 
 Sorry, my mistake. The intention that this new driver is meant to
 replace the existing ones wasn't clear to me from the changelog, and
 if I'd been involved in the discussion before, then I've forgotten
 about it.
 
 It absolutely makes sense to migrate to a common driver, and in that
 case we should keep the platform_data handling and
 dma_set_mask_and_coherent() call in there, so we can do the two
 conversions (migrating from platform specific frontends to the generic
 one, and migrating from platform_data to DT) on independent schedules.

makes sense to me.

 Eventually I'd like all of the existing users of the platform_data
 path to move to DT, but that should not hold up the other cleanup if
 it takes longer.

yeah, certainly.

 There is however still my point that we shouldn't have an extra
 platform device that is not attached to the device node. I think the
 generic driver should just be part of the common code, without an
 extra framework.  Something like the (entirely untested) patch below.

yeah, that's what I did on dwc3 at least. We support platform_data and
DT on the core driver. As for glue layers, we have ST, Qcom, PCI, OMAP,
Exynos and Keystone.

The only difference is that core dwc3 still doesn't know about clocks,
but that's not an issue right now because we're not yet supporting
pm_runtime.

-- 
balbi


signature.asc
Description: Digital signature


[PATCH v2] usb: core: downgrade log severity to info when descriptor unavailable

2014-09-23 Thread Scot Doyle
According to commit 0cce2eda19923e5e5ccc8b042dec5af87b3ffad0
USB: fix LANGID=0 regression

usb devices are not required to report string descriptors. Since they are
optional, log an info message instead of an error message.

Signed-off-by: Scot Doyle lkm...@scotdoyle.com
---
 drivers/usb/core/message.c | 8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index 0c8a7fc..da2f1f2 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -780,8 +780,12 @@ static int usb_get_langid(struct usb_device *dev, unsigned 
char *tbuf)
 * deal with strings at all. Set string_langid to -1 in order to
 * prevent any string to be retrieved from the device */
if (err  0) {
-   dev_err(dev-dev, string descriptor 0 read error: %d\n,
-   err);
+   if (err == -EPIPE)
+   dev_info(dev-dev,
+string descriptor 0 read error: -EPIPE\n);
+   else
+   dev_err(dev-dev,
+   string descriptor 0 read error: %d\n, err);
dev-string_langid = -1;
return -EPIPE;
}
-- 
2.1.0

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


No USB3 / Asus P5B-VM, U3S6 and Transcend RDF-8 card reader

2014-09-23 Thread Daniel van Gerpen

Hi,

my RDF-8 card reader does not establish a super-speed connection when connected
to an U3S6 USB3.0 port. It only manages high-speed:

[0.894119] xhci_hcd :05:00.0: xHCI Host Controller
[0.894126] xhci_hcd :05:00.0: new USB bus registered, assigned bus 
number 8
[0.894300] xhci_hcd :05:00.0: irq 48 for MSI/MSI-X
[0.894306] xhci_hcd :05:00.0: irq 49 for MSI/MSI-X
[0.894312] xhci_hcd :05:00.0: irq 50 for MSI/MSI-X
[0.894317] xhci_hcd :05:00.0: irq 51 for MSI/MSI-X
[0.894322] xhci_hcd :05:00.0: irq 52 for MSI/MSI-X
[0.894440] usb usb8: New USB device found, idVendor=1d6b, idProduct=0002
[0.894443] usb usb8: New USB device strings: Mfr=3, Product=2, 
SerialNumber=1
[0.894445] usb usb8: Product: xHCI Host Controller
[0.894447] usb usb8: Manufacturer: Linux 3.13.0-27-generic xhci_hcd
[0.894449] usb usb8: SerialNumber: :05:00.0
[0.894534] hub 8-0:1.0: USB hub found
[0.894546] hub 8-0:1.0: 2 ports detected
[0.894626] xhci_hcd :05:00.0: xHCI Host Controller
[0.894630] xhci_hcd :05:00.0: new USB bus registered, assigned bus 
number 9
[0.897657] usb usb9: New USB device found, idVendor=1d6b, idProduct=0003
[0.897659] usb usb9: New USB device strings: Mfr=3, Product=2, 
SerialNumber=1
[0.897661] usb usb9: Product: xHCI Host Controller
[0.897663] usb usb9: Manufacturer: Linux 3.13.0-27-generic xhci_hcd
[0.897665] usb usb9: SerialNumber: :05:00.0
[0.897750] hub 9-0:1.0: USB hub found
[0.897764] hub 9-0:1.0: 2 ports detected
[..]
[1.920042] usb 8-2: new high-speed USB device number 2 using xhci_hcd
[..]
[1.941372] usb 8-2: New USB device found, idVendor=8564, idProduct=4000
[1.941375] usb 8-2: New USB device strings: Mfr=3, Product=4, SerialNumber=5
[1.941377] usb 8-2: Product: Transcend   
[1.941379] usb 8-2: Manufacturer: TS-RDF8 
[1.941381] usb 8-2: SerialNumber: 00080

The NEC/Renesas USB controller chip on the U3S6 card was upgraded to F303408.MEM
firmware. The RDF-8 reader reports TS-22 firmware.

  05:00.0 USB controller: NEC Corporation uPD720200 USB 3.0 Host Controller 
(rev 03)

I'm running a ubuntu trusty kernel 

  3.13.0-27-generic #50-Ubuntu SMP Thu May 15 18:06:16 UTC 2014

lspci  lsusb  lsusb -v  usb-devices:

  https://gist.github.com/anonymous/b73bc03ee5f7c1b33aaf

So much for my cunning plan to easily get USB3 up and running on my aging linux 
machine
by just plugging in some pci card :-) Any pointers?

Regard,
Daniel
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


USB3 WD drive failure on ASUS M5A 78L-M USB3

2014-09-23 Thread Len Berman
I'm running debian 7.

Linux foobar 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux.

I have a Passport drive which fails on the USB3 connector.  It works
fine on USB2.  It also works fine as USB3 on my Lenovo laptop.

The output of lspci -v   lsusb -v is  at
http://outtopastureenterprises.com/device.txt


When I plug in the device to the USB3 port I get the following in
/var/log/messages.  If I wait long enough, eventually it seems to
connect.  This can take tens of minutes.

I don't know what else to include.  Any ideas greatly appreciated.

Thanks.
--Len


Sep 23 17:49:22 foobar kernel: [23209.332493] usb 4-1: new SuperSpeed
USB device number 4 using xhci_hcd
Sep 23 17:49:22 foobar kernel: [23209.352862] usb 4-1: New USB device
found, idVendor=1058, idProduct=0820
Sep 23 17:49:22 foobar kernel: [23209.352875] usb 4-1: New USB device
strings: Mfr=1, Product=2, SerialNumber=5
Sep 23 17:49:22 foobar kernel: [23209.352884] usb 4-1: Product: My Passport 0820
Sep 23 17:49:22 foobar kernel: [23209.352890] usb 4-1: Manufacturer:
Western Digital
Sep 23 17:49:22 foobar kernel: [23209.352897] usb 4-1: SerialNumber:
575835314142334434373334
Sep 23 17:49:22 foobar kernel: [23209.356231] scsi9 : usb-storage 4-1:1.0
Sep 23 17:49:22 foobar mtp-probe: checking bus 4, device 4:
/sys/devices/pci:00/:00:07.0/:02:00.0/usb4/4-1
Sep 23 17:49:22 foobar mtp-probe: bus: 4, device: 4 was not an MTP device
Sep 23 17:49:23 foobar kernel: [23210.356893] scsi 9:0:0:0:
Direct-Access WD   My Passport 0820 1007 PQ: 0 ANSI: 6
Sep 23 17:49:23 foobar kernel: [23210.357131] scsi 9:0:0:1: Enclosure
   WD   SES Device   1007 PQ: 0 ANSI: 6
Sep 23 17:49:23 foobar kernel: [23210.358448] sd 9:0:0:0: Attached
scsi generic sg5 type 0
Sep 23 17:49:23 foobar kernel: [23210.358724] ses 9:0:0:1: Attached
Enclosure device
Sep 23 17:49:23 foobar kernel: [23210.358922] ses 9:0:0:1: Attached
scsi generic sg6 type 13
Sep 23 17:49:54 foobar kernel: [23240.945357] usb 4-1: reset
SuperSpeed USB device number 4 using xhci_hcd
Sep 23 17:49:54 foobar kernel: [23240.962978] xhci_hcd :02:00.0:
xHCI xhci_drop_endpoint called with disabled ep 8801f234f2c0
Sep 23 17:49:54 foobar kernel: [23240.962992] xhci_hcd :02:00.0:
xHCI xhci_drop_endpoint called with disabled ep 8801f234f300
Sep 23 17:50:25 foobar kernel: [23271.953310] usb 4-1: reset
SuperSpeed USB device number 4 using xhci_hcd
Sep 23 17:50:25 foobar kernel: [23271.971070] xhci_hcd :02:00.0:
xHCI xhci_drop_endpoint called with disabled ep 8801f234f2c0
Sep 23 17:50:25 foobar kernel: [23271.971085] xhci_hcd :02:00.0:
xHCI xhci_drop_endpoint called with disabled ep 8801f234f300
Sep 23 17:50:25 foobar kernel: [23271.973226] sd 9:0:0:0: [sde]
1953458176 512-byte logical blocks: (1.00 TB/931 GiB)
Sep 23 17:50:56 foobar kernel: [23302.993335] usb 4-1: reset
SuperSpeed USB device number 4 using xhci_hcd
Sep 23 17:50:56 foobar kernel: [23303.010894] xhci_hcd :02:00.0:
xHCI xhci_drop_endpoint called with disabled ep 8801f234f2c0
Sep 23 17:50:56 foobar kernel: [23303.010909] xhci_hcd :02:00.0:
xHCI xhci_drop_endpoint called with disabled ep 8801f234f300
Sep 23 17:51:27 foobar kernel: [2.973362] usb 4-1: reset
SuperSpeed USB device number 4 using xhci_hcd
Sep 23 17:51:27 foobar kernel: [2.990995] xhci_hcd :02:00.0:
xHCI xhci_drop_endpoint called with disabled ep 8801f234f2c0
Sep 23 17:51:27 foobar kernel: [2.991009] xhci_hcd :02:00.0:
xHCI xhci_drop_endpoint called with disabled ep 8801f234f300
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[RFC PATCH] usb: core: log more general message on malformed LANGID descriptor

2014-09-23 Thread Scot Doyle
I'd like to change this error message:
[3.325837] usb 1-4: string descriptor 0 malformed (err = -61), defaulting 
to 0x0409

into an error message followed by a debug message:
[3.324726] usb 1-4: malformed string descriptor; unknown language, 
defaulting to English
[3.327514] usb 1-4: string descriptor 0 malformed (err = -61), defaulting 
to 0x0409

in order to communicate more information from the log itself. Are there 
any problems with this approach? Would it be better to put all the 
information on a single line? Something else?


---
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index 0c8a7fc..c29eb37 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -770,6 +770,8 @@ static int usb_get_langid(struct usb_device *dev, unsigned 
char *tbuf)
dev-string_langid = 0x0409;
dev-have_langid = 1;
dev_err(dev-dev,
+   malformed string descriptor; unknown language, 
defaulting to English);
+   dev_dbg(dev-dev,
string descriptor 0 malformed (err = %d), 
defaulting to 0x%04x\n,
err, dev-string_langid);
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


g_mass_storage bug ?

2014-09-23 Thread Felipe Balbi
Hi Alan,

Need your help looking over this detail here. When I run g_mass_storage
with stall=0 everything works fine. As soon as I remove it, things go
bonkers.

Looking at the bulk-only spec, I see:

6.7.2 Hi - Host expects to receive data from the device

[ ... ]

The specific device requirements are:

1. The device shall receive a CBW.
2. When the CBW is valid and meaningful, then:
. The device shall attempt the command.
. [Case (6)]
If the device intends to send dCBWDataTransferLength, then:
The device shall send dCBWDataTransferLength bytes of
data.

The device shall set bCSWStatus to 00h or 01h.

The device shall set dCSWDataResidue to zero.


Case (6) is when Hi == Di, looking at my logs, I have:

720 [  286.843965] SCSI CDB: 1a 00 3f 00 c0 00
721 [  286.844000] g_mass_storage gadget: SCSI command: MODE SENSE(6); Dc=6, 
Di=192;  Hc=6, Hi=192
722 [  286.844018] g_mass_storage gadget: bulk-in set halt
723 [  286.844034] g_mass_storage gadget: sending command-failure status
724 [  286.844045] g_mass_storage gadget:   sense data: SK x06, ASC x29, ASCQ 
x00;  info x0

Isn't it wrong to halt in this condition ?

cheers

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v6 07/12] usb: chipidea: add a usb2 driver for ci13xxx

2014-09-23 Thread Peter Chen
On Tue, Sep 23, 2014 at 07:37:25PM +0200, Arnd Bergmann wrote:
 On Tuesday 23 September 2014 11:55:15 Felipe Balbi wrote:
  On Tue, Sep 23, 2014 at 06:44:40PM +0200, Arnd Bergmann wrote:
   On Tuesday 23 September 2014 15:36:45 Antoine Tenart wrote:
On Tue, Sep 23, 2014 at 12:39:04PM +0200, Arnd Bergmann wrote:
 On Tuesday 23 September 2014 12:28:03 Antoine Tenart wrote:
  +   if (dev-of_node) {
  +   ret = ci_hdrc_usb2_dt_probe(dev, ci_pdata);
  +   if (ret)
  +   goto clk_err;
  +   } else {
  +   ret = dma_set_mask_and_coherent(pdev-dev, 
  DMA_BIT_MASK(32));
  +   if (ret)
  +   goto clk_err;
  +   }
  
 
 Why do you care about the non-DT case here? I think it would be nicer 
 to
 open-code the ci_hdrc_usb2_dt_probe() function in here and remove
 the dma_set_mask_and_coherent(), which should not even be necessary 
 for
 the case where you have a hardwired platform device.
 

I thought we agreed to call dma_set_mask_and_coherent():
http://lists.infradead.org/pipermail/linux-arm-kernel/2014-July/273335.html

I do not have a strong opinion on this as I only use the dt case for my
usage.
   
   The question is more about who actually wants the non-DT case.
   
   Since this is a new driver, I suspect that the answer is nobody,
   as the existing board files are all for legacy platforms that we
   are not going to adapt for this driver.
  
  wait a minute... will the legacy platforms be adapted to DT and, thus,
  to this driver in the future ? I really don't want to keep several
  copies of chipidea driver just because there are still some legacy
  platforms still using them. I have said in the past and will say again,
  everybody should move to the generic chipidea driver at the earliest
  opportunity so we avoid duplication of work.
  
 
 Sorry, my mistake. The intention that this new driver is meant to
 replace the existing ones wasn't clear to me from the changelog,
 and if I'd been involved in the discussion before, then I've forgotten
 about it.
 
 It absolutely makes sense to migrate to a common driver, and in that
 case we should keep the platform_data handling and dma_set_mask_and_coherent()
 call in there, so we can do the two conversions (migrating from platform
 specific frontends to the generic one, and migrating from platform_data
 to DT) on independent schedules. Eventually I'd like all of the existing
 users of the platform_data path to move to DT, but that should not
 hold up the other cleanup if it takes longer.
 
 There is however still my point that we shouldn't have an extra platform
 device that is not attached to the device node. I think the generic driver
 should just be part of the common code, without an extra framework.
 Something like the (entirely untested) patch below.
 
   Arnd

Thanks, Arnd.

Antoine is adding a generic chipdea glue layer driver, which like ehci generic
platform driver: drivers/usb/host/ehci-platform.c, since other architectures
like MIPS (Someone submitted mips chipidea driver before) may not have device
tree support, I think non-dt support is also needed.

It is a good suggestion for adding DT support for core driver, Since we did
not do it at the first, it is a little embarrass at current situation.

- For the new chipidea glue drivers, it is ok we can have a child node
for core device at glue device node, and some common entries can be there
like: phy, vbus, dr_mode, etc. We need to add support for getting
these common things for both through device tree and platform data
(parent is DT support and parent is non-DT support) at core driver.

- For the existing glue drivers, since we can't change existed dts, we can
only do it from future SoC support. Then, in this kinds of glue drivers,
we need to support for both create core driver by node and by current
calling platform_device_add way.

Peter

 
 ---
 diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
 index 9563cb56d564..a2b20c1342f1 100644
 --- a/drivers/usb/chipidea/ci.h
 +++ b/drivers/usb/chipidea/ci.h
 @@ -207,6 +207,7 @@ struct ci_hdrc {
   boolid_event;
   boolb_sess_valid_event;
   boolimx28_write_fix;
 + struct clk  *clk;
  };
  
  static inline struct ci_role_driver *ci_role(struct ci_hdrc *ci)
 diff --git a/drivers/usb/chipidea/ci_hdrc_usb2.c 
 b/drivers/usb/chipidea/ci_hdrc_usb2.c
 index 6eae1de587f2..03ef35997dd8 100644
 --- a/drivers/usb/chipidea/ci_hdrc_usb2.c
 +++ b/drivers/usb/chipidea/ci_hdrc_usb2.c
 @@ -70,6 +70,7 @@ static int ci_hdrc_usb2_probe(struct platform_device *pdev)
   }
  
   if (dev-of_node) {
 + ret = ci_get_platdata(dev, platdata);
   ret = ci_hdrc_usb2_dt_probe(dev, ci_pdata);
   if 

Re: [PATCH v5 1/3] usb: gadget: Refactor request completion

2014-09-23 Thread Michal Sojka
Dear Felipe,

On Wed, Sep 17 2014, Felipe Balbi wrote:
 On Wed, Sep 17, 2014 at 09:21:11AM +0200, Michal Sojka wrote:
 All USB peripheral controller drivers called completion routines
 directly. This patch moves the completion call from drivers to
 usb_gadget_giveback_request(), in order to have a place where common
 functionality can be added.
 
 All places in drivers/usb/ matching [-.]complete( were replaced with a
 call to usb_gadget_giveback_request(). This was compile-tested with all
 ARM drivers enabled and runtime-tested for musb.
 
 Signed-off-by: Michal Sojka so...@merica.cz
 ---
  drivers/usb/chipidea/udc.c  |  6 +++---
  drivers/usb/dwc2/gadget.c   |  6 +++---
  drivers/usb/dwc3/gadget.c   |  2 +-
  drivers/usb/gadget/udc/amd5536udc.c |  2 +-
  drivers/usb/gadget/udc/at91_udc.c   |  2 +-
  drivers/usb/gadget/udc/atmel_usba_udc.c |  4 ++--
  drivers/usb/gadget/udc/bcm63xx_udc.c|  2 +-
  drivers/usb/gadget/udc/dummy_hcd.c  | 10 +-
  drivers/usb/gadget/udc/fotg210-udc.c|  2 +-
  drivers/usb/gadget/udc/fsl_qe_udc.c |  6 +-
  drivers/usb/gadget/udc/fsl_udc_core.c   |  6 ++
  drivers/usb/gadget/udc/fusb300_udc.c|  2 +-
  drivers/usb/gadget/udc/goku_udc.c   |  2 +-
  drivers/usb/gadget/udc/gr_udc.c |  2 +-
  drivers/usb/gadget/udc/lpc32xx_udc.c|  2 +-
  drivers/usb/gadget/udc/m66592-udc.c |  2 +-
  drivers/usb/gadget/udc/mv_u3d_core.c|  8 ++--
  drivers/usb/gadget/udc/mv_udc_core.c|  8 ++--
  drivers/usb/gadget/udc/net2272.c|  2 +-
  drivers/usb/gadget/udc/net2280.c|  2 +-
  drivers/usb/gadget/udc/omap_udc.c   |  2 +-
  drivers/usb/gadget/udc/pch_udc.c|  2 +-
  drivers/usb/gadget/udc/pxa25x_udc.c |  2 +-
  drivers/usb/gadget/udc/pxa27x_udc.c |  2 +-
  drivers/usb/gadget/udc/r8a66597-udc.c   |  2 +-
  drivers/usb/gadget/udc/s3c-hsudc.c  |  3 +--
  drivers/usb/gadget/udc/s3c2410_udc.c|  2 +-
  drivers/usb/gadget/udc/udc-core.c   | 19 +++
  drivers/usb/musb/musb_gadget.c  |  2 +-
  drivers/usb/renesas_usbhs/mod_gadget.c  |  2 +-
  include/linux/usb/gadget.h  |  8 

 I would rather split this into several patches, btw. With the
 introduction of usb_gadget_giveback_request() being the first one in the
 series. It's easier to review that way.

This would be no problem.

 diff --git a/drivers/usb/gadget/udc/udc-core.c 
 b/drivers/usb/gadget/udc/udc-core.c
 index b0d9817..29789f1 100644
 --- a/drivers/usb/gadget/udc/udc-core.c
 +++ b/drivers/usb/gadget/udc/udc-core.c
 @@ -106,6 +106,25 @@ EXPORT_SYMBOL_GPL(usb_gadget_unmap_request);
  
  /* 
 - */
  
 +/**
 + * usb_gadget_giveback_request - give the request back to the gadget layer
 + * Context: in_interrupt()
 + *
 + * This is called by device controller drivers in order to return the
 + * completed request back to the gadget layer.
 + */
 +void usb_gadget_giveback_request(struct usb_ep *ep,
 +struct usb_request *req)
 +{
 +if (likely(req-complete))
 +req-complete(ep, req);
 +else
 +pr_err(%s : req-complete must not be NULL\n, __func__);

 let it Oops. We require -complete to be valid, if there's any gadget
 driver not setting -complete, it deserves to oops so we can the
 error.

The Oops was there before, but I removed it because greg k-h didn't want
it. See http://marc.info/?l=linux-usbm=140917381611947w=2. Do you
still want the oops here?

-Michal
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html