[oe-commits] org.oe.dev linux-rp: Tosa usb ports management - close #3295

dbaryshkov commit openembedded-commits at lists.openembedded.org
Wed Nov 14 14:29:05 UTC 2007


linux-rp: Tosa usb ports management - close #3295

Author: dbaryshkov at gmail.com
Branch: org.openembedded.dev
Revision: 402ffc9d2303c3d6976d737f0441835a2f5c863f
ViewMTN: http://monotone.openembedded.org/revision/info/402ffc9d2303c3d6976d737f0441835a2f5c863f
Files:
1
packages/linux/linux-rp-2.6.23/tmio-ohci-r8.patch
packages/linux/linux-rp_2.6.23.bb
Diffs:

#
# mt diff -rf74df1cd51f519cf932bce26d4e97f1f77795a0e -r402ffc9d2303c3d6976d737f0441835a2f5c863f
#
# 
# 
# patch "packages/linux/linux-rp-2.6.23/tmio-ohci-r8.patch"
#  from [0c5154e470f4e55e2a4fad1e3ff7765a939dc651]
#    to [b87e8646dadfb7d5d16757a725aaef9cbc7b7778]
# 
# patch "packages/linux/linux-rp_2.6.23.bb"
#  from [3160d6c5ebf760c1528741fc195566d294bb8879]
#    to [ec394e80b40202881b329768580de4f21d156493]
# 
============================================================
--- packages/linux/linux-rp-2.6.23/tmio-ohci-r8.patch	0c5154e470f4e55e2a4fad1e3ff7765a939dc651
+++ packages/linux/linux-rp-2.6.23/tmio-ohci-r8.patch	b87e8646dadfb7d5d16757a725aaef9cbc7b7778
@@ -1,10 +1,10 @@ Index: linux-2.6.23/drivers/usb/host/ohc
 Signed-off-by: Dmitry Baryshkov <dbaryshkov at gmail.com>
 
 Index: linux-2.6.23/drivers/usb/host/ohci-tmio.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/usb/host/ohci-tmio.c	2007-11-13 01:35:13.049455112 +0300
-@@ -0,0 +1,417 @@
++++ linux-2.6.23/drivers/usb/host/ohci-tmio.c	2007-11-14 16:58:47.637707413 +0300
+@@ -0,0 +1,530 @@
 +/*
 + * OHCI HCD(Host Controller Driver) for USB.
 + *
@@ -53,6 +53,14 @@ Index: linux-2.6.23/drivers/usb/host/ohc
 +
 +/*-------------------------------------------------------------------------*/
 +
++#define MAX_TMIO_USB_PORTS 2
++static bool default_tmio_ports[MAX_TMIO_USB_PORTS];
++module_param_array(default_tmio_ports, bool, NULL, 0644);
++MODULE_PARM_DESC(default_tmio_ports,
++		"disable specified TC6393 usb ports (default: all enabled)");
++
++/*-------------------------------------------------------------------------*/
++
 +/*
 + * USB Host Controller Configuration Register
 + */
@@ -87,8 +95,8 @@ Index: linux-2.6.23/drivers/usb/host/ohc
 +struct {
 +	unsigned	gcken:1;	/* D0 */
 +	unsigned	ckrnen:1;	/* D1 */
-+	unsigned	uspw1:1;	/* D2 USB Port 1 Power Disable	*/
-+	unsigned	uspw2:1;	/* D3 USB Port 2 Power Disable	*/
++	unsigned	uspw0:1;	/* D2 USB Port 1 Power Disable	*/
++	unsigned	uspw1:1;	/* D3 USB Port 2 Power Disable	*/
 +	unsigned	x00:4;
 +	unsigned	pmee:1;		/* D8 */
 +	unsigned	x01:6;
@@ -100,6 +108,7 @@ Index: linux-2.6.23/drivers/usb/host/ohc
 +
 +struct tmio_hcd {
 +	struct tmio_uhccr __iomem *ccr;
++	bool disabled_ports[MAX_TMIO_USB_PORTS];
 +};
 +
 +#define hcd_to_tmio(hcd)	((struct tmio_hcd *)(hcd_to_ohci(hcd) + 1))
@@ -107,6 +116,39 @@ Index: linux-2.6.23/drivers/usb/host/ohc
 +
 +/*-------------------------------------------------------------------------*/
 +
++struct indexed_device_attribute{
++	struct device_attribute dev_attr;
++	int index;
++};
++#define to_indexed_dev_attr(_dev_attr) \
++	container_of(_dev_attr, struct indexed_device_attribute, dev_attr)
++
++#define INDEXED_ATTR(_name, _mode, _show, _store, _index)		\
++	{ .dev_attr = __ATTR(_name ## _index, _mode, _show, _store),	\
++	  .index = _index }
++
++#define INDEXED_DEVICE_ATTR(_name, _mode, _show, _store, _index)	\
++struct indexed_device_attribute dev_attr_##_name ## _index	\
++	= INDEXED_ATTR(_name, _mode, _show, _store, _index)
++
++/*-------------------------------------------------------------------------*/
++
++
++static void tmio_fill_pm(struct tmio_hcd *tmio, union tmio_uhccr_pm *pm)
++{
++	pm->raw = 0;
++
++	pm->pmee	= 1;
++	pm->pmes	= 1;
++	pm->gcken	= 1;
++	pm->ckrnen	= 1;
++
++	if (tmio->disabled_ports[0])
++		pm->uspw0 = 1;
++	if (tmio->disabled_ports[1])
++		pm->uspw1 = 1;
++}
++
 +static void tmio_stop_hc(struct device *dev)
 +{
 +	struct tmio_device		*tdev	= dev_to_tdev(dev);
@@ -117,8 +159,8 @@ Index: linux-2.6.23/drivers/usb/host/ohc
 +
 +	pm.gcken	= 1;
 +	pm.ckrnen	= 1;
++	pm.uspw0	= 1;
 +	pm.uspw1	= 1;
-+	pm.uspw2	= 1;
 +
 +	iowrite8(0,		&ccr->intc);
 +	iowrite8(0,		&ccr->ilme);
@@ -139,10 +181,7 @@ Index: linux-2.6.23/drivers/usb/host/ohc
 +	union tmio_uhccr_pm		pm	= {0};
 +	unsigned long			base	= hcd->rsrc_start;
 +
-+	pm.pmes		= 1;
-+	pm.pmee		= 1;
-+	pm.ckrnen	= 1;
-+	pm.gcken	= 1;
++	tmio_fill_pm(tmio, &pm);
 +
 +	tdev->ops->clock(dev, 1);
 +	tdev->ops->function(dev, 1);
@@ -157,6 +196,54 @@ Index: linux-2.6.23/drivers/usb/host/ohc
 +			ioread8(&ccr->revid), hcd->rsrc_start, hcd->irq);
 +}
 +
++static ssize_t tmio_disabled_port_show(struct device *dev,
++		struct device_attribute *attr,
++		char *buf)
++{
++	struct usb_hcd		*hcd	= dev_get_drvdata(dev);
++	struct tmio_hcd		*tmio	= hcd_to_tmio(hcd);
++	int			index	= to_indexed_dev_attr(attr)->index;
++	return snprintf(buf, PAGE_SIZE, "%c",
++			tmio->disabled_ports[index]? 'Y': 'N');
++}
++
++static ssize_t tmio_disabled_port_store(struct device *dev,
++		struct device_attribute *attr,
++		const char *buf, size_t count)
++{
++	struct usb_hcd		*hcd	= dev_get_drvdata(dev);
++	struct tmio_hcd		*tmio	= hcd_to_tmio(hcd);
++	struct tmio_uhccr __iomem *ccr	= tmio->ccr;
++	union tmio_uhccr_pm	pm	= {0};
++	int			index	= to_indexed_dev_attr(attr)->index;
++
++	if (!count)
++		return -EINVAL;
++
++	switch (buf[0]) {
++	case 'y': case 'Y': case '1':
++		tmio->disabled_ports[index] = true;
++		break;
++	case 'n': case 'N': case '0':
++		tmio->disabled_ports[index] = false;
++		break;
++	default:
++		return -EINVAL;
++	}
++
++	tmio_fill_pm(tmio, &pm);
++
++	iowrite16(pm.raw,	&ccr->pm);
++
++	return 1;
++}
++
++
++static INDEXED_DEVICE_ATTR(disabled_usb_port, S_IRUGO | S_IWUSR,
++		tmio_disabled_port_show, tmio_disabled_port_store, 0);
++static INDEXED_DEVICE_ATTR(disabled_usb_port, S_IRUGO | S_IWUSR,
++		tmio_disabled_port_show, tmio_disabled_port_store, 1);
++
 +static int usb_hcd_tmio_probe(const struct hc_driver *driver,
 +		struct device *dev)
 +{
@@ -195,6 +282,9 @@ Index: linux-2.6.23/drivers/usb/host/ohc
 +	hcd->rsrc_len	= regs->end - regs->start + 1;
 +
 +	tmio		= hcd_to_tmio(hcd);
++	memcpy(tmio->disabled_ports,
++			default_tmio_ports,
++			sizeof(default_tmio_ports));
 +
 +	tmio->ccr = ioremap(config->start, config->end - config->start + 1);
 +	if (!tmio->ccr) {
@@ -224,11 +314,23 @@ Index: linux-2.6.23/drivers/usb/host/ohc
 +	ohci = hcd_to_ohci(hcd);
 +	ohci_hcd_init(ohci);
 +
++	retval  = device_create_file(dev,
++			&dev_attr_disabled_usb_port0.dev_attr);
++	retval |= device_create_file(dev,
++			&dev_attr_disabled_usb_port1.dev_attr);
++
++	if (retval)
++		goto err_create_file;
++
 +	retval = usb_add_hcd(hcd, irq->start, IRQF_DISABLED);
 +
 +	if (retval == 0)
 +		return retval;
 +
++err_create_file:
++	device_remove_file(dev, &dev_attr_disabled_usb_port1.dev_attr);
++	device_remove_file(dev, &dev_attr_disabled_usb_port0.dev_attr);
++
 +	tmio_stop_hc(dev);
 +
 +	dmabounce_unregister_dev(dev);
@@ -256,6 +358,8 @@ Index: linux-2.6.23/drivers/usb/host/ohc
 +	struct tmio_hcd		*tmio	= hcd_to_tmio(hcd);
 +
 +	usb_remove_hcd(hcd);
++	device_remove_file(dev, &dev_attr_disabled_usb_port1.dev_attr);
++	device_remove_file(dev, &dev_attr_disabled_usb_port0.dev_attr);
 +	tmio_stop_hc(dev);
 +	dmabounce_unregister_dev(dev);
 +	dma_release_declared_memory(dev);
@@ -343,13 +447,22 @@ Index: linux-2.6.23/drivers/usb/host/ohc
 +static int ohci_hcd_tmio_drv_probe(struct device *dev)
 +{
 +	struct resource		*sram	= tmio_resource_mem(dev);
++	int retval;
 +
 +	dev->dma_mask = &dma_mask;
 +	dev->coherent_dma_mask = DMA_32BIT_MASK;
 +
++	/* FIXME: move dmabounce checkers to tc6393 core? */
 +	dmabounce_register_checker(tmio_dmabounce_check, sram);
 +
-+	return usb_hcd_tmio_probe(&ohci_tmio_hc_driver, dev);
++	retval = usb_hcd_tmio_probe(&ohci_tmio_hc_driver, dev);
++
++	if (retval == 0)
++		return retval;
++
++	dmabounce_remove_checker(tmio_dmabounce_check, sram);
++
++	return retval;
 +}
 +
 +static int ohci_hcd_tmio_drv_remove(struct device *dev)
@@ -437,7 +550,7 @@ Index: linux-2.6.23/drivers/usb/host/ohc
 Index: linux-2.6.23/drivers/usb/host/ohci-hcd.c
 ===================================================================
 --- linux-2.6.23.orig/drivers/usb/host/ohci-hcd.c	2007-11-12 13:46:52.894560883 +0300
-+++ linux-2.6.23/drivers/usb/host/ohci-hcd.c	2007-11-13 01:03:53.950798640 +0300
++++ linux-2.6.23/drivers/usb/host/ohci-hcd.c	2007-11-14 16:44:32.788069355 +0300
 @@ -915,6 +915,10 @@
  #define PLATFORM_DRIVER		usb_hcd_pnx4008_driver
  #endif
============================================================
--- packages/linux/linux-rp_2.6.23.bb	3160d6c5ebf760c1528741fc195566d294bb8879
+++ packages/linux/linux-rp_2.6.23.bb	ec394e80b40202881b329768580de4f21d156493
@@ -1,6 +1,6 @@ require linux-rp.inc
 require linux-rp.inc
 
-PR = "r6"
+PR = "r7"
 
 DEFAULT_PREFERENCE_qemuarm = "-1"
 DEFAULT_PREFERENCE_qemux86 = "-1"
@@ -120,7 +120,7 @@ SRC_URI_append_tosa = "\
            file://tosa-lcdnoise-r1-fix-r0.patch;patch=1 \
 	   file://arm-dma-coherent.patch;patch=1 \
            file://usb-ohci-hooks-r3.patch;patch=1 \
-           file://tmio-ohci-r8.patch;patch=1 \
+           file://tmio-ohci-r9.patch;patch=1 \
 	    "
 #          ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
 






More information about the Openembedded-commits mailing list