hh.org updates
[hh.org.git] / arch / arm / mach-pxa / htcsable / htcsable_udc.c
blobde5e1554ba81e1c9bfd8fd62b0c772a5334abf24
1 /*
2 * htcsable_udc.c:
3 * htcsable specific code for the pxa27x usb device controller.
4 *
5 *
6 */
8 #include <linux/module.h>
9 #include <linux/init.h>
10 #include <linux/platform_device.h>
11 #include <asm/arch/hardware.h>
12 #include <asm/arch/pxa-regs.h>
13 #include <asm/arch/udc.h>
14 #include <linux/soc/asic3_base.h>
15 #include <asm/arch/htcsable-gpio.h>
16 #include <asm/arch/htcsable-asic.h>
18 extern struct platform_device htcsable_asic3;
20 static void htcsable_udc_command(int cmd)
22 switch (cmd) {
23 case PXA2XX_UDC_CMD_DISCONNECT:
24 printk("htcsable udc disconnect\n");
25 asic3_set_gpio_out_a(&htcsable_asic3.dev,
26 1<<GPIOA_USB_PUEN, 1<<GPIOA_USB_PUEN);
27 break;
28 case PXA2XX_UDC_CMD_CONNECT:
29 printk("htcsable udc connect\n");
30 asic3_set_gpio_out_a(&htcsable_asic3.dev,
31 1<<GPIOA_USB_PUEN, 0);
32 break;
33 default:
34 printk("_udc_control: unknown command!\n");
35 break;
39 static int htcsable_udc_is_connected(void)
41 int ret = ((asic3_get_gpio_status_b(&htcsable_asic3.dev) & (1<<GPIOB_USB_DETECT)) != 0);
42 printk("htcsable_udc_is_connected returns %d\n",ret);
43 return ret;
46 static struct pxa2xx_udc_mach_info htcsable_udc_info __initdata = {
47 .udc_is_connected = htcsable_udc_is_connected,
48 .udc_command = htcsable_udc_command,
51 static int htcsable_udc_probe(struct device * dev)
53 pxa_set_udc_info(&htcsable_udc_info);
54 return 0;
57 static struct device_driver htcsable_udc_driver = {
58 .name = "htcsable_udc",
59 .bus = &platform_bus_type,
60 .probe = htcsable_udc_probe,
63 static int __init htcsable_udc_init(void)
65 printk("htcsable_udc_init\n");
66 return driver_register(&htcsable_udc_driver);
69 module_init(htcsable_udc_init);
70 MODULE_LICENSE("GPL");