LINUX.ORG.RU

isp1760 для PXA320


0

0

Всем привет!
Никак не могу добиться успешной работы высокоскоростного USB-хоста isp1760 для платы Toradex Colibri PXA320.
Сам хост интегрирован в несущую плату.
В дереве исходников ядра есть драйвер для этого хоста - drivers/usb/host/isp1760-if.c и drivers/usb/host/isp1760-hcd.c.
Ядро 2.6.31.
В этом драйвере есть структуры данных и методы работы с ними для самого драйвера, а не для устройства. Объявляю и регистрирую устройство так:
В файле drivers/usb/host/isp1760-if.c:
static struct resource pxa3xx_resource_isp1760[] = {
[0] = {
.start = 0x14000000,
.end = 0x1403ffff,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = IRQ_GPIO0, //
.end = IRQ_GPIO0,
.flags = IORESOURCE_IRQ,
},
};
static struct isp1760_platform_data isp1760_priv = {
.is_isp1760 = 1,
//.port1_disable = 0,
.bus_width_16 = 1,
.port1_otg = 0,
.analog_oc = 0,
.dack_polarity_high = 0,
.dreq_polarity_high = 0,
};
static struct platform_device isp1760_plat_device = {
.name = «isp1760»,
.id = 0,
.dev = {
//.dma_mask = DMA_BIT_MASK(32),
//.coherent_dma_mask = DMA_BIT_MASK(32),
.platform_data = &isp1760_priv,
},
.num_resources = ARRAY_SIZE(pxa3xx_resource_isp1760),
.resource = pxa3xx_resource_isp1760,
};
...
А затем:
...
platform_device_register(&isp1760_plat_device);
...
При загрузке модуля dmesg выдает:
isp1760 isp1760.0: NXP ISP1760 USB Host Controller
[ 216.279147] drivers/usb/core/inode.c: creating file 'devices'
[ 216.279403] drivers/usb/core/inode.c: creating file '001'
[ 216.284442] isp1760 isp1760.0: new USB bus registered, assigned bus number 1
[ 216.488327] isp1760 isp1760.0: bus width: 32, oc: digital
[ 216.512106] isp1760 isp1760.0: irq 8, io mem 0x14000000
[ 216.515753] isp1760 isp1760.0: USB ISP 1761 HW rev. 1 started
[ 216.519853] usb usb1: default language 0x0409
[ 216.520321] usb usb1: udev 1, busnum 1, minor = 0
[ 216.520480] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[ 216.524267] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 216.527970] usb usb1: Product: NXP ISP1760 USB Host Controller
[ 216.531623] usb usb1: Manufacturer: Linux 2.6.31 isp1760-hcd
[ 216.535297] usb usb1: SerialNumber: isp1760.0
[ 216.540427] usb usb1: uevent
[ 216.544939] usb usb1: usb_probe_device
[ 216.545098] usb usb1: configuration #1 chosen from 1 choice
[ 216.549040] usb usb1: adding 1-0:1.0 (config #1, interface 0)
[ 216.550166] usb 1-0:1.0: uevent
[ 216.554646] hub 1-0:1.0: usb_probe_interface
[ 216.554812] hub 1-0:1.0: usb_probe_interface - got id
[ 216.554993] hub 1-0:1.0: USB hub found
[ 216.565746] hub 1-0:1.0: 1 port detected
[ 216.569189] hub 1-0:1.0: standalone hub
[ 216.569320] hub 1-0:1.0: individual port power switching
[ 216.569496] hub 1-0:1.0: individual port over-current protection
[ 216.569695] hub 1-0:1.0: power on to power good time: 20ms
[ 216.573437] hub 1-0:1.0: local power source is good
[ 216.573639] hub 1-0:1.0: enabling power on all ports
[ 216.582106] drivers/usb/core/inode.c: creating file '001'
[ 216.582898] ISP1760 USB device initialised
[ 216.677331] hub 1-0:1.0: port 1: status 0501 change 0001
[ 216.773951] hub 1-0:1.0: state 7 ports 1 chg 0002 evt 0000
[ 216.777312] hub 1-0:1.0: port 1, status 0501, change 0000, 480 Mb/s
[ 216.836833] port 1 high speed
[ 288.596248] usb 1-1: new high speed USB device using isp1760 and address 5
[ 293.593725] usb 1-1: khubd timed out on ep0out len=0/0
[ 298.803713] usb 1-1: khubd timed out on ep0out len=0/0
[ 299.013654] usb 1-1: device not accepting address 5, error -110
[ 299.019073] hub 1-0:1.0: unable to enumerate USB device on port 1

В /proc/interrupts нет ниодного прерывания от хоста. Инициализацию самого хоста и шины GPIO делал по даташиту. Смотрели анализатором на GPIO0 (та «нога», на которой должен быть сигнал - фронт уходит вниз, но не возвращается)
Уважаемые, как «поймать» прерывание от этого хоста? И вообще правильно ли я все делаю?
Спасибо

>В /proc/interrupts нет ниодного прерывания от хоста

Очевидно они не приходят :) На этой плате разве не реализован интерфейс gpio ? Если указан правильный номер irg то рерывания полюбому накручиваться будут. Стандартно это делается через
gpio_direction_input(GPIO);
irq = gpio_to_irq(GPIO);

anonymous ()
Ответ на: комментарий от anonymous

>На этой плате разве не реализован интерфейс gpio ?

Реализован, но у меня никак не получается заставить его работать, так как нужно мне:(

Dennis7 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.