abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 18:55 | IT novinky

    Dnešním dnem lze již také v Česku nakupovat na Google Store (telefony a sluchátka Google Pixel).

    Ladislav Hagara | Komentářů: 2
    včera 18:33 | IT novinky

    Apple představil (keynote) iPad Pro s čipem Apple M4, předělaný iPad Air ve dvou velikostech a nový Apple Pencil Pro.

    Ladislav Hagara | Komentářů: 0
    včera 17:11 | Nová verze

    Richard Biener oznámil vydání verze 14.1 (14.1.0) kolekce kompilátorů pro různé programovací jazyky GCC (GNU Compiler Collection). Jedná se o první stabilní verzi řady 14. Přehled změn, nových vlastností a oprav a aktualizovaná dokumentace na stránkách projektu. Některé zdrojové kódy, které bylo možné přeložit s předchozími verzemi GCC, bude nutné upravit.

    Ladislav Hagara | Komentářů: 0
    včera 13:44 | Komunita

    Free Software Foundation zveřejnila ocenění Free Software Awards za rok 2023. Vybráni byli Bruno Haible za dlouhodobé příspěvky a správu knihovny Gnulib, nováček Nick Logozzo za front-end Parabolic pro yt-dlp a tým Mission logiciels libres francouzského státu za nasazování svobodného softwaru do praxe.

    Fluttershy, yay! | Komentářů: 0
    včera 13:11 | IT novinky

    Před 10 lety Microsoft dokončil akvizici divize mobilních telefonů společnosti Nokia a pod značkou Microsoft Mobile ji zanedlouho pohřbil.

    Ladislav Hagara | Komentářů: 2
    6.5. 21:33 | Komunita

    Fedora 40 release party v Praze proběhne v pátek 17. května od 18:30 v prostorách společnosti Etnetera Core na adrese Jankovcova 1037/49, Praha 7. Součástí bude program kratších přednášek o novinkách ve Fedoře.

    Ladislav Hagara | Komentářů: 5
    6.5. 21:11 | IT novinky

    Stack Overflow se dohodl s OpenAI o zpřístupnění obsahu Stack Overflow pro vylepšení OpenAI AI modelů.

    Ladislav Hagara | Komentářů: 1
    6.5. 17:55 | Nová verze

    AlmaLinux byl vydán v nové stabilní verzi 9.4 (Mastodon, 𝕏). S kódovým názvem Seafoam Ocelot. Přehled novinek v příspěvku na blogu a v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    6.5. 17:11 | IT novinky

    Před 50 lety, 5. května 1974 v žurnálu IEEE Transactions on Communications, Vint Cerf a Bob Kahn popsali protokol TCP (pdf).

    Ladislav Hagara | Komentářů: 0
    6.5. 13:44 | Zajímavý článek

    Bylo vydáno do češtiny přeložené číslo 717 týdeníku WeeklyOSM přinášející zprávy ze světa OpenStreetMap.

    Ladislav Hagara | Komentářů: 0
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (63%)
     (8%)
     (14%)
     (16%)
    Celkem 133 hlasů
     Komentářů: 9, poslední včera 22:07
    Rozcestník

    Let's teach penguin how to become magician - I2C (part 2)

    28.2.2015 12:15 | Přečteno: 2043× | Výběrový blog

    In this part we will learn something about hacking I2C in HTC magician.

    Contents

    I2C drivers

    I2C in the magician seems to be used for three chips: the normal I2C for the camera and sound, the low speed I2C for core voltage control. The kernel has driver for them, but it seems it never worked! It is possible to emulate I2C with GPIO, which is very slow and driver eats too much CPU power when it is handling huge amount of data (eg. camera stream start or changing sound volume). So I have quickly decided to fix PXA I2C after some playing with camera drivers.

    Main cause of incompatibility is Omnivision OV9640 camera module [3]. It communicates with SCCB protocol [4], which is basically I2C with some features omitted (possibly to evade I2C licensing ;-) ). Problem is, that SCCB and I2C coexistence on same bus makes debugging hard as hell.

    Main difference with I2C standard is that I2C device sends acknowledge handshake but SCCB device uses this cycle as "don't care" (and host must therefore ignore it). PXA I2C controller didn't support this "feature", so I needed to patch it (after strong debugging). Kernel I2C subsystem supports SCCB mode, so we just need to add flag I2C_M_IGNORE_NAK into platform data [5]. In the PXA I2C driver [6] we need to add statement to ignore NACK bit if this flag is set.

    Second bug in PXA was forgotten I2C_M_STOP flag, which generates STOP state on the SCCB after any message, but START states were always generated and this START-STOP imbalance caused bus freezing when SCCB was used. Solution is simple: patching pxa-i2c driver with correct support for I2C_M_STOP and adding I2C_M_STOP flag to any SCCB driver (ov9640.c).

    I sent patch for both bugs and patch should be in the vanilla kernel starting from 3.19 [11].

    PXA I2C supports two speeds: 100kbps and 400kbps. It seems 400kbps is problematic and transmission is sometimes corrupted, but it was tested on damaged Magician, so it can be possible.

    GPIO I2C driver requires setting pins 117 (SCL) and 118 (SDA) as Alternate Function 0 (GPIO) and as "output" in the magician platform definition [5]. I have modified GPIO driver [7] too, but it was for debugging PXA I2C controller, so I don't know if the modification is really required or not (and I don't want to test it anymore, because it is REALLY slow :-) ).

    Second I2C bus (power I2C) has only one device, which is I2C compatible, so it works without any additional changes. Using GPIO I2C on it will probably need similar configuration.

    NOTICE

    Problem is, that with valid SCCB support in I2C PXA you cannot use i2c-tools [2] on SCCB device or else bus will go into frozen state (should be possible to reset by i2c_pxa module reload and reset of this device by corresponding reset GPIO). It is possible to force SCCB mode in PXA I2C driver [6] by forcing I2C_M_STOP flag for every transaction (hack). Another way is to add SCCB support into i2c-tools, but from my search it seems that i2c-tools using SMBUS (another clone of I2C) functions for injecting any I2C messages into bus, so it could mean rewriting part of i2c-tools. Maintainer of i2c-tools [2] is Jean Delvare, so anyone can send patches or feature requests to him.

    Camera

    Camera in my magician is from Omnivision and exact type is OV9640, but it seems [8] another phones with magician platform can have OV9650 [9]. They are practically compatible (only difference seems to be frame size, but I didn't examined OV9650 datasheet too closely). For driver debugging we can probably use OV9650 application note datasheet (registers are described more in detail), but many things were discovered without it.

    NOTICE

    It seems there are at least three versions of OV9640 datasheet. It look like a paradox, but older version have sometimes more information than the newer versions (it depends probably on camera firmware version too).

    One problem during magician reimplementation with OV9640 was faulty PXA I2C driver (which was fixed by using OV9640 :-) ), so I could not verify if reset GPIO (57, active in one) and power GPIO (116, active in zero) works correctly. Other problem during testing was clock signal, which is enabled only when the camera is used by v4l2 (and I2C on OV9640 only with pixel clock active). So for testing purposes I have used shell scripts to be able communicate with unused camera.

    	modprobe i2c-dev
    
    	devmem 0x41300004 32 $((`devmem 0x41300004` | 0x01000000 ))   #enable clocks to Quick Capture controller
    
    	devmem 0x40E00118 32 0x100000      #set GPIO116_MAGICIAN_nCAM_EN to "1"
    	devmem 0x40E0001c 32 0x2000000     #set GPIO57_MAGICIAN_CAM_RESET to "1"
    
    	devmem 0x40E00124 32 0x100000      #set GPIO116_MAGICIAN_nCAM_EN to "0"
    	devmem 0x40E00028 32 0x2000000     #set GPIO57_MAGICIAN_CAM_RESET to "0"
    
    	devmem 0x50000010 32 0x00880001    #enable pixel clock (unsafe write) in Quick Capture controller
    
    	i2cget -y -f 0 0x30 0xa   #get Product ID MSB (=0x96), NOTICE i2c-tools ignore I2C_M_STOP
    	i2cget -y -f 0 0x30 0xb   #get Product ID LSB (=0x49)
    

    Register address for GPIO can be found in section "24.5.2 GPIO Pin-Output Set Registers (GPSR) and GPIO Pin-Output Clear Registers (GPCR)" of PXA27x datasheet [1]. QuickCapture controller clock control is described in section "27.5.5 Quick Capture Interface Control Register 4 (CICR4)". Master clock enable is in section "3.8.2.2 Clock Enable Register (CKEN)". Writing into these registers can make inconsistencies in drivers and lead to system freeze (more probably when V4L2 is operating simultaneously).

    For hacking with power and reset signals of OV9640 module I measured pinout of this module (GPIO by GPIO toggling) and annotated it with the most possible (eg. AVDD) signals. Pins are numbered by numbers on module and should be same in image below. Voltages were measured with multimeter with weak battery, so real values are probably little lower :-D. Real voltages of approximated pins are in datasheets. Be warned, connector pin spacing are in sub-millimeter range ;-).

    	~2.1V, DVDD?      22    21    3 Ohm to GND with power off
    	RESET (gpio 57)   20    19    DD7
    	DD6               18    17    DD5
    	DD4               16    15    3 Ohm to GND with power off
    	DD3               14    13    DD2
    	DD1               12    11    DD0
    	SCL               10    9     MCLK
    	SDA                8    7     ~3.49V (same as datapins), (~40 kOhm to GND), DOVDD?
    	3.0V, AVDD?        6    5     PCLK
    	nPOWER (gpio116)   4    3     FV
    	LV                 2    1     3 Ohm to GND with power off
    

    This pinout can be theoretically used to create a module with another CCD chip or to connect some fast data (possibly video) to magician. CCD with integrated JPEG encoder can greatly enhance speed and frame size of recorded video. Only problem would be with different voltage levels.

    Sound

    Magician sound system based on the UDA1380 chip [10] is an insane design. Chip itself offers I2S and raw SPI interface. PXA272 offers AC97, I2S and SSP (SPI) interfaces. But for more fun, chip interface is divided into SSP for the playback part and I2S for the capture part. This design makes kernel driver debugging hard as hell.

    The main problem with sound in the magician are the configuration structures and bug with DMA. There are some more, but they are not critical (swapped values in mixer etc.). First bug was solved with this patch [12]. It is just assignment of bad structure, but it made very weird behavior (and it took me patching almost every sound subsystem function to discover this, only to realize that this bug was already repaired in newer kernel :-D). Second, more serious bug is capture DMA, where driver wrongly uses auto-incrementation settings for playback. In this case data were written into single word sequentially from all registers after FIFO register. Patch is here [13], but patch for the driver initialization is still not reported, so sound will still not work in vanilla (I must clean my modifications to be acceptable by vanilla standard). It seems, that soundcard must be divided into two virtual soundcard because of I2S/SSP schism.

    If someone wants to hack sound chip online, then there are some tips:

    Default behavior in driver is to power off everything, so you must patch source code to let UDA chip stay in powered state (basically any bits in register 0x0 of UDA1380 I2C interface).

    Reset (EGPIO_MAGICIAN_CODEC_RESET) and power (EGPIO_MAGICIAN_CODEC_POWER) must be correctly set and clocks must be enabled (configuration ".dac_clk = UDA1380_DAC_CLK_WSPLL"). UDA1380 can use clocks from capture and playback interface (which is fun, if they are using different controllers in PXA). Below is script to enabling power. EGPIO pins are described at xda wiki [14] or at LXR [15] (first value is register address, incremented by 4, second value is word size).

    #unpowered state
    	devmem 0x0c000004 8 $((`devmem 0x0c000004` | 0x20))    #UDA1380 RESET enable
    	devmem 0x0c000004 8 $((`devmem 0x0c000004` & ~ 0x40))  #UDA1380 POWER disable
    
    #powered state
    	devmem 0x0c000004 8 $((`devmem 0x0c000004` | 0x40))    #UDA1380 POWER enable
    	devmem 0x0c000004 8 $((`devmem 0x0c000004` & ~ 0x20))  #UDA1380 RESET disable
    

    Clock enabling wasn't needed during hacking, but it can be done by setting registers described in [1] (I2S and SSP1). Just notice all possible clock routing and fact, that a bad clock configuration in UDA1380 can cause temporary I2C or UDA1380 freeze (resetable). It seems that I2C works even without running clocks (all sound drivers are not loaded).

    Another tip is for reading and writing I2C. UDA1380 is from NXP (developer of I2C), so is fully compatible, so i2c-tools works here. You should be able to use command like this:

    	i2cget -y -f 0 0x18 0 w   #bus=0, address=0x18, register=0, width=16bit
    

    Just remember, i2c-tools report values with swapped lower and higher octet.

    Next time

    In next section I will write about power system of HTC Magician.

    If you like this howto or you want author to try some other crazy stuff with Magician, you can donate some bitcoins to address 1FV88JF4DDBR7XBbssRyC4aqrA3vNkzM86 ;-).

    References

    [1] Intel PXA27x Processor Family Developer’s Manual

    [2] http://www.lm-sensors.org/wiki/I2CTools

    [3] OV9640 datasheets http://aitendo3.sakura.ne.jp/aitendo_data/product_img/camera/OV9640/OV9640FBG_DS (1.1).pdf http://hwui.googlecode.com/svn/trunk/Camera/DATASHEET/CameraModule/OV/

    [4] SCCB Specifications - OmniVision

    [5] arch/arm/mach-pxa/magician.c

    [6] drivers/i2c/busses/i2c-pxa.c

    [7] drivers/i2c/algos/i2c-algo-bit.c

    [8] http://forum.xda-developers.com/showthread.php?p=3697908#post3697908

    [9] ov9650 datasheets and application notes

    [10] UDA1380

    [11] http://lists.infradead.org/pipermail/linux-arm-kernel/2014-November/305783.html

    [12] https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/sound/soc/pxa/magician.c?id=0fbd44ab772890cf5dcda87311575e99d2c000c1

    [13] http://www.spinics.net/linux/fedora/linux-sound/msg00530.html

    [14] http://forum.xda-developers.com/wiki/MagicianCPLD

    [15] arch/arm/mach-pxa/include/mach/magician.h

           

    Hodnocení: 67 %

            špatnédobré        

    Obrázky

    Let's teach penguin how to become magician - I2C (part 2), obrázek 1

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    28.2.2015 23:50 abc
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Pěkné kraviny.
    1.3.2015 10:37 R
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Taketo blogy by tu mali byt a nie nejake politicke sracky.
    1.3.2015 13:08 jadd | skóre: 34 | blog: Greenhorn
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Presně tak, sice to přečíst umím ale už nerozumím té problematice, nicméně ty odkazy na zdroje jsou správná věc, a rozumím i tomu, že si za plný návod k problematice chce autor nechat něco přispět, protože mu to jistě také zabralo nějaký čas, ...
    1.3.2015 15:20 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    vlastikroot avatar 1.3.2015 11:40 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Ja jsem pred mesicem v praci backportoval kodek Cirrus CS4272 pro SOC Freescale i.MX515 do jadra 2.6.35. Tam je to v pohode - vsechen zvuk jde skrz I2S a na ovladani si lze zvolit bud SPI nebo I2C.
    We will destroys the Christian's legion ... and the cross, will be inverted
    1.3.2015 12:35 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Štastný to člověk :-D.
    1.3.2015 14:32 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Máš můj obdiv, když jsem naposled musel něco řešit s Linuxem na PXA (v mém případě PXA320), tak jsem měl nutkání to hodit proti zdi abych viděl na kolik kousíčků se to rozpadne . A stejně jsme to nakonec nahradili Freescalem i.MX53, ke kterému mam dneska podobný vztah. :-D

    Není ten hardware dneska i na nějaké hraní příliš outdated?
    1.3.2015 15:24 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Jo to já mám chuť taky, by mě zajímalo zda to zapojovali podle nějakýho návodovýho schématu od Intelu, nebo vymysleli třeba tu zvukovku v HTC sami :-/.

    Starý to je, ale zase to není tak složitý, navíc jsem začal před delší dobou :-) a chci zkusit, zda to zvládnu celý. Samozřejmě velká část věcí se dá přenést na novější telefon (třeba takový GTAxx jsou skvělí, ale stojej příšerně moc).
    1.3.2015 15:56 R
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Tiez sa rad hram so starym HW v Linuxe (akurat vacsinou na x86). Urcite lepsie ako cumiet na nejake kraviny (filmy a serialy).
    1.3.2015 16:07 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Tak to já se i kouknu na videa. Ale v dalších dílech bude vidět, proč si s tím magicianem vlastně hraju.
    1.3.2015 17:34 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Moje hlavní výtky ohledně těhlech starších procesorů je fakt že výrobce na Linux pochopitelně kašlal, třeba u PXA320 tu podporu dělal někdo z komunity (shodou náhod čech) a pokud už ta podpora nějak existuje, tak zapojení všech periferek a inicializace je natvrdo zadrátovaná v *.c, *.h souborech dané desky a je docela problém je naportovat na novější verzi jádra, obzlášť když třeba ještě k tomu vyžadují podporu driveru který není v hlavním stromě jádra a výrobce už na něj kašle. Zkoušel jsem třeba portovat driver jedné síťovky z 2.6.x řady na 3.7 a skončil jsem, protože změny API byly tak rozsáhlé, že bych ten ovladač mohl rovnou přepsat.

    Navíc specifické verze jádra často vyžadovaly k provozu specifickou verzi U-Bootu, ve které to zrovna nebylo rozbité.

    Od té doby co jádro obsahuje device tree je ta situace výrazně lepší, jen je pořád problém s binárníma ovladačema grafik, které zas fungují jen v některých verzích jádra. :-(
    1.3.2015 18:09 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Tak s device-tree jsem si zatím nehrál, všechno je to v platform zdrojáku. U PXA27x ta inicializace zas tak tolik nevadí, protože stejně je v naprosté většině možná jen jedna konfigurace. BTW jde ta nová funkce DTS overlay vyvolat z userspace?
    2.3.2015 08:58 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Overlaye jsem zatím nezkoušel, takže netuším :) Každopádně doporučuju se na device-tree mrknout.
    5.3.2015 03:05 BFU
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    DT overlaye jsou staticke (pri bootu). Za behu kusy DT prehazovat zatim nejde.

    btw http://lists.infradead.org/pipermail/linux-arm-kernel/2011-January/038273.html tady je demo jak tu OV9640 nadratovat do kernelu, na PalmZ72 se to I2C taky nejak agresivne sralo, proto i2c-gpio.
    5.3.2015 11:06 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Ten ov9640 mi už dávno funguje jenom ten blog je trochu pozadu s reálným stavem. Se základním driverem zas takový problém nebyl, nejhorší bylo to i2c-pxa.
    5.3.2015 22:49 BFU
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    OK, prima.
    1.3.2015 19:43 sad
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Tomu, cos napsal, vůbec nerozumím, nejsem programátor, ale vzhledem k tomu, že se učím anglicky, tak mě zaujalo chybné používání anglických členů a taky špatná interpunkce. Bohužel členy jsou na angličtině pro Čechy to nejtěžší, protože je náš jazyk na rozdíl třeba od němčiny nebo italštiny nepoužívá. Já když čtu něco v angličtině, tak se snažím všímat určitých, neurčitých a nulových členů před podstatnými jmény. Možná někdy v budoucnu o členech napíši a fundovaný blog.
    1.3.2015 20:05 R
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Ano, neurcity clen tam je len 4-krat a na mnohych miestach chyba. Ale citat sa to da.
    1.3.2015 20:39 sad
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Mně zase chyběly členy určitý, například:

    The main cause of
    The problem is that
    The main difference with
    should be the same in the image below
    In the next section

    Samozřejmě že například před podstatným jménem "problem" nebude vždy stát určitý člen, záleží na významu.

    It was a real problem. (Zde už je člen neurčitý.)
    1.3.2015 20:39 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Jo členy jsou problém a to jsem se v části ještě speciálně soustředil na to, že je tam chci napsat. Při čtení je nesleduju a tak automatice v mozku přijdou zbytečný :-D, stejně tak stavba věty je spíš česká. Jenže když se budu soustředit na gramatiku a sestavovat slovo po slovu, tak z toho bude technický blábol (což je možná už i teď :-D). Jinak ono by se to časem mělo zlepšovat (právě bych si na tomhle návodu rád trénoval psaní v angličtině).
    1.3.2015 21:34 sad
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Tak ten blog napiš česky a pod to dej anglickej překlad a máš to vyřešený.
    1.3.2015 22:27 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Ta chvíle, kdy si člověk uvědomí, že překladač umí anglicky lépe než vy :-D.
    2.3.2015 16:59 Kirk
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Škoda, že to není česky. Když si to budu chtít přečíst anglicky, tak skoro jistě najdu na široširém internetu něco lepšího, tedy kvůli takovým textům na ábíčko opravdu nechodím...
    2.3.2015 17:32 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Škoda že jsou tu všude anonymní trollové, kvůli takovým na ábíčko opravdu nechodím...
    2.3.2015 17:33 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Lepší návod na HTC Magician? Sem s ním :-P ;-).
    2.3.2015 17:52 R
    Rozbalit Rozbalit vše Re: Let's teach penguin how to become magician - I2C (part 2)
    Aha, takze ty sem chodis kvoli tym politickym srackam.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.