Very happy to say that I've got it :)

The solution is actually very simple - DMA seems to work just fine, the 
problem is with GPIOs - even though we initialize fex file with 
csi_d0..csi_d15, it seems that only settings for d0..d7 are applied.
For quick check, I've modified csi_probe function found in sun4i_drv_csi.c 
like this:

/*pin resource*/
    dev->csi_pin_hd = gpio_request_ex("csi0_para",NULL);
    if (dev->csi_pin_hd==-1) {
        csi_err("csi0 pin request error!\n");
        ret = -ENXIO;
        goto err_irq;
    }
    
    // IKfix - override pin muxing just in case
    writel(0x33333333, 0xf1c20800+0x90);    // this is really just in case, 
as PE PIO group works
    writel(0x00003333, 0xf1c20800+0x94);    // this is really just in case, 
as PE PIO group works
    writel(0x55553333, 0xf1c20800+0xd8);    // this is for PG PIO group - 
configure PG gpios as CSI0
    writel(0x00005555, 0xf1c20800+0xdc);    // this is for PG PIO group - 
configure PG gpios as CSI0

Basically, just after the gpio_request_ex() has finished its work (by the 
way, this function should have already did this, but for some reason it 
didn't), I added a few lines of just-in-case configuration. First two are 
for lower 8 bits (d0..d7) - these are really just in case, as I've 
previously verified that it works. Second two are for upper 8 bits 
(d8..d15), and this is the culprit - gpio_request_ex should have already 
did this, as it's in the fex file and a correct number of gpios is reported 
(for my config - 22).

One problem solved.

I would have figured out gpios last week, but something in the kernel is 
not letting me access PIO registers via /dev/mem from userland - I always 
get seg faults when trying to access PIO base (0xf1c20800) and all the 
subsequent registers. As I thought DMA is the issue, I gave up on finding 
the culprit for the seg fault. Maybe some protection mechanism in action or 
similar.

On Monday, March 17, 2014 3:44:48 PM UTC+1, Ivan Kozic wrote:
>
> It might be somewhere in the Android SDK on this download server (it seems 
> that only SDK has source files - everything else is either documentation or 
> binaries).
> Either way, I'm very surprised that people from linux-sunxi git repo are 
> ignoring this, as official git repo for sunxi still has the old driver 
> (which is pretty much unusable).
>
> Also ov5640 driver is much better in the qubir link that I've sent you - 
> not sure if it can be used for our stuff, as it seems that V4L2 integration 
> is a bit different. The same goes for CSI unfortunately, so I'll probably 
> have to use heavily modified kernel from git.
>
> By the way - on the download server that you've sent there is a nice 
> document about A10's CSI unit - I'm just preparing to read it.
>
> Of course, if I find anything, I'll post back.
>
> On Monday, March 17, 2014 2:41:23 PM UTC+1, Jon Smirl wrote:
>>
>> On Mon, Mar 17, 2014 at 6:36 AM, Ivan Kozic <[email protected]> wrote: 
>> > Hi John, 
>> > 
>> > I've only found it here: 
>> > 
>> > 
>> https://github.com/qubir/PhoenixA20_linux_sourcecode/tree/master/drivers/media/video/
>>  
>>
>> It is somewhere on the download server: 
>> http://dl.linux-sunxi.org/ 
>>
>>
>> > 
>> > but this is not even forked from anywhere. Also it seems to be a normal 
>> > linux source - although, as far as I can see, both android and linux 
>> kernels 
>> > are integrated into this source. 
>> > Although I have no experience with Android at all, so I might be wrong. 
>> > 
>> > I will either try to build this one, or just update my own CSI driver 
>> with 
>> > the files from here, although that might not be a good idea, but I'll 
>> try 
>> > either way. 
>> > 
>> > If you remember where you've got the files from at some point, please 
>> post 
>> > back - I don't like forking unknown kernel sources, and this qubir one 
>> seems 
>> > half-legit somehow... 
>> > 
>> > On Monday, March 17, 2014 2:36:56 AM UTC+1, Jon Smirl wrote: 
>> >> 
>> >> On Sun, Mar 16, 2014 at 6:52 PM, Ivan Kozic <[email protected]> 
>> wrote: 
>> >> > Hi John - could you give me a link to this Android tree? I seem to 
>> have 
>> >> > difficulties finding it on GitHub... 
>> >> 
>> >> It is in one of the sunxi download directories. I forgot which one I 
>> >> got it from. Maybe the Olimex directory. 
>> >> 
>> >> It is 4.2GB file. 
>> >> 
>> >> > 
>> >> > 
>> >> > On Sat, Mar 15, 2014 at 4:35 PM, [email protected] <
>> [email protected]> 
>> >> > wrote: 
>> >> >> 
>> >> >> On Sat, Mar 15, 2014 at 11:29 AM, Ivan Kozic <[email protected]> 
>> wrote: 
>> >> >> > Hi John, 
>> >> >> > 
>> >> >> > Wow thanks - this looks quite cool - it seems that they've 
>> started 
>> >> >> > working 
>> >> >> > on YUV422 16bit and CCIR656 as well. May I ask where did you find 
>> the 
>> >> >> > driver? 
>> >> >> 
>> >> >> It is from the current Allwinner Android tree. The CSI driver in 
>> sunxi 
>> >> >> is about two years old. 
>> >> >> 
>> >> >> sunxi kernel needs to be updated to use this driver. 
>> >> >> 
>> >> >> > One crucial file is missing - sun4i_csi_core.h or 
>> sunxi_csi_core.h I 
>> >> >> > guess, 
>> >> >> > as it's not for A10 anymore. 
>> >> >> > 
>> >> >> > 
>> >> >> > On Saturday, March 15, 2014 1:37:13 AM UTC+1, Jon Smirl wrote: 
>> >> >> >> 
>> >> >> >> I copied from the A10 manual. 
>> >> >> >> 
>> >> >> >> Here's a more recent driver.... 
>> >> >> >> 
>> >> >> >> On Fri, Mar 14, 2014 at 7:36 PM, Ivan Kozic <[email protected]> 
>> >> >> >> wrote: 
>> >> >> >> > Hi John - just saw your post. I think you're looking at a 
>> wrong 
>> >> >> >> > document, as 
>> >> >> >> > for A20, the register setting 100 for bits 22:20 is YUV422 
>> 16bit - 
>> >> >> >> > it's 
>> >> >> >> > written in the A20 User Manual on page 371. The problem is in 
>> fact 
>> >> >> >> > this 
>> >> >> >> > very 
>> >> >> >> > vague information in the User Manual - it's almost useless. 
>> This 
>> >> >> >> > is 
>> >> >> >> > why 
>> >> >> >> > I'm 
>> >> >> >> > asking for help from someone who maybe knows the kernel a bit 
>> more 
>> >> >> >> > - 
>> >> >> >> > for 
>> >> >> >> > instance, I'm not even sure which DMA is used for transfers 
>> from 
>> >> >> >> > CSI 
>> >> >> >> > to 
>> >> >> >> > memory, because I have to figure it out from the driver. 
>> >> >> >> > 
>> >> >> >> > I'm also not sure where to search for the driver or more help. 
>> >> >> >> > This 
>> >> >> >> > group 
>> >> >> >> > seems most professional of all by far - I have tried to 
>> contact 
>> >> >> >> > Allwinner, 
>> >> >> >> > but to no avail so far. As for sunxi kernel and drivers, I 
>> only 
>> >> >> >> > know 
>> >> >> >> > of 
>> >> >> >> > the 
>> >> >> >> > Git branch, but noone there has touched CSI driver for 8 
>> months. 
>> >> >> >> > Although I 
>> >> >> >> > did always look in the 3.4 branch, maybe I should check out 
>> >> >> >> > mainline... 
>> >> >> >> > 
>> >> >> >> > Anyway, I'll search for the actual solution myself and if I 
>> find 
>> >> >> >> > it 
>> >> >> >> > post 
>> >> >> >> > back - If anyone can speed me up, I'll be most grateful. 
>> >> >> >> > 
>> >> >> >> > 
>> >> >> >> > On Saturday, March 15, 2014 12:01:41 AM UTC+1, Jon Smirl 
>> wrote: 
>> >> >> >> >> 
>> >> >> >> >> I haven't tried any of this... 
>> >> >> >> >> 
>> >> >> >> >> Look like you would set the input format... 
>> >> >> >> >> 
>> >> >> >> >> 22:20 R/W 3 INPUT_FMT 
>> >> >> >> >> Input data format 
>> >> >> >> >> 000: RAW stream 
>> >> >> >> >> 001: reserved 
>> >> >> >> >> 010: CCIR656(one channel) 
>> >> >> >> >> 011: YUV422 
>> >> >> >> >> 100: YUV444({R, B, G} or {Pr, Pb, Y}) 
>> >> >> >> >> 
>> >> >> >> >> When the input format is set YUV444 
>> >> >> >> >> 1100: field planar YUV 444 
>> >> >> >> >> 1101: field planar YUV 422 UV combined 
>> >> >> >> >> 1110: frame planar YUV 444 
>> >> >> >> >> 1111: frame planar YUV 422 UV combined 
>> >> >> >> >> 
>> >> >> >> >> The the output format is always 24b, right? 
>> >> >> >> >> 
>> >> >> >> >> You're going to have to read the user manual. I don't believe 
>> >> >> >> >> anyone 
>> >> >> >> >> has played with this before. But it looks like the hardware 
>> >> >> >> >> supports 
>> >> >> >> >> it. 
>> >> >> >> >> 
>> >> >> >> >> Also - the CSI driver in the sunxi tree is quite old. First 
>> thing 
>> >> >> >> >> I'd 
>> >> >> >> >> do is update it using the most recent Allwinner CSI driver we 
>> can 
>> >> >> >> >> locate. You might even get lucky and the newer Allwinner 
>> drivers 
>> >> >> >> >> could 
>> >> >> >> >> support 16b. 
>> >> >> >> >> 
>> >> >> >> >> 
>> >> >> >> >> On Fri, Mar 14, 2014 at 3:57 PM, Martin Collins 
>> >> >> >> >> <[email protected]> 
>> >> >> >> >> wrote: 
>> >> >> >> >> > On 2014-03-14 10:42, Ivan Kozic wrote: 
>> >> >> >> >> >> 
>> >> >> >> >> >> If someone knows something, please share - if I had some 
>> more 
>> >> >> >> >> >> documentation, I would have probably already made the 
>> whole 
>> >> >> >> >> >> thing 
>> >> >> >> >> >> work, 
>> >> >> >> >> > 
>> >> >> >> >> > I don't know anything, but by chance I was looking here 
>> today: 
>> >> >> >> >> > http://dl.linux-sunxi.org/A10/ 
>> >> >> >> >> > My impression was that there is an 8 bit channel and a 24 
>> bit 
>> >> >> >> >> > channel. 
>> >> >> >> >> > So perhaps it won't do 16 bits? 
>> >> >> >> >> > 
>> >> >> >> >> > Martin 
>> >> >> >> >> > 
>> >> >> >> >> > -- 
>> >> >> >> >> > 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. 
>>
>> >> >> >> >> 
>> >> >> >> >> 
>> >> >> >> >> 
>> >> >> >> >> -- 
>> >> >> >> >> Jon Smirl 
>> >> >> >> >> [email protected] 
>> >> >> >> > 
>> >> >> >> > -- 
>> >> >> >> > 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. 
>> >> >> >> 
>> >> >> >> 
>> >> >> >> 
>> >> >> >> -- 
>> >> >> >> Jon Smirl 
>> >> >> >> [email protected] 
>> >> >> > 
>> >> >> > -- 
>> >> >> > 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. 
>> >> >> 
>> >> >> 
>> >> >> 
>> >> >> -- 
>> >> >> Jon Smirl 
>> >> >> [email protected] 
>> >> >> 
>> >> >> -- 
>> >> >> You received this message because you are subscribed to a topic in 
>> the 
>> >> >> Google Groups "linux-sunxi" group. 
>> >> >> To unsubscribe from this topic, visit 
>> >> >> 
>> https://groups.google.com/d/topic/linux-sunxi/vU5-3Pc3iOs/unsubscribe. 
>> >> >> To unsubscribe from this group and all its topics, send an email to 
>> >> >> [email protected]. 
>> >> >> 
>> >> >> For more options, visit https://groups.google.com/d/optout. 
>> >> > 
>> >> > 
>> >> > -- 
>> >> > 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. 
>> >> 
>> >> 
>> >> 
>> >> -- 
>> >> Jon Smirl 
>> >> [email protected] 
>> > 
>> > -- 
>> > 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. 
>>
>>
>>
>> -- 
>> Jon Smirl 
>> [email protected] 
>>
>

-- 
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.

Reply via email to