Hi I've decided that I want to learn kernel hacking a little and because of that and because of new HDMI CEC Framework in kernel 4.8 I chose to write CEC driver for old Allwinner A10. There in no CEC hardware core for this CPU and I think the only way is to create implementation that uses bit banging. I've investigated the topic a little, tried few things and finally I have prototype that more or less can receive and send CEC messages using this new Framework. Code isn't very pretty right now and there is few things missing (like proper error handling etc.) but before I continue I want firstly ask you guys few questions.
1) For bit banging I'm using high resolution timer. If CEC line is idle this timer ticks every 2.4 ms (416Hz). For every tick it checks the state of CEC line and when it detects start of CEC message it reduce delay to 0.1 ms (10000Hz). We need more or less this kind of frequency to probe CEC line to detect if transmitted bit is 0 or 1. I've used high resolution timer because it was the solution that give me this very accurate 0.1 ms delay. I've also tried udelay, usleep_range and few other functions, but without success. They were too unreliable (because triggered by scheduler) or too CPU consuming (because of using busy-wait loop for too long). OK so the first question is does it make sens to use HR timer for bit banging? What other things I could try? Maybe you know some traps that are connected with HR timers? 2) CEC driver requires HDMI physical address to be provided. This address can be passed from userspace (but userspace need to know it), or driver can obtain it on its own. Right now I left providing of this parameter to userspace, but it will be good to have option of obtaining it. Normally we can read this value from EDID that is read using HDMI I2C. AFAIK currently there is no Display Engine HDMI support in mainline kernel, so there is no HDMI I2C interface implemented. Are there any plans to support HDMI in Display Engine in near future? I could try to implement simple HDMI I2C driver just for obtaining EDID, but I don't think this make lot of sense without proper HDMI support. 3) Do you know what if other CPUs uses similar HDMI core? I think A20 and A13. Any other? Any idea how to correctly handle this driver in device tree of these CPUs? 4) Are there any information how CEC is implemented for new CPUs? Is it supported at all by allwinner 3.4 kernel? Isn't this implementation inside hdmi blob that is present for new CPUs? Regards, Jarek -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
