Re: [BUG 5/5] [BUG] media: atomisp: atomisp causes touchscreen to stop working on Microsoft Surface 3
From: Tsuchiya Yuto
Date: Mon Nov 08 2021 - 23:15:15 EST
On Mon, 2021-11-08 at 00:39 +0100, Hans de Goede wrote:
> Hi,
>
> On 10/21/21 11:52, Tsuchiya Yuto wrote:
> > Thank you for your comment :-)
> >
> > First, I need to correct what I said in the previous mail. I later found
> > that loading only "atomisp" (as well as its dependency,
> > atomisp_gmin_platform) does not cause this issue.
> >
> > What causes this issue is rather, loading sensor drivers (as well as its
> > dependency, atomisp_gmin_platform).
> >
> > These sensor drivers for surface3 are both not upstream, but I made them
> > as similar as possible to the upstreamed ones. So, I guess this issue
> > can still be reproducible on some other devices.
>
> I've run some test on my own surface3 and the problem is the writing
> of 0x62 (which becomes just 0x02) to the 0x57 register of the PMIC,
> writing 0x00 to that after loading the sensor driver makes things work
> again.
>
> I have not had time to investigate this further.
>
> I used media-staging + your sensor drivers from:
> https://github.com/kitakar5525/surface3-atomisp-cameras.git
>
> Which was enough to figure this out, but I've not actually gotten
> either of the cameras working :| I get:
>
> [user@fedora nvt]$ ./atomisp-test.sh
> p0: OPEN video device `/dev/video2'
> p0: VIDIOC_S_INPUT <- 1
> p0: ATOMISP_IOC_S_EXPOSURE integration_time={30000,30000} gain={30000,30000}
> p0: ./v4l2n: ATOMISP_IOC_S_EXPOSURE failed on fd 3: Inappropriate ioctl for device (25)
> p0: CLOSED video device
>
> No matter which value I pass for VIDIOC_S_INPUT (tried 0 and 1) any ideas?
I also tried with the latest media-staging patches, and turned out that
somehow I need to revert this commit ("media: atomisp: fix VIDIOC_S_FMT
logic"). If you applied this patch, reverting this for now should make
the world-facing camera (ov8835) work.
Quick test revealed that upstreamed ov5693 driver is also affected this
(confirmed on mipad2) with the following log:
$ sudo dmesg -xw
kern :err : [ 840.165422] atomisp-isp2 0000:00:03.0: can't change power state from D3cold to D0 (config space inaccessible)
kern :warn : [ 840.171126] isys dma store at addr(0xcd408) val(0)
kern :info : [ 840.171890] ov5693_s_power: on 1
kern :info : [ 840.220418] ov5693_init
kern :warn : [ 840.321579] CPU: 3 PID: 3114 Comm: v4l2n Tainted: G WC OE 5.15.0-1-surface-mainline #4 a88d9b28206d4c7ef4fe4f41076a231501cdd2c8
kern :warn : [ 840.321613] Hardware name: Xiaomi Inc Mipad2/Mipad, BIOS MIPad-P4.X64.0043.R03.1603071414 03/07/2016
kern :warn : [ 840.321622] Call Trace:
kern :warn : [ 840.321641] dump_stack_lvl+0x46/0x62
kern :warn : [ 840.321678] ia_css_binary_find+0xa7d/0xd10 [atomisp f8192e88d06518afeafd868d132019e1c605ae55]
kern :warn : [ 840.321959] load_preview_binaries+0x41f/0x4d0 [atomisp f8192e88d06518afeafd868d132019e1c605ae55]
kern :warn : [ 840.322216] ia_css_stream_create+0xd98/0x17c0 [atomisp f8192e88d06518afeafd868d132019e1c605ae55]
kern :warn : [ 840.322467] __create_streams+0x264/0xd80 [atomisp f8192e88d06518afeafd868d132019e1c605ae55]
kern :warn : [ 840.322694] __get_frame_info+0xc0/0x320 [atomisp f8192e88d06518afeafd868d132019e1c605ae55]
kern :warn : [ 840.322931] ? atomisp_css_video_get_output_frame_info+0x80/0x80 [atomisp f8192e88d06518afeafd868d132019e1c605ae55]
kern :warn : [ 840.323157] atomisp_set_fmt+0x121c/0x1cc0 [atomisp f8192e88d06518afeafd868d132019e1c605ae55]
kern :warn : [ 840.323377] ? newidle_balance+0x138/0x430
kern :warn : [ 840.323396] ? atomisp_css_copy_get_output_frame_info+0x20/0x20 [atomisp f8192e88d06518afeafd868d132019e1c605ae55]
kern :warn : [ 840.323663] atomisp_s_fmt_cap+0x40/0x70 [atomisp f8192e88d06518afeafd868d132019e1c605ae55]
kern :warn : [ 840.323898] v4l_s_fmt+0x32a/0x5d0 [videodev dd91554b6b7a8a8394b47bdd48fb7420233a4650]
kern :warn : [ 840.324003] __video_do_ioctl+0x3c5/0x400 [videodev dd91554b6b7a8a8394b47bdd48fb7420233a4650]
kern :warn : [ 840.324108] video_usercopy+0x151/0x780 [videodev dd91554b6b7a8a8394b47bdd48fb7420233a4650]
kern :warn : [ 840.324205] ? v4l_print_control+0x20/0x20 [videodev dd91554b6b7a8a8394b47bdd48fb7420233a4650]
kern :warn : [ 840.324308] v4l2_ioctl+0x48/0x60 [videodev dd91554b6b7a8a8394b47bdd48fb7420233a4650]
kern :warn : [ 840.324401] __x64_sys_ioctl+0x8e/0xd0
kern :warn : [ 840.324426] do_syscall_64+0x5c/0x90
kern :warn : [ 840.324450] ? do_syscall_64+0x69/0x90
kern :warn : [ 840.324466] ? ksys_write+0x67/0xf0
kern :warn : [ 840.324485] ? syscall_exit_to_user_mode+0x23/0x50
kern :warn : [ 840.324502] ? do_syscall_64+0x69/0x90
kern :warn : [ 840.324519] ? exc_page_fault+0x72/0x180
kern :warn : [ 840.324533] entry_SYSCALL_64_after_hwframe+0x44/0xae
kern :warn : [ 840.324554] RIP: 0033:0x46c08b
kern :warn : [ 840.324572] Code: 5c c3 0f 1f 44 00 00 31 ff e8 91 7a 02 00 4c 8b 25 e2 30 0a 00 85 c0 79 90 eb ab 0f 1f 40 00 f3 0f 1e fa b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3
48 c7 c1 c0 ff ff ff f7 d8 64 89 01 48
kern :warn : [ 840.324584] RSP: 002b:00007ffcd87d0378 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
kern :warn : [ 840.324606] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 000000000046c08b
kern :warn : [ 840.324616] RDX: 00007ffcd87d03e0 RSI: ffffffffc0d05605 RDI: 0000000000000003
kern :warn : [ 840.324625] RBP: 00007ffcd87d03b0 R08: 0000000000000000 R09: 00007ffcd87d0100
kern :warn : [ 840.324635] R10: 000000003231564e R11: 0000000000000246 R12: 000000000040cef0
kern :warn : [ 840.324644] R13: 0000000000000000 R14: 00000000004e5018 R15: 0000000000400580
kern :warn : [ 840.324661] ? perf_trace_rdev_set_default_beacon_key+0x225/0x230 [cfg80211 0c5445915bd6781bf918218ab74f6ed610236fa6]
kern :err : [ 840.325998] atomisp-isp2 0000:00:03.0: can't create streams
kern :err : [ 840.326028] atomisp-isp2 0000:00:03.0: __get_frame_info 2560x1440 (padded to 0) returned -22
kern :warn : [ 840.326045] atomisp-isp2 0000:00:03.0: Can't set format on ISP. Error -22
kern :info : [ 840.326177] ov5693_s_power: on 0
# output from intel-nvt
$ ./v4l2n -o testimage_@.raw \
--device /dev/video0 \
--input 0 \
--exposure=100000,100000,100000,100000 \
--parm type=1,capturemode=CI_MODE_PREVIEW \
--fmt type=1,width=1920,height=1080,pixelformat=NV12 \
--reqbufs count=2,memory=USERPTR \
--parameters=wb_config.r=32768,wb_config.gr=21043,wb_config.gb=21043,wb_config.b=30863 \
--capture=2 \
p0: OPEN video device `/dev/video0'
p0: VIDIOC_S_INPUT <- 0
p0: ATOMISP_IOC_S_EXPOSURE integration_time={100000,100000} gain={100000,100000}
p0: VIDIOC_S_PARM
p0: : type: VIDEO_CAPTURE [1]
p0: : capability: 0
p0: : capturemode: CI_MODE_PREVIEW [0x00008000]
p0: : timeperframe: 0/0
p0: : extendedmode: 0
p0: : readbuffers: 0
p0: VIDIOC_S_FMT
p0: ./v4l2n: VIDIOC_S_FMT failed on fd 3: Invalid argument (22)
p0: CLOSED video device
But somehow the world-facing camera (t4ka3) on mipad2 (which I ported
from Android kernel, non-upstream) is still working. So, I guess there
are issues on some sensor drivers side?
Mauro: do you know what could be a issue on sensor drivers? (especially
for the upstreamed ov5693)?
For the user-facing camera (ar0330), I haven't added this note anywhere,
exposure is not implemented yet. And in this case, if I try to set
exposure values using intel-nvt, atomisp stops working. Your above nvt
log shows this case. If you remove the `--exposure` option, you should
get a black image at least (yes, somehow not working yet).
Regards,
Tsuchiya Yuto