Sziasztok!
Nagyon nem találok megoldást a következő problémámra, ezért fordulok hozzátok, hátha akad itt valaki ismét, aki jártasabb a témában...
Adott egy S3C2416 procis ARM gép, jelenleg 2.6.39-es kernel-lel. 2 USB portja van, amelyből az egyik HOST, a másik HOST/DEVICE módot tud. A második nem reagál mint HOST - eszközként is mondjuk csak VID 0000 / PID 0000 látszik belőle, de ez most nem érdekes. Szóval 2 HOST portra lenne szükségem. A doksi szerint reset után az alapértelmezett módja az eszköz állapot:
http://www.timll.com/chinese/download/files/S3C2416X_datasheet.pdf
116-dik oldal, 8.9 USB PHY CONTROL REGISTER (PHYCTRL) > DOWNSTREAM_PORT
Ezt kellene valahogy átbökni 1-re. Mivel magam fordítom hozzá a kernel-t, ezért akár az is tökéletesen megfelelne, ha valahol a forrás fájlokban lehetne átírni fixen. Tudna valaki segíteni?
- 4069 megtekintés
Hozzászólások
Talán a legegyszerúbb az lenne, ha csinálnál egy modult, ami bootoláskor betölt, és megpiszkálja az adott memóriacímet.
Egyébként anno beágyazott rendszerek gyaksziról rémlik valami hasonló, igaz ott egy ledet kellett villogtatni, és elég volt a megfelelő memóriacímre belökni a megfelelően beállított biteket valahogy így:
*(long*)0x4C000080 = 0x00001011;
Nem tudom segít-e ez valamit, ha hülyeséget írtam v nem ez volt a kérdés, akkor bocs :)
----------------
"Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders" +1
- A hozzászóláshoz be kell jelentkezni
--------------
Viszont Woody Allen mondta, hogy biszexuálisnak lenni megduplázza az esélyeidet egy jól sikerült éjszakára.
- A hozzászóláshoz be kell jelentkezni
Nem bántásképpen, csak régi emlékeket ébresztett bennem ez a sor:
"*(long*)0x4C000080 = 0x00001011;"
Azt találtam mondani egy kollégának, ha egy ilyen sort meglátnék a kódjában, akkor ott helyben kirúgnám azonnali hatállyal :-)
Fuszenecker_Róbert
- A hozzászóláshoz be kell jelentkezni
https://en.wikipedia.org/wiki/Fast_inverse_square_root
--------------------------------------
Unix isn't dead. It just smells funny.
- A hozzászóláshoz be kell jelentkezni
hát nem szép, nem is elegáns, viszont olvashatatlan és veszélyes :)
mi egyébként anno pár egyszerű makrón keresztül piszkáltuk memóriát, valahogy így:
#define outb(n,c) (*((volatile unsigned char *)(n)) = (c))
de végülis csak példának szántam, nem tudom egyébként mi az elfogadott, sajnos ilyesmiben nem sok tapasztalatom van.
közben eszembe jutott, egyébként lehet, hogy az ilyesmit minden további nélkül meg lehet oldani udev szabályokkal, illetve az usb driver paraméterezésével.
----------------
"Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders" +1
- A hozzászóláshoz be kell jelentkezni
Nem értem egészen, hogy mit is szeretnél. Illetve hogy hogyan képzeled ezt megoldásnak.
Ha nincs drivered ahhoz az USB porthoz a kerneledben, akkor hiába "bököd át" 1-re, akkor sem fog csinálni semmit se. Ha meg van, akkor annak kéne ezt megcsinálnia, ha jól meg van írva, akkor amúgy megcsinálja ezt magától is. Egészen pontosan a dual-mode USB portoknak van egy extra lába, ami arra való, hogy a beledugott kábel rövidrezárja, a gép meg érzékeli ezt, és eszerint állítja host vagy device módba a portot a driver (amilyen a rádugott kábel, annak megfelelően).
- A hozzászóláshoz be kell jelentkezni
+1
Mivel itt az autos hasonlatok mennek: attol, hogy brummogsz, meg nem indul el a motor. :)
- A hozzászóláshoz be kell jelentkezni
még1x nekifutok :)
szóval van driver, helyes a bekötés, host mód megy az egyik porton, de a másik port eszköz módban inicializálódik ha minden igaz. a módváltást magának a drivernek kéne intéznie annak megfelelően, hogy az adott INT lábra megkapja e a tápot vagy sem? azt hittem az csak a szoftveres beolvasásra van, de valami saját programnak kellene átkapcsolnia... turkálom a mach / plat fájlokat, hátha sikerül rájönnöm hogy hol a hiba. talán más GPIO INT lábra van definiálva, mint az én modulomon...
- A hozzászóláshoz be kell jelentkezni
Nézd meg milyen csatlakozó van a dobozon. Ha az itt látható mini-AB akkor van esélyed működésre bírni. Kell hozzá ilyen kábel. Amikor ezt bedugod, akkor a driver érzékeli, hogy host módban kell mennie, és vált. Ha nem vált, akkor bukta. Egy szó mint 100, attól függően fog host vagy device módban menni, hogy milyen kábelt dugsz bele. A te esetedben a kábelen a csatlakozó fogja az ID lábat megfelelő állapotba húzni.
- A hozzászóláshoz be kell jelentkezni
A szükséges függvénydeklarációk az 'arm/plat-samsung/include/plat/gpio-cfg.h' fájlban vannak.
De a 'mach-smdk2416.c' fájlban is láthatod: s3c_gpio_cfgpin(), s3c_gpio_setpull(), gpio_direction_*().
- A hozzászóláshoz be kell jelentkezni
ennyire vágod a témát, hogy ilyen gyorsan megtalálod hogy hol mit nézz, vagy esetleg volt is már dolgod ezzel a platformmal? :)
eredetileg nem volt semmi vonatkozó se a gpio-cfg.c -ben, se a mach-smdk2416.c -ben, de rátaláltam erre a patch sorra:
http://lists.infradead.org/pipermail/linux-arm-kernel/2011-May/050916.h…
http://lists.infradead.org/pipermail/linux-arm-kernel/2011-May/050917.h…
http://lists.infradead.org/pipermail/linux-arm-kernel/2011-May/050918.h…
http://lists.infradead.org/pipermail/linux-arm-kernel/2011-May/050919.h…
http://lists.infradead.org/pipermail/linux-arm-kernel/2011-May/050920.h…
volt 1 ütközés - nem talált valami sort ami mögé be kellett volna szúrnia egy másikat, de be tudtam azonosítani így pótoltam manuálisan, a fordítás is lement, de továbbra sem működik... mostmár a 4-es patch-nek megfelelően ott van a mach-smdk2416.c -ben a GPH14 és GPF2 is - de mi az a GPH14 ? miért van kettő? a GPF2-t az általam használt SOM2416-II modul KIT kapcsolásának megfelelően némi ellenállásosztón keresztül rákötöttem az eszköz aljzat bejövő táp ágára (USB mini A 1-es lába)
http://pc2car.hu/images/users/fpeter/SOM2416/KIT2416-II-sch.pdf
http://pc2car.hu/images/users/fpeter/SOM2416/SOM2416.pdf
az utóbbi az én kapcsolásom. úgy terveztem, hogy van rajta egy mini A aljzat az eszköz módnak, valamint egy normál A alj a host módnak. a két jumperrel le lehet választani a host módhoz szükséges 2x 15K PD ellenállatokat, hogy ne zavarjanak be az eszköz módba. tehát elvileg megfelel a másik kapcsolásnak...
az eredeti samsung-féle smdk2416 kapcsrajzból csak ezt a kivonatot sikerült megtalálnom:
http://read.pudn.com/downloads141/ebook/609637/SMDK2416_Users_Manual_re…
kissé szűkszavú, de ha jól értelmezem, akkor itt is egy meg nem nevezett GPIO INT lábra kötik be ellenállásosztón keresztül az aljzatból jövő 5V-ot...
ami még egy érdekes jelenség, hogy próbából lekötöttem a 2 ellenállást, így a levegőben lóg a GPF2, és amikor bedugok a HOST aljzatba egy eszközt, akkor H jelszint jelenik meg ezen a lábon, ha kihúzom akkor eltűnik. ez így volt az előző kernellel is aminél még sehol nem szerepelt a GPF2, és így viselkedik a patch-elés után is...
az USB wifi adapternél általad ajánlott módon beraktam ismét az mdev.conf-ba egy általános, minden esemény env-jét egy fájlba átirányító hotplug event-et, de semmi. a másik működő port annak rendje és módja szerint ír bele, de a problémás aljzat semmit nem mozdít...
- A hozzászóláshoz be kell jelentkezni
Szerencsére nem volt dolgom vele. ;)
s3c24xx_udc_set_platdata() függvénnyel inicializálod a device-t? A paramétereként átadott struct s3c2410_udc_mach_info .vbus_pin, .vbus_pin_inverted tagok rendben?
- A hozzászóláshoz be kell jelentkezni
a 4dik patch-ben ez van:
s3c24xx_hsudc_set_platdata(&smdk2416_hsudc_platdata);
amit pedig paraméterként kap:
struct s3c24xx_hsudc_platdata smdk2416_hsudc_platdata = {
.epnum = 9,
.gpio_init = smdk2416_hsudc_gpio_init,
.gpio_uninit = smdk2416_hsudc_gpio_uninit,
};
init / uninit:
void smdk2416_hsudc_gpio_init(void)
{
s3c_gpio_setpull(S3C2410_GPH(14), S3C_GPIO_PULL_UP);
s3c_gpio_setpull(S3C2410_GPF(2), S3C_GPIO_PULL_NONE);
s3c_gpio_cfgpin(S3C2410_GPH(14), S3C_GPIO_SFN(1));
s3c2410_modify_misccr(S3C2416_MISCCR_SEL_SUSPND, 0);
}
void smdk2416_hsudc_gpio_uninit(void)
{
s3c2410_modify_misccr(S3C2416_MISCCR_SEL_SUSPND, 1);
s3c_gpio_setpull(S3C2410_GPH(14), S3C_GPIO_PULL_NONE);
s3c_gpio_cfgpin(S3C2410_GPH(14), S3C_GPIO_SFN(0));
}
gondolom ezek lennének az általad emlegetett .vbus_pin, .vbus_pin_inverted paraméterek, csak nincsen mellettük magyarázat... de a GPH14-et továbbra se tudom hová tenni :S
- A hozzászóláshoz be kell jelentkezni
Tipp. A linken található log hivatkozásai talán érdekesek lehetnek (GPH14). Szövegkörnyezet: usb_udc_dev_power_down, s3c_adc_probe, ...
- A hozzászóláshoz be kell jelentkezni
egyelőre feladtam, mert vannak fontosabb pontjai is a projektnek - ráadásul mostmár egyértelműen kiderült számomra, hogy a procim valójában 1 USB HOST porttal rendelkezik csak, és egy belső HUB csinál belőle kettőt - vagyis cirka mindegy, hogy megy e a 2 port vagy sem, vagy csak az 1 működő portjára dugok egy újabb HUB-ot és arra megy a 3G modem meg a Wifi adapter, a korlát akkor is az USB 1.1 FullSpeed 12Mbit/sec elméleti max sebessége lesz... ahhoz hogy teljes tempóval ki tudjam használni, ahhoz idővel mindenképpen olyan procira kell váltanom, amely képes HiSpeed 480Mbit-re is...
- A hozzászóláshoz be kell jelentkezni