From: Felipe Balbi <felipebalbi@users.sourceforge.net>
To: linux-omap-open-source@linux.omap.com
Subject: [PATCH] Add Sysfs Interface to Control Vbus states
Date: Tue, 29 May 2007 15:02:35 +0300 [thread overview]
Message-ID: <1180440173922-git-send-email-felipebalbi@users.sourceforge.net> (raw)
In-Reply-To: <11804401722783-git-send-email-felipebalbi@users.sourceforge.net>
From: Felipe Balbi <felipe.lima@indt.org.br>
We need to control Vbus in order to save power and
let us test SRP features.
This sysfs interface provides an easy way to control
the Vbus states.
HowTo use it:
echo off > /sys/devices/platform/musb_hdrc/vbus
or
echo on > /sys/devices/platform/musb_hdrc/vbus
Later improvements:
* Check current Vbus state before setting new state.
* Implement MUSB PM features and shutdown Vbus whenever we're
not using the Bus.
Signed-off-by: Felipe Balbi <felipe.lima@indt.org.br>
---
Index: linux-omap-2.6/drivers/usb/musb/plat_uds.c
===================================================================
--- linux-omap-2.6.orig/drivers/usb/musb/plat_uds.c 2007-05-28 13:18:47.000000000 +0300
+++ linux-omap-2.6/drivers/usb/musb/plat_uds.c 2007-05-28 13:18:52.000000000 +0300
@@ -1579,6 +1579,78 @@
}
static DEVICE_ATTR(cable, S_IRUGO, musb_cable_show, NULL);
+static ssize_t
+musb_vbus_store(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t n)
+{
+ struct musb *musb = dev_to_musb(dev);
+ unsigned long flags;
+ u8 devctl;
+
+ /* REVISIT the correct way to do it would be checking if we're
+ * the Standard A device. B devices do not provide Vbus.
+ */
+ spin_lock_irqsave(&musb->Lock, flags);
+ devctl = musb_readb(musb->pRegs, MGC_O_HDRC_DEVCTL);
+ if (!strncmp(buf, "on", 2)) {
+ u8 power = musb_readb(musb->pRegs, MGC_O_HDRC_POWER);
+
+ musb->xceiv.default_a = 1;
+ devctl |= MGC_M_DEVCTL_SESSION;
+ musb_writeb(musb->pRegs, MGC_O_HDRC_DEVCTL, devctl);
+ musb_set_vbus(musb, 1);
+
+ /* After turning on Vbus we need to generate a reset signal
+ * on the bus. The following code treats this
+ */
+ power &= 0xf0;
+ musb_writeb(musb->pRegs, MGC_O_HDRC_POWER,
+ power | MGC_M_POWER_RESET);
+ musb->port1_status |= USB_PORT_STAT_RESET;
+ musb->port1_status &= ~USB_PORT_STAT_ENABLE;
+ musb->rh_timer = jiffies + msecs_to_jiffies(20);
+
+ /* REVISIT after sending the reset signal during 20msecs
+ * we need to clear the RESET bit in the power register
+ */
+ if (time_after(jiffies, musb->rh_timer))
+ musb_writeb(musb->pRegs, MGC_O_HDRC_POWER,
+ power & ~MGC_M_POWER_RESET);
+
+ }
+ if (!strncmp(buf, "off", 3)) {
+ devctl |= ~MGC_M_DEVCTL_SESSION;
+ musb_writeb(musb->pRegs, MGC_O_HDRC_DEVCTL, devctl);
+ musb_set_vbus(musb, 0);
+ }
+ /* REVIST when shutting down Vbus we should enter A_IDLE state and not
+ * B_IDLE. Check tusb_source_power() definition
+ */
+ spin_unlock_irqrestore(&musb->Lock, flags);
+
+ return n;
+}
+
+static ssize_t
+musb_vbus_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+ struct musb *musb = dev_to_musb(dev);
+ unsigned long flags;
+ int vbus;
+ char *ret;
+
+ spin_lock_irqsave(&musb->Lock, flags);
+ vbus = musb_platform_get_vbus_status(musb);
+ if (vbus)
+ ret = "Vbus on";
+ else
+ ret = "Vbus off";
+ spin_unlock_irqrestore(&musb->Lock, flags);
+
+ return sprintf(buf, "%s\n", ret);
+}
+static DEVICE_ATTR(vbus, 0644, musb_vbus_show, musb_vbus_store);
+
#ifdef CONFIG_USB_MUSB_OTG
static ssize_t
musb_srp_store(struct device *dev, struct device_attribute *attr,
@@ -1674,6 +1746,7 @@
#ifdef CONFIG_SYSFS
device_remove_file(musb->controller, &dev_attr_mode);
device_remove_file(musb->controller, &dev_attr_cable);
+ device_remove_file(musb->controller, &dev_attr_vbus);
#ifdef CONFIG_USB_MUSB_OTG
device_remove_file(musb->controller, &dev_attr_srp);
#endif
@@ -1905,6 +1978,7 @@
#ifdef CONFIG_SYSFS
status = device_create_file(dev, &dev_attr_mode);
status = device_create_file(dev, &dev_attr_cable);
+ status = device_create_file(dev, &dev_attr_vbus);
#ifdef CONFIG_USB_MUSB_OTG
status = device_create_file(dev, &dev_attr_srp);
#endif /* CONFIG_USB_MUSB_OTG */
next prev parent reply other threads:[~2007-05-29 12:02 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-29 12:02 RFC PATCH Felipe Balbi
2007-05-29 12:02 ` [PATCH] USB: Disable file_storage USB_CONFIG_ATT_WAKEUP Felipe Balbi
2007-05-29 12:02 ` [PATCH] musb_hdrc: Implement workaround for tusb3.0 wbus bug rev2 Felipe Balbi
2007-05-29 12:02 ` [PATCH] musb_hdrc: Add SRP Interface and control it through sysfs Felipe Balbi
2007-05-29 12:02 ` Felipe Balbi [this message]
2007-05-29 12:02 ` [PATCH] Add more Test Modes Felipe Balbi
2007-05-29 12:02 ` [PATCH] musb_hdrc: Make HNP work Felipe Balbi
2007-05-29 12:02 ` [PATCH] USB: Fix OTG HNP for hub.c Felipe Balbi
2007-05-29 12:02 ` [PATCH] HSET tool for the MUSB Controler Felipe Balbi
2007-05-29 12:02 ` [PATCH] Leave GPIO[7:6] pullups enabled Felipe Balbi
[not found] ` <11804401803413-git-send-email-felipebalbi@users.sourceforge.net>
2007-05-29 12:02 ` [PATCH] Make SRP passes in all Electrical Tests Felipe Balbi
2007-05-29 14:39 ` Dirk Behme
2007-06-05 11:02 ` [PATCH] Leave GPIO[7:6] pullups enabled Tony Lindgren
2007-05-29 19:21 ` [PATCH] USB: Fix OTG HNP for hub.c David Brownell
2007-05-29 19:24 ` Felipe Balbi
2007-05-29 20:34 ` Tony Lindgren
2007-05-29 21:11 ` David Brownell
2007-05-29 21:26 ` Tony Lindgren
2007-05-29 17:16 ` [PATCH] Add more Test Modes David Brownell
2007-05-29 17:07 ` [PATCH] musb_hdrc: Add SRP Interface and control it through sysfs David Brownell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1180440173922-git-send-email-felipebalbi@users.sourceforge.net \
--to=felipebalbi@users.sourceforge.net \
--cc=linux-omap-open-source@linux.omap.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox