You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
(151) |
Apr
(278) |
May
(221) |
Jun
(161) |
Jul
(158) |
Aug
(204) |
Sep
(111) |
Oct
(344) |
Nov
(246) |
Dec
(348) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(393) |
Feb
(317) |
Mar
(225) |
Apr
(338) |
May
(328) |
Jun
(226) |
Jul
(195) |
Aug
(191) |
Sep
(211) |
Oct
(212) |
Nov
(304) |
Dec
(280) |
2003 |
Jan
(332) |
Feb
(401) |
Mar
(355) |
Apr
(240) |
May
(277) |
Jun
(299) |
Jul
(97) |
Aug
(280) |
Sep
(300) |
Oct
(200) |
Nov
(272) |
Dec
(281) |
2004 |
Jan
(384) |
Feb
(155) |
Mar
(155) |
Apr
(98) |
May
(191) |
Jun
(117) |
Jul
(119) |
Aug
(242) |
Sep
(146) |
Oct
(166) |
Nov
(101) |
Dec
(133) |
2005 |
Jan
(196) |
Feb
(133) |
Mar
(190) |
Apr
(100) |
May
(124) |
Jun
(78) |
Jul
(73) |
Aug
(110) |
Sep
(87) |
Oct
(102) |
Nov
(67) |
Dec
(77) |
2006 |
Jan
(75) |
Feb
(35) |
Mar
(51) |
Apr
(144) |
May
(40) |
Jun
(70) |
Jul
(53) |
Aug
(34) |
Sep
(31) |
Oct
(49) |
Nov
(80) |
Dec
(53) |
2007 |
Jan
(72) |
Feb
(21) |
Mar
(67) |
Apr
(56) |
May
(45) |
Jun
(23) |
Jul
(15) |
Aug
(27) |
Sep
(41) |
Oct
(20) |
Nov
(60) |
Dec
(52) |
2008 |
Jan
(40) |
Feb
(53) |
Mar
(41) |
Apr
(12) |
May
(25) |
Jun
(20) |
Jul
(19) |
Aug
(23) |
Sep
(29) |
Oct
(15) |
Nov
(10) |
Dec
(18) |
2009 |
Jan
(24) |
Feb
(19) |
Mar
(5) |
Apr
(17) |
May
(11) |
Jun
(43) |
Jul
(4) |
Aug
(2) |
Sep
(17) |
Oct
(15) |
Nov
(15) |
Dec
(4) |
2010 |
Jan
(8) |
Feb
(5) |
Mar
(4) |
Apr
(23) |
May
(16) |
Jun
|
Jul
(5) |
Aug
(1) |
Sep
(7) |
Oct
(31) |
Nov
(11) |
Dec
(6) |
2011 |
Jan
(10) |
Feb
(3) |
Mar
|
Apr
|
May
(4) |
Jun
(2) |
Jul
(5) |
Aug
(1) |
Sep
(25) |
Oct
(1) |
Nov
(13) |
Dec
|
2012 |
Jan
(2) |
Feb
|
Mar
(1) |
Apr
(1) |
May
|
Jun
(5) |
Jul
|
Aug
|
Sep
(5) |
Oct
|
Nov
(9) |
Dec
(3) |
2013 |
Jan
(3) |
Feb
(1) |
Mar
(9) |
Apr
(3) |
May
|
Jun
|
Jul
|
Aug
|
Sep
(2) |
Oct
(1) |
Nov
(2) |
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(6) |
Jul
(4) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
(1) |
2015 |
Jan
|
Feb
|
Mar
(1) |
Apr
(4) |
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
(2) |
Dec
|
2016 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
(4) |
Jul
|
Aug
(2) |
Sep
|
Oct
(2) |
Nov
(4) |
Dec
(5) |
2017 |
Jan
|
Feb
|
Mar
|
Apr
(2) |
May
(6) |
Jun
|
Jul
|
Aug
(2) |
Sep
(2) |
Oct
(3) |
Nov
|
Dec
|
2018 |
Jan
|
Feb
|
Mar
(1) |
Apr
(10) |
May
(4) |
Jun
(2) |
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
2019 |
Jan
|
Feb
(2) |
Mar
|
Apr
(7) |
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
(7) |
Oct
(5) |
Nov
|
Dec
|
2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(12) |
Nov
|
Dec
|
2021 |
Jan
(9) |
Feb
(4) |
Mar
(4) |
Apr
(2) |
May
(45) |
Jun
(1) |
Jul
|
Aug
|
Sep
(23) |
Oct
(39) |
Nov
(8) |
Dec
(19) |
2022 |
Jan
|
Feb
|
Mar
(10) |
Apr
(26) |
May
(8) |
Jun
(2) |
Jul
(10) |
Aug
(2) |
Sep
(3) |
Oct
(21) |
Nov
(3) |
Dec
|
2023 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
(1) |
2024 |
Jan
(14) |
Feb
(3) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2025 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Hans V. <hve...@xs...> - 2021-11-08 08:21:45
|
On 07/11/2021 17:35, LABBE Corentin wrote: > Le Wed, Nov 03, 2021 at 05:29:46PM +0100, Hans Verkuil a écrit : >> On 03/11/2021 16:57, LABBE Corentin wrote: >>> Le Wed, Nov 03, 2021 at 04:21:02PM +0100, Hans Verkuil a écrit : >>>> Hi Corentin, >>>> >>>> On 26/10/2021 21:34, Corentin Labbe wrote: >>>>> Hello >>>>> >>>>> The main change of this serie is to fusion all zoran related modules in >>>>> one. >>>>> This fixes the load order problem when everything is built-in. >>>> >>>> I've been testing this series, and while the module load/unload is now working, >>>> I'm running into a lot of other v4l2 compliance issues. >>>> >>>> I've fixed various issues in some follow-up patches available in my tree: >>>> >>>> https://git.linuxtv.org/hverkuil/media_tree.git/log/?h=zoran >>>> >>>> At least some of the worst offenders are now resolved. Note that the patch >>>> dropping read/write support relies on this patch: >>>> >>>> https://patchwork.linuxtv.org/project/linux-media/patch/4f8...@xs.../ >>> >>> Hello >>> >>> My test branch already included your "zoran: fix various V4L2 compliance errors" >>> I have quickly checked other patch and I am ok with them. >>> I will add and test with them. >>> >>>> >>>> But there is one really major bug that makes me hesitant to merge this: >>>> >>>> This works: >>>> >>>> v4l2-ctl -v pixelformat=MJPG,width=768,height=576 >>>> v4l2-ctl --stream-mmap >>>> >>>> This fails: >>>> >>>> v4l2-ctl -v pixelformat=MJPG,width=768,height=288 >>>> v4l2-ctl --stream-mmap >>>> >>>> It's an immediate lock up with nothing to indicate what is wrong. >>>> As soon as the height is 288 or less, this happens. >>>> >>>> Both with my DC30 and DC30D. >>> >>> Just for curiosity, what is the difference between thoses two ? >> >> It's the DC30 variant without an adv7175. >> >>> >>>> >>>> Do you see the same? Any idea what is going on? I would feel much happier >>>> if this is fixed. >>>> >>>> Note that the same problem is present without this patch series, so it's >>>> been there for some time. >>>> >>> >>> I will start on digging this problem and add thoses commands to my CI. >>> And I know there are a huge quantity of problem since origins. >>> A simple example is that just setting MJPEG as default input format does not work. >>> >>> But since it is not related to my serie, can you please merge it. >> >> Before I do that, I would really like to know a bit more about this issue: >> can you reproduce it? Is it DC30 specific or a general problem with zoran? >> >> The problem with this hard hang is that it is hard to do regression testing >> with v4l2-compliance, since it will hang as soon as MJPG pixelformat is >> tested. >> >> I would feel much happier if the hang can be avoided, even if it is just >> with a temporary hack. It will make it much easier going forward. >> > > I found the bug > > The null pointer deref was in zoran_reap_stat_com() due to > buf = zr->inuse[i]; > ... > buf->vbuf.vb2_buf.timestamp = ktime_get_ns(); > with buf = NULL; > > It is due to miscalculation of "i". > > I will resend my serie with the fix for that. Excellent news! Thank you for tracking this one down. When you post your series, can you include my patches from https://git.linuxtv.org/hverkuil/media_tree.git/log/?h=zoran as well? Regards, Hans |
From: LABBE C. <cl...@ba...> - 2021-11-05 14:53:34
|
Le Wed, Nov 03, 2021 at 05:29:46PM +0100, Hans Verkuil a écrit : > On 03/11/2021 16:57, LABBE Corentin wrote: > > Le Wed, Nov 03, 2021 at 04:21:02PM +0100, Hans Verkuil a écrit : > >> Hi Corentin, > >> > >> On 26/10/2021 21:34, Corentin Labbe wrote: > >>> Hello > >>> > >>> The main change of this serie is to fusion all zoran related modules in > >>> one. > >>> This fixes the load order problem when everything is built-in. > >> > >> I've been testing this series, and while the module load/unload is now working, > >> I'm running into a lot of other v4l2 compliance issues. > >> > >> I've fixed various issues in some follow-up patches available in my tree: > >> > >> https://git.linuxtv.org/hverkuil/media_tree.git/log/?h=zoran > >> > >> At least some of the worst offenders are now resolved. Note that the patch > >> dropping read/write support relies on this patch: > >> > >> https://patchwork.linuxtv.org/project/linux-media/patch/4f8...@xs.../ > > > > Hello > > > > My test branch already included your "zoran: fix various V4L2 compliance errors" > > I have quickly checked other patch and I am ok with them. > > I will add and test with them. > > > >> > >> But there is one really major bug that makes me hesitant to merge this: > >> > >> This works: > >> > >> v4l2-ctl -v pixelformat=MJPG,width=768,height=576 > >> v4l2-ctl --stream-mmap > >> > >> This fails: > >> > >> v4l2-ctl -v pixelformat=MJPG,width=768,height=288 > >> v4l2-ctl --stream-mmap > >> > >> It's an immediate lock up with nothing to indicate what is wrong. > >> As soon as the height is 288 or less, this happens. > >> > >> Both with my DC30 and DC30D. > > > > Just for curiosity, what is the difference between thoses two ? > > It's the DC30 variant without an adv7175. So my patch removing adv7175 from DC30 is wrong. I need to add a new DC30D. > > > > >> > >> Do you see the same? Any idea what is going on? I would feel much happier > >> if this is fixed. > >> > >> Note that the same problem is present without this patch series, so it's > >> been there for some time. > >> > > > > I will start on digging this problem and add thoses commands to my CI. > > And I know there are a huge quantity of problem since origins. > > A simple example is that just setting MJPEG as default input format does not work. > > > > But since it is not related to my serie, can you please merge it. > > Before I do that, I would really like to know a bit more about this issue: > can you reproduce it? Is it DC30 specific or a general problem with zoran? > > The problem with this hard hang is that it is hard to do regression testing > with v4l2-compliance, since it will hang as soon as MJPG pixelformat is > tested. > > I would feel much happier if the hang can be avoided, even if it is just > with a temporary hack. It will make it much easier going forward. > I hit the same problem with my DC10+. I got the following trace: [ 97.022391] BUG: kernel NULL pointer dereference, address: 0000000000000018 [ 97.029357] #PF: supervisor write access in kernel mode [ 97.034579] #PF: error_code(0x0002) - not-present page [ 97.039712] PGD 100e30067 P4D 100e30067 PUD 11c958067 PMD 0 [ 97.045370] Oops: 0002 [#1] PREEMPT SMP NOPTI [ 97.049723] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G C 5.15.0-next-20211105+ #126 [ 97.058500] Hardware name: To Be Filled By O.E.M. To Be Filled By O.E.M./K10N78, BIOS P2.00 07/01/2010 [ 97.067791] RIP: 0010:zoran_irq+0x178/0x2e0 [zr36067] [ 97.072845] Code: 01 8d 5c 00 01 48 8b 85 90 0c 00 00 48 63 db 44 8b 2c 98 41 f6 c5 01 0f 84 64 01 00 00 4c 8b bc dd 38 0d 00 00 e8 98 72 a1 fa <49> 89 47 18 83 bd 90 0b 00 00 01 0f 84 da 00 00 00 48 8b 85 68 0c [ 97.091590] RSP: 0018:ffffa57040003f00 EFLAGS: 00010016 [ 97.096807] RAX: 000000169273a7d2 RBX: 0000000000000001 RCX: 0000000000000018 [ 97.103932] RDX: 000000830c927d90 RSI: 000000000000d33a RDI: 00041965ba87a734 [ 97.111063] RBP: ffff9d845cce1028 R08: 00000000005b6db7 R09: 0000000000000000 [ 97.118188] R10: 0000000000000000 R11: ffffa57040003ff8 R12: 0000000000000065 [ 97.125312] R13: 0000000004027541 R14: ffff9d845cce1d58 R15: 0000000000000000 [ 97.132434] FS: 0000000000000000(0000) GS:ffff9d845fc00000(0000) knlGS:0000000000000000 [ 97.140513] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 97.146249] CR2: 0000000000000018 CR3: 000000011c956000 CR4: 00000000000006f0 [ 97.153374] Call Trace: [ 97.155822] <IRQ> [ 97.157840] __handle_irq_event_percpu+0x35/0x180 [ 97.162546] handle_irq_event+0x50/0xb0 [ 97.166384] handle_fasteoi_irq+0x8b/0x1e0 [ 97.170483] __common_interrupt+0x64/0x100 [ 97.174581] common_interrupt+0x9f/0xc0 [ 97.178414] </IRQ> [ 97.180510] <TASK> [ 97.182609] asm_common_interrupt+0x1e/0x40 [ 97.186793] RIP: 0010:acpi_idle_do_entry+0x47/0x50 [ 97.191585] Code: 08 48 8b 15 1f db 5d 01 ed c3 e9 64 fd ff ff 65 48 8b 04 25 00 ad 01 00 48 8b 00 a8 08 75 ea eb 07 0f 00 2d 0b 80 5b 00 fb f4 <fa> c3 cc cc cc cc cc cc cc 41 56 49 89 f6 41 55 41 89 d5 41 54 55 [ 97.210323] RSP: 0018:ffffffffbc603e30 EFLAGS: 00000246 [ 97.215539] RAX: 0000000000004000 RBX: ffff9d84413f1c00 RCX: 000000000000001f [ 97.222666] RDX: ffff9d845fc00000 RSI: ffff9d8440165000 RDI: ffff9d8440165064 [ 97.229798] RBP: ffff9d8440165064 R08: 000000000001184d R09: 0000000000000018 [ 97.236921] R10: 00000000000029cc R11: 000000000000318c R12: 0000000000000001 [ 97.244046] R13: ffffffffbc7c3e20 R14: 0000000000000001 R15: 0000000000000000 [ 97.251178] acpi_idle_enter+0x99/0xe0 [ 97.254931] cpuidle_enter_state+0x84/0x360 [ 97.259118] cpuidle_enter+0x24/0x40 [ 97.262698] do_idle+0x1d0/0x250 [ 97.265928] cpu_startup_entry+0x14/0x20 [ 97.269846] start_kernel+0x63a/0x65f [ 97.273514] secondary_startup_64_no_verify+0xc2/0xcb [ 97.278565] </TASK> [ 97.280748] Modules linked in: adv7175 saa7110 zr36067(C) videobuf2_dma_contig [ 97.287970] CR2: 0000000000000018 [ 97.291279] ---[ end trace 0ee22c5269015e89 ]--- [ 97.295888] RIP: 0010:zoran_irq+0x178/0x2e0 [zr36067] [ 97.300941] Code: 01 8d 5c 00 01 48 8b 85 90 0c 00 00 48 63 db 44 8b 2c 98 41 f6 c5 01 0f 84 64 01 00 00 4c 8b bc dd 38 0d 00 00 e8 98 72 a1 fa <49> 89 47 18 83 bd 90 0b 00 00 01 0f 84 da 00 00 00 48 8b 85 68 0c [ 97.319679] RSP: 0018:ffffa57040003f00 EFLAGS: 00010016 [ 97.324896] RAX: 000000169273a7d2 RBX: 0000000000000001 RCX: 0000000000000018 [ 97.332019] RDX: 000000830c927d90 RSI: 000000000000d33a RDI: 00041965ba87a734 [ 97.339144] RBP: ffff9d845cce1028 R08: 00000000005b6db7 R09: 0000000000000000 [ 97.346276] R10: 0000000000000000 R11: ffffa57040003ff8 R12: 0000000000000065 [ 97.353401] R13: 0000000004027541 R14: ffff9d845cce1d58 R15: 0000000000000000 [ 97.360525] FS: 0000000000000000(0000) GS:ffff9d845fc00000(0000) knlGS:0000000000000000 [ 97.368603] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 97.374340] CR2: 0000000000000018 CR3: 000000011c956000 CR4: 00000000000006f0 [ 97.381464] Kernel panic - not syncing: Fatal exception in interrupt [ 97.387810] Kernel Offset: 0x39c00000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff) [ 97.398580] ---[ end Kernel panic - not syncing: Fatal exception in interrupt ]--- x86_64-pc-linux-gnu-addr2line -e vmlinux zoran_irq+0x16f/0x2e0 /usr/src/linux-next/arch/x86/include/asm/processor.h:443 I have no more clue for the moment. |
From: Hans V. <hve...@xs...> - 2021-11-03 16:30:11
|
On 03/11/2021 16:57, LABBE Corentin wrote: > Le Wed, Nov 03, 2021 at 04:21:02PM +0100, Hans Verkuil a écrit : >> Hi Corentin, >> >> On 26/10/2021 21:34, Corentin Labbe wrote: >>> Hello >>> >>> The main change of this serie is to fusion all zoran related modules in >>> one. >>> This fixes the load order problem when everything is built-in. >> >> I've been testing this series, and while the module load/unload is now working, >> I'm running into a lot of other v4l2 compliance issues. >> >> I've fixed various issues in some follow-up patches available in my tree: >> >> https://git.linuxtv.org/hverkuil/media_tree.git/log/?h=zoran >> >> At least some of the worst offenders are now resolved. Note that the patch >> dropping read/write support relies on this patch: >> >> https://patchwork.linuxtv.org/project/linux-media/patch/4f8...@xs.../ > > Hello > > My test branch already included your "zoran: fix various V4L2 compliance errors" > I have quickly checked other patch and I am ok with them. > I will add and test with them. > >> >> But there is one really major bug that makes me hesitant to merge this: >> >> This works: >> >> v4l2-ctl -v pixelformat=MJPG,width=768,height=576 >> v4l2-ctl --stream-mmap >> >> This fails: >> >> v4l2-ctl -v pixelformat=MJPG,width=768,height=288 >> v4l2-ctl --stream-mmap >> >> It's an immediate lock up with nothing to indicate what is wrong. >> As soon as the height is 288 or less, this happens. >> >> Both with my DC30 and DC30D. > > Just for curiosity, what is the difference between thoses two ? It's the DC30 variant without an adv7175. > >> >> Do you see the same? Any idea what is going on? I would feel much happier >> if this is fixed. >> >> Note that the same problem is present without this patch series, so it's >> been there for some time. >> > > I will start on digging this problem and add thoses commands to my CI. > And I know there are a huge quantity of problem since origins. > A simple example is that just setting MJPEG as default input format does not work. > > But since it is not related to my serie, can you please merge it. Before I do that, I would really like to know a bit more about this issue: can you reproduce it? Is it DC30 specific or a general problem with zoran? The problem with this hard hang is that it is hard to do regression testing with v4l2-compliance, since it will hang as soon as MJPG pixelformat is tested. I would feel much happier if the hang can be avoided, even if it is just with a temporary hack. It will make it much easier going forward. Regards, Hans |
From: LABBE C. <cl...@ba...> - 2021-11-03 15:57:12
|
Le Wed, Nov 03, 2021 at 04:21:02PM +0100, Hans Verkuil a écrit : > Hi Corentin, > > On 26/10/2021 21:34, Corentin Labbe wrote: > > Hello > > > > The main change of this serie is to fusion all zoran related modules in > > one. > > This fixes the load order problem when everything is built-in. > > I've been testing this series, and while the module load/unload is now working, > I'm running into a lot of other v4l2 compliance issues. > > I've fixed various issues in some follow-up patches available in my tree: > > https://git.linuxtv.org/hverkuil/media_tree.git/log/?h=zoran > > At least some of the worst offenders are now resolved. Note that the patch > dropping read/write support relies on this patch: > > https://patchwork.linuxtv.org/project/linux-media/patch/4f8...@xs.../ Hello My test branch already included your "zoran: fix various V4L2 compliance errors" I have quickly checked other patch and I am ok with them. I will add and test with them. > > But there is one really major bug that makes me hesitant to merge this: > > This works: > > v4l2-ctl -v pixelformat=MJPG,width=768,height=576 > v4l2-ctl --stream-mmap > > This fails: > > v4l2-ctl -v pixelformat=MJPG,width=768,height=288 > v4l2-ctl --stream-mmap > > It's an immediate lock up with nothing to indicate what is wrong. > As soon as the height is 288 or less, this happens. > > Both with my DC30 and DC30D. Just for curiosity, what is the difference between thoses two ? > > Do you see the same? Any idea what is going on? I would feel much happier > if this is fixed. > > Note that the same problem is present without this patch series, so it's > been there for some time. > I will start on digging this problem and add thoses commands to my CI. And I know there are a huge quantity of problem since origins. A simple example is that just setting MJPEG as default input format does not work. But since it is not related to my serie, can you please merge it. Thanks Regards |
From: Hans V. <hve...@xs...> - 2021-11-03 15:21:19
|
Hi Corentin, On 26/10/2021 21:34, Corentin Labbe wrote: > Hello > > The main change of this serie is to fusion all zoran related modules in > one. > This fixes the load order problem when everything is built-in. I've been testing this series, and while the module load/unload is now working, I'm running into a lot of other v4l2 compliance issues. I've fixed various issues in some follow-up patches available in my tree: https://git.linuxtv.org/hverkuil/media_tree.git/log/?h=zoran At least some of the worst offenders are now resolved. Note that the patch dropping read/write support relies on this patch: https://patchwork.linuxtv.org/project/linux-media/patch/4f8...@xs.../ But there is one really major bug that makes me hesitant to merge this: This works: v4l2-ctl -v pixelformat=MJPG,width=768,height=576 v4l2-ctl --stream-mmap This fails: v4l2-ctl -v pixelformat=MJPG,width=768,height=288 v4l2-ctl --stream-mmap It's an immediate lock up with nothing to indicate what is wrong. As soon as the height is 288 or less, this happens. Both with my DC30 and DC30D. Do you see the same? Any idea what is going on? I would feel much happier if this is fixed. Note that the same problem is present without this patch series, so it's been there for some time. Regards, Hans > > Regards > > Changes since v2: > - added the 4 latest patchs > - removed DEBUGFS kconfig option > - fixed Dan Carpenter's reported codec issues > - fixed kernel test robot's reported issues on vb2_dma_contig_set_max_seg_size() > > Changes since v1: > - add missing debugfs cleaning > - clean some remaining module_get/put functions which made impossible to > remove the zoran module > - added the two latest patchs > > Corentin Labbe (14): > staging: media: zoran: move module parameter checks to zoran_probe > staging: media: zoran: use module_pci_driver > staging: media: zoran: rename debug module parameter > staging: media: zoran: add debugfs > staging: media: zoran: videocode: remove procfs > staging: media: zoran: fusion all modules > staging: media: zoran: remove vidmem > staging: media: zoran: move videodev alloc > staging: media: zoran: move config select on primary kconfig > staging: media: zoran: introduce zoran_i2c_init > staging: media: zoran: fix usage of vb2_dma_contig_set_max_seg_size > staging: media: zoran: clean unused code > staging: media: zoran: fix counting buffer in reserve > staging: media: zoran: DC30 encoder is not adv7175 > > drivers/staging/media/zoran/Kconfig | 38 +- > drivers/staging/media/zoran/Makefile | 8 +- > drivers/staging/media/zoran/videocodec.c | 68 +--- > drivers/staging/media/zoran/videocodec.h | 4 +- > drivers/staging/media/zoran/zoran.h | 18 +- > drivers/staging/media/zoran/zoran_card.c | 400 +++++++++++++-------- > drivers/staging/media/zoran/zoran_device.h | 2 - > drivers/staging/media/zoran/zoran_driver.c | 8 +- > drivers/staging/media/zoran/zr36016.c | 25 +- > drivers/staging/media/zoran/zr36016.h | 2 + > drivers/staging/media/zoran/zr36050.c | 24 +- > drivers/staging/media/zoran/zr36050.h | 2 + > drivers/staging/media/zoran/zr36060.c | 23 +- > drivers/staging/media/zoran/zr36060.h | 2 + > 14 files changed, 317 insertions(+), 307 deletions(-) > |
From: LABBE C. <cl...@ba...> - 2021-11-02 21:29:38
|
Le Tue, Nov 02, 2021 at 08:40:28PM +0300, Dan Carpenter a écrit : > On Sun, Oct 17, 2021 at 10:05:06PM +0200, LABBE Corentin wrote: > > Le Thu, Oct 14, 2021 at 10:37:52AM +0300, Dan Carpenter a écrit : > > > On Wed, Oct 13, 2021 at 06:58:06PM +0000, Corentin Labbe wrote: > > > > +config VIDEO_ZORAN_DEBUG > > > > + bool "Enable zoran debugfs" > > > > + depends on VIDEO_ZORAN > > > > + depends on DEBUG_FS > > > > + help > > > > + Say y to enable zoran debug file. > > > > + This will create /sys/kernel/debug/CARD_NAME/debug for displaying > > > > + stats and debug information. > > > > > > Why bother with a CONFIG? Just make it always on? > > > > > > > Hello > > > > I love to provides choice to user (and so avoid a dep on DEBUG_FS), even if I think I am the only one remaining user. > > Sorry, for the delay, I was on vacation. > > No, there is no depends on DEBUG_FS in the method that I am describing. > > How that works is when DEBUG_FS is turned on then it's on for everything, > but when it's disabled it's disabled for everything. You do not need > the "depends on DEBUG_FS" and if you make this an option the it feels > like it should be a selects DEBUG_FS instead. > > How this normally works is that when you have debugfs disabled, there > are dummy files in the debugfs .h files. I bet the compiler can tell > most of those are empty and removes them. So if you have DEBUG_FS then > it doesn't use that much more memory than when VIDEO_ZORAN_DEBUG is > disabled. > > I don't know if I'm being clear at all #jetlag. > > It should be easy to check. Just remove the "depends on DEBUG_FS" and > enable VIDEO_ZORAN_DEBUG. Disable DEBUG_FS. It should still build fine > because of the dummy functions. That's build 1. Then disable > VIDEO_ZORAN_DEBUG and that's build 2. See how much memory difference > there is between 1 and 2. > No worry for the delay. Anyway, I have removed VIDEO_ZORAN_DEBUG in v3 since Hans Verkuil also asked for its removing. Regards |
From: Dan C. <dan...@or...> - 2021-11-02 17:41:23
|
On Sun, Oct 17, 2021 at 10:05:06PM +0200, LABBE Corentin wrote: > Le Thu, Oct 14, 2021 at 10:37:52AM +0300, Dan Carpenter a écrit : > > On Wed, Oct 13, 2021 at 06:58:06PM +0000, Corentin Labbe wrote: > > > +config VIDEO_ZORAN_DEBUG > > > + bool "Enable zoran debugfs" > > > + depends on VIDEO_ZORAN > > > + depends on DEBUG_FS > > > + help > > > + Say y to enable zoran debug file. > > > + This will create /sys/kernel/debug/CARD_NAME/debug for displaying > > > + stats and debug information. > > > > Why bother with a CONFIG? Just make it always on? > > > > Hello > > I love to provides choice to user (and so avoid a dep on DEBUG_FS), even if I think I am the only one remaining user. Sorry, for the delay, I was on vacation. No, there is no depends on DEBUG_FS in the method that I am describing. How that works is when DEBUG_FS is turned on then it's on for everything, but when it's disabled it's disabled for everything. You do not need the "depends on DEBUG_FS" and if you make this an option the it feels like it should be a selects DEBUG_FS instead. How this normally works is that when you have debugfs disabled, there are dummy files in the debugfs .h files. I bet the compiler can tell most of those are empty and removes them. So if you have DEBUG_FS then it doesn't use that much more memory than when VIDEO_ZORAN_DEBUG is disabled. I don't know if I'm being clear at all #jetlag. It should be easy to check. Just remove the "depends on DEBUG_FS" and enable VIDEO_ZORAN_DEBUG. Disable DEBUG_FS. It should still build fine because of the dummy functions. That's build 1. Then disable VIDEO_ZORAN_DEBUG and that's build 2. See how much memory difference there is between 1 and 2. regards, dan carpenter |
From: Corentin L. <cl...@ba...> - 2021-10-27 09:37:05
|
Reduces the size of the probe function by adding zoran_i2c_init/zoran_i2c_exit functions. Signed-off-by: Corentin Labbe <cl...@ba...> --- drivers/staging/media/zoran/zoran_card.c | 73 ++++++++++++++++++------ 1 file changed, 54 insertions(+), 19 deletions(-) diff --git a/drivers/staging/media/zoran/zoran_card.c b/drivers/staging/media/zoran/zoran_card.c index 19eb3150074a..a00ad40244d0 100644 --- a/drivers/staging/media/zoran/zoran_card.c +++ b/drivers/staging/media/zoran/zoran_card.c @@ -931,6 +931,53 @@ static int zoran_init_video_devices(struct zoran *zr) return err; } +/* + * v4l2_device_unregister() will care about removing zr->encoder/zr->decoder + * via v4l2_i2c_subdev_unregister() + */ +static int zoran_i2c_init(struct zoran *zr) +{ + int err; + + pci_info(zr->pci_dev, "Initializing i2c bus...\n"); + + err = zoran_register_i2c(zr); + if (err) { + pci_err(zr->pci_dev, "%s - cannot initialize i2c bus\n", __func__); + return err; + } + + zr->decoder = v4l2_i2c_new_subdev(&zr->v4l2_dev, &zr->i2c_adapter, + zr->card.i2c_decoder, 0, + zr->card.addrs_decoder); + if (!zr->decoder) { + pci_err(zr->pci_dev, "Fail to get decoder %s\n", zr->card.i2c_decoder); + err = -EINVAL; + goto error_decoder; + } + + if (zr->card.i2c_encoder) { + zr->encoder = v4l2_i2c_new_subdev(&zr->v4l2_dev, &zr->i2c_adapter, + zr->card.i2c_encoder, 0, + zr->card.addrs_encoder); + if (!zr->encoder) { + pci_err(zr->pci_dev, "Fail to get encoder %s\n", zr->card.i2c_encoder); + err = -EINVAL; + goto error_decoder; + } + } + return 0; + +error_decoder: + zoran_unregister_i2c(zr); + return err; +} + +static void zoran_i2c_exit(struct zoran *zr) +{ + zoran_unregister_i2c(zr); +} + void zoran_open_init_params(struct zoran *zr) { int i; @@ -1059,7 +1106,7 @@ static void zoran_remove(struct pci_dev *pdev) videocodec_exit(zr); /* unregister i2c bus */ - zoran_unregister_i2c(zr); + zoran_i2c_exit(zr); /* disable PCI bus-mastering */ zoran_set_pci_master(zr, 0); /* put chip into reset */ @@ -1340,22 +1387,10 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) } zr36057_restart(zr); - /* i2c */ - pci_info(zr->pci_dev, "Initializing i2c bus...\n"); - if (zoran_register_i2c(zr) < 0) { - pci_err(pdev, "%s - can't initialize i2c bus\n", __func__); + err = zoran_i2c_init(zr); + if (err) goto zr_free_irq; - } - - zr->decoder = v4l2_i2c_new_subdev(&zr->v4l2_dev, &zr->i2c_adapter, - zr->card.i2c_decoder, 0, - zr->card.addrs_decoder); - - if (zr->card.i2c_encoder) - zr->encoder = v4l2_i2c_new_subdev(&zr->v4l2_dev, &zr->i2c_adapter, - zr->card.i2c_encoder, 0, - zr->card.addrs_encoder); pci_info(zr->pci_dev, "Initializing videocodec bus...\n"); err = videocodec_init(zr); @@ -1370,15 +1405,15 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) if (zr->card.video_codec != 0) { master_codec = zoran_setup_videocodec(zr, zr->card.video_codec); if (!master_codec) - goto zr_unreg_i2c; + goto zr_unreg_videocodec; zr->codec = videocodec_attach(master_codec); if (!zr->codec) { pci_err(pdev, "%s - no codec found\n", __func__); - goto zr_unreg_i2c; + goto zr_unreg_videocodec; } if (zr->codec->type != zr->card.video_codec) { pci_err(pdev, "%s - wrong codec\n", __func__); - goto zr_detach_codec; + goto zr_unreg_videocodec; } } if (zr->card.video_vfe != 0) { @@ -1417,7 +1452,7 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) zr_unreg_videocodec: videocodec_exit(zr); zr_unreg_i2c: - zoran_unregister_i2c(zr); + zoran_i2c_exit(zr); zr_free_irq: btwrite(0, ZR36057_SPGPPCR); pci_free_irq(zr->pci_dev, 0, zr); -- 2.32.0 |
From: Corentin L. <cl...@ba...> - 2021-10-27 07:26:13
|
Hello The main change of this serie is to fusion all zoran related modules in one. This fixes the load order problem when everything is built-in. Regards Changes since v2: - added the 4 latest patchs - removed DEBUGFS kconfig option - fixed Dan Carpenter's reported codec issues - fixed kernel test robot's reported issues on vb2_dma_contig_set_max_seg_size() Changes since v1: - add missing debugfs cleaning - clean some remaining module_get/put functions which made impossible to remove the zoran module - added the two latest patchs Corentin Labbe (14): staging: media: zoran: move module parameter checks to zoran_probe staging: media: zoran: use module_pci_driver staging: media: zoran: rename debug module parameter staging: media: zoran: add debugfs staging: media: zoran: videocode: remove procfs staging: media: zoran: fusion all modules staging: media: zoran: remove vidmem staging: media: zoran: move videodev alloc staging: media: zoran: move config select on primary kconfig staging: media: zoran: introduce zoran_i2c_init staging: media: zoran: fix usage of vb2_dma_contig_set_max_seg_size staging: media: zoran: clean unused code staging: media: zoran: fix counting buffer in reserve staging: media: zoran: DC30 encoder is not adv7175 drivers/staging/media/zoran/Kconfig | 38 +- drivers/staging/media/zoran/Makefile | 8 +- drivers/staging/media/zoran/videocodec.c | 68 +--- drivers/staging/media/zoran/videocodec.h | 4 +- drivers/staging/media/zoran/zoran.h | 18 +- drivers/staging/media/zoran/zoran_card.c | 400 +++++++++++++-------- drivers/staging/media/zoran/zoran_device.h | 2 - drivers/staging/media/zoran/zoran_driver.c | 8 +- drivers/staging/media/zoran/zr36016.c | 25 +- drivers/staging/media/zoran/zr36016.h | 2 + drivers/staging/media/zoran/zr36050.c | 24 +- drivers/staging/media/zoran/zr36050.h | 2 + drivers/staging/media/zoran/zr36060.c | 23 +- drivers/staging/media/zoran/zr36060.h | 2 + 14 files changed, 317 insertions(+), 307 deletions(-) -- 2.32.0 |
From: Corentin L. <cl...@ba...> - 2021-10-27 05:51:53
|
Move some code out of zr36057_init() and create new functions for handling zr->video_dev. This permit to ease code reading and fix a zr->video_dev memory leak. Signed-off-by: Corentin Labbe <cl...@ba...> --- drivers/staging/media/zoran/zoran.h | 2 +- drivers/staging/media/zoran/zoran_card.c | 80 ++++++++++++++-------- drivers/staging/media/zoran/zoran_driver.c | 5 +- 3 files changed, 54 insertions(+), 33 deletions(-) diff --git a/drivers/staging/media/zoran/zoran.h b/drivers/staging/media/zoran/zoran.h index 981cb63ac9af..c36b33f42b16 100644 --- a/drivers/staging/media/zoran/zoran.h +++ b/drivers/staging/media/zoran/zoran.h @@ -315,6 +315,6 @@ static inline struct zoran *to_zoran(struct v4l2_device *v4l2_dev) #endif -int zoran_queue_init(struct zoran *zr, struct vb2_queue *vq); +int zoran_queue_init(struct zoran *zr, struct vb2_queue *vq, int dir); void zoran_queue_exit(struct zoran *zr); int zr_set_buf(struct zoran *zr); diff --git a/drivers/staging/media/zoran/zoran_card.c b/drivers/staging/media/zoran/zoran_card.c index 9cd49f85a56e..19eb3150074a 100644 --- a/drivers/staging/media/zoran/zoran_card.c +++ b/drivers/staging/media/zoran/zoran_card.c @@ -885,6 +885,52 @@ int zoran_check_jpg_settings(struct zoran *zr, return 0; } +static int zoran_init_video_device(struct zoran *zr, struct video_device *video_dev, int dir) +{ + int err; + + /* Now add the template and register the device unit. */ + *video_dev = zoran_template; + video_dev->v4l2_dev = &zr->v4l2_dev; + video_dev->lock = &zr->lock; + video_dev->device_caps = V4L2_CAP_STREAMING | dir; + + strscpy(video_dev->name, ZR_DEVNAME(zr), sizeof(video_dev->name)); + /* + * It's not a mem2mem device, but you can both capture and output from one and the same + * device. This should really be split up into two device nodes, but that's a job for + * another day. + */ + video_dev->vfl_dir = VFL_DIR_M2M; + zoran_queue_init(zr, &zr->vq, V4L2_BUF_TYPE_VIDEO_CAPTURE); + + err = video_register_device(video_dev, VFL_TYPE_VIDEO, video_nr[zr->id]); + if (err < 0) + return err; + video_set_drvdata(video_dev, zr); + return 0; +} + +static void zoran_exit_video_devices(struct zoran *zr) +{ + video_unregister_device(zr->video_dev); + kfree(zr->video_dev); +} + +static int zoran_init_video_devices(struct zoran *zr) +{ + int err; + + zr->video_dev = video_device_alloc(); + if (!zr->video_dev) + return -ENOMEM; + + err = zoran_init_video_device(zr, zr->video_dev, V4L2_CAP_VIDEO_CAPTURE); + if (err) + kfree(zr->video_dev); + return err; +} + void zoran_open_init_params(struct zoran *zr) { int i; @@ -956,17 +1002,11 @@ static int zr36057_init(struct zoran *zr) zoran_open_init_params(zr); /* allocate memory *before* doing anything to the hardware in case allocation fails */ - zr->video_dev = video_device_alloc(); - if (!zr->video_dev) { - err = -ENOMEM; - goto exit; - } zr->stat_com = dma_alloc_coherent(&zr->pci_dev->dev, BUZ_NUM_STAT_COM * sizeof(u32), &zr->p_sc, GFP_KERNEL); if (!zr->stat_com) { - err = -ENOMEM; - goto exit_video; + return -ENOMEM; } for (j = 0; j < BUZ_NUM_STAT_COM; j++) zr->stat_com[j] = cpu_to_le32(1); /* mark as unavailable to zr36057 */ @@ -979,26 +1019,9 @@ static int zr36057_init(struct zoran *zr) goto exit_statcom; } - /* Now add the template and register the device unit. */ - *zr->video_dev = zoran_template; - zr->video_dev->v4l2_dev = &zr->v4l2_dev; - zr->video_dev->lock = &zr->lock; - zr->video_dev->device_caps = V4L2_CAP_STREAMING | V4L2_CAP_VIDEO_CAPTURE; - - strscpy(zr->video_dev->name, ZR_DEVNAME(zr), sizeof(zr->video_dev->name)); - /* - * It's not a mem2mem device, but you can both capture and output from one and the same - * device. This should really be split up into two device nodes, but that's a job for - * another day. - */ - zr->video_dev->vfl_dir = VFL_DIR_M2M; - - zoran_queue_init(zr, &zr->vq); - - err = video_register_device(zr->video_dev, VFL_TYPE_VIDEO, video_nr[zr->id]); - if (err < 0) + err = zoran_init_video_devices(zr); + if (err) goto exit_statcomb; - video_set_drvdata(zr->video_dev, zr); zoran_init_hardware(zr); if (!pass_through) { @@ -1013,9 +1036,6 @@ static int zr36057_init(struct zoran *zr) dma_free_coherent(&zr->pci_dev->dev, BUZ_NUM_STAT_COM * sizeof(u32) * 2, zr->stat_comb, zr->p_scb); exit_statcom: dma_free_coherent(&zr->pci_dev->dev, BUZ_NUM_STAT_COM * sizeof(u32), zr->stat_com, zr->p_sc); -exit_video: - kfree(zr->video_dev); -exit: return err; } @@ -1050,7 +1070,7 @@ static void zoran_remove(struct pci_dev *pdev) dma_free_coherent(&zr->pci_dev->dev, BUZ_NUM_STAT_COM * sizeof(u32) * 2, zr->stat_comb, zr->p_scb); pci_release_regions(pdev); pci_disable_device(zr->pci_dev); - video_unregister_device(zr->video_dev); + zoran_exit_video_devices(zr); exit_free: v4l2_ctrl_handler_free(&zr->hdl); v4l2_device_unregister(&zr->v4l2_dev); diff --git a/drivers/staging/media/zoran/zoran_driver.c b/drivers/staging/media/zoran/zoran_driver.c index 46382e43f1bf..551db338c7f7 100644 --- a/drivers/staging/media/zoran/zoran_driver.c +++ b/drivers/staging/media/zoran/zoran_driver.c @@ -1008,7 +1008,7 @@ static const struct vb2_ops zr_video_qops = { .wait_finish = vb2_ops_wait_finish, }; -int zoran_queue_init(struct zoran *zr, struct vb2_queue *vq) +int zoran_queue_init(struct zoran *zr, struct vb2_queue *vq, int dir) { int err; @@ -1016,7 +1016,8 @@ int zoran_queue_init(struct zoran *zr, struct vb2_queue *vq) INIT_LIST_HEAD(&zr->queued_bufs); vq->dev = &zr->pci_dev->dev; - vq->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + vq->type = dir; + vq->io_modes = VB2_USERPTR | VB2_DMABUF | VB2_MMAP | VB2_READ | VB2_WRITE; vq->drv_priv = zr; vq->buf_struct_size = sizeof(struct zr_buffer); -- 2.32.0 |
From: Corentin L. <cl...@ba...> - 2021-10-26 21:30:38
|
Add debugfs for displaying zoran debug and stats information. Signed-off-by: Corentin Labbe <cl...@ba...> --- drivers/staging/media/zoran/Kconfig | 1 + drivers/staging/media/zoran/zoran.h | 2 ++ drivers/staging/media/zoran/zoran_card.c | 36 ++++++++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/drivers/staging/media/zoran/Kconfig b/drivers/staging/media/zoran/Kconfig index 7874842033ca..6d6e4c93f873 100644 --- a/drivers/staging/media/zoran/Kconfig +++ b/drivers/staging/media/zoran/Kconfig @@ -2,6 +2,7 @@ config VIDEO_ZORAN tristate "Zoran ZR36057/36067 Video For Linux (Deprecated)" depends on PCI && I2C_ALGOBIT && VIDEO_V4L2 depends on !ALPHA + depends on DEBUG_FS select VIDEOBUF2_DMA_CONTIG help Say Y for support for MJPEG capture cards based on the Zoran diff --git a/drivers/staging/media/zoran/zoran.h b/drivers/staging/media/zoran/zoran.h index b1ad2a2b914c..981cb63ac9af 100644 --- a/drivers/staging/media/zoran/zoran.h +++ b/drivers/staging/media/zoran/zoran.h @@ -18,6 +18,7 @@ #ifndef _BUZ_H_ #define _BUZ_H_ +#include <linux/debugfs.h> #include <media/v4l2-device.h> #include <media/v4l2-ctrls.h> #include <media/videobuf2-core.h> @@ -295,6 +296,7 @@ struct zoran { struct list_head queued_bufs; spinlock_t queued_bufs_lock; /* Protects queued_bufs */ struct zr_buffer *inuse[BUZ_NUM_STAT_COM * 2]; + struct dentry *dbgfs_dir; }; static inline struct zoran *to_zoran(struct v4l2_device *v4l2_dev) diff --git a/drivers/staging/media/zoran/zoran_card.c b/drivers/staging/media/zoran/zoran_card.c index f1465fbf98af..28a3363a8838 100644 --- a/drivers/staging/media/zoran/zoran_card.c +++ b/drivers/staging/media/zoran/zoran_card.c @@ -945,6 +945,8 @@ static void zoran_remove(struct pci_dev *pdev) if (!zr->initialized) goto exit_free; + debugfs_remove_recursive(zr->dbgfs_dir); + zoran_queue_exit(zr); /* unregister videocodec bus */ @@ -1051,6 +1053,37 @@ static const struct v4l2_ctrl_ops zoran_video_ctrl_ops = { .s_ctrl = zoran_video_set_ctrl, }; +static int zoran_debugfs_show(struct seq_file *seq, void *v) +{ + struct zoran *zr = seq->private; + + seq_printf(seq, "Running mode %x\n", zr->running); + seq_printf(seq, "Codec mode %x\n", zr->codec_mode); + seq_printf(seq, "Norm %llx\n", zr->norm); + seq_printf(seq, "Input %d\n", zr->input); + seq_printf(seq, "Buffersize %d\n", zr->buffer_size); + + seq_printf(seq, "V4L width %dx%d\n", zr->v4l_settings.width, zr->v4l_settings.height); + seq_printf(seq, "V4L bytesperline %d\n", zr->v4l_settings.bytesperline); + + seq_printf(seq, "JPG decimation %u\n", zr->jpg_settings.decimation); + seq_printf(seq, "JPG hor_dcm %u\n", zr->jpg_settings.hor_dcm); + seq_printf(seq, "JPG ver_dcm %u\n", zr->jpg_settings.ver_dcm); + seq_printf(seq, "JPG tmp_dcm %u\n", zr->jpg_settings.tmp_dcm); + seq_printf(seq, "JPG odd_even %u\n", zr->jpg_settings.odd_even); + seq_printf(seq, "JPG crop %dx%d %d %d\n", + zr->jpg_settings.img_x, + zr->jpg_settings.img_y, + zr->jpg_settings.img_width, + zr->jpg_settings.img_height); + + seq_printf(seq, "Prepared %u\n", zr->prepared); + seq_printf(seq, "Queued %u\n", zr->queued); + return 0; +} + +DEFINE_SHOW_ATTRIBUTE(zoran_debugfs); + /* * Scan for a Buz card (actually for the PCI controller ZR36057), * request the irq and map the io memory @@ -1286,6 +1319,9 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) zr->map_mode = ZORAN_MAP_MODE_RAW; + zr->dbgfs_dir = debugfs_create_dir(ZR_DEVNAME(zr), NULL); + debugfs_create_file("debug", 0444, zr->dbgfs_dir, zr, + &zoran_debugfs_fops); return 0; zr_detach_vfe: -- 2.32.0 |
From: Corentin L. <cl...@ba...> - 2021-10-26 20:07:47
|
Now we have a debugfs, we can remove all PROCFS stuff. We keep videocodec_debugfs_show(), it will be used later Signed-off-by: Corentin Labbe <cl...@ba...> --- drivers/staging/media/zoran/videocodec.c | 24 +----------------------- drivers/staging/media/zoran/videocodec.h | 3 +++ 2 files changed, 4 insertions(+), 23 deletions(-) diff --git a/drivers/staging/media/zoran/videocodec.c b/drivers/staging/media/zoran/videocodec.c index 31019b5f377e..5bab7ba56257 100644 --- a/drivers/staging/media/zoran/videocodec.c +++ b/drivers/staging/media/zoran/videocodec.c @@ -16,14 +16,6 @@ #include <linux/types.h> #include <linux/slab.h> -// kernel config is here (procfs flag) - -#ifdef CONFIG_PROC_FS -#include <linux/proc_fs.h> -#include <linux/seq_file.h> -#include <linux/uaccess.h> -#endif - #include "videocodec.h" static int videocodec_debug; @@ -265,8 +257,7 @@ int videocodec_unregister(const struct videocodec *codec) } EXPORT_SYMBOL(videocodec_unregister); -#ifdef CONFIG_PROC_FS -static int proc_videocodecs_show(struct seq_file *m, void *v) +int videocodec_debugfs_show(struct seq_file *m) { struct codec_list *h = codeclist_top; struct attached_list *a; @@ -293,32 +284,19 @@ static int proc_videocodecs_show(struct seq_file *m, void *v) return 0; } -#endif /* ===================== */ /* hook in driver module */ /* ===================== */ static int __init videocodec_init(void) { -#ifdef CONFIG_PROC_FS - static struct proc_dir_entry *videocodec_proc_entry; -#endif - pr_info("Linux video codec intermediate layer: %s\n", VIDEOCODEC_VERSION); -#ifdef CONFIG_PROC_FS - videocodec_proc_entry = proc_create_single("videocodecs", 0, NULL, proc_videocodecs_show); - if (!videocodec_proc_entry) - pr_err("videocodec: can't init procfs.\n"); -#endif return 0; } static void __exit videocodec_exit(void) { -#ifdef CONFIG_PROC_FS - remove_proc_entry("videocodecs", NULL); -#endif } module_init(videocodec_init); diff --git a/drivers/staging/media/zoran/videocodec.h b/drivers/staging/media/zoran/videocodec.h index 8a5003dda9f4..3a508d326049 100644 --- a/drivers/staging/media/zoran/videocodec.h +++ b/drivers/staging/media/zoran/videocodec.h @@ -123,6 +123,7 @@ M zr36055[1] 0001 0000c001 00000000 (zr36050[1]) #ifndef __LINUX_VIDEOCODEC_H #define __LINUX_VIDEOCODEC_H +#include <linux/debugfs.h> #include <linux/videodev2.h> #define CODEC_DO_COMPRESSION 0 @@ -305,4 +306,6 @@ extern int videocodec_unregister(const struct videocodec *); /* the other calls are directly done via the videocodec structure! */ +int videocodec_debugfs_show(struct seq_file *m); + #endif /*ifndef __LINUX_VIDEOCODEC_H */ -- 2.32.0 |
From: Corentin L. <cl...@ba...> - 2021-10-26 20:01:18
|
vb2_dma_contig_set_max_seg_size need to have a size in parameter and not a DMA_BIT_MASK(). While fixing this issue, also fix error handling of all DMA size setting. Reported-by: kernel test robot <lk...@in...> Fixes: d4ae3689226e5 ("media: zoran: device support only 32bit DMA address") Signed-off-by: Corentin Labbe <cl...@ba...> --- drivers/staging/media/zoran/zoran_card.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/staging/media/zoran/zoran_card.c b/drivers/staging/media/zoran/zoran_card.c index a00ad40244d0..4ea2fbf189b9 100644 --- a/drivers/staging/media/zoran/zoran_card.c +++ b/drivers/staging/media/zoran/zoran_card.c @@ -1282,8 +1282,10 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); if (err) - return -ENODEV; - vb2_dma_contig_set_max_seg_size(&pdev->dev, DMA_BIT_MASK(32)); + return err; + err = vb2_dma_contig_set_max_seg_size(&pdev->dev, U32_MAX); + if (err) + return err; nr = zoran_num++; if (nr >= BUZ_MAX) { -- 2.32.0 |
From: Corentin L. <cl...@ba...> - 2021-10-26 19:44:01
|
All zoran module will be merged, so to prevent conflict, the debug module parameter need to be renamed Signed-off-by: Corentin Labbe <cl...@ba...> --- drivers/staging/media/zoran/videocodec.c | 8 ++++---- drivers/staging/media/zoran/zr36016.c | 12 ++++++------ drivers/staging/media/zoran/zr36050.c | 8 ++++---- drivers/staging/media/zoran/zr36060.c | 9 ++++----- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/drivers/staging/media/zoran/videocodec.c b/drivers/staging/media/zoran/videocodec.c index 28031d3fd757..31019b5f377e 100644 --- a/drivers/staging/media/zoran/videocodec.c +++ b/drivers/staging/media/zoran/videocodec.c @@ -26,13 +26,13 @@ #include "videocodec.h" -static int debug; -module_param(debug, int, 0); -MODULE_PARM_DESC(debug, "Debug level (0-4)"); +static int videocodec_debug; +module_param(videocodec_debug, int, 0); +MODULE_PARM_DESC(videocodec_debug, "Debug level (0-4)"); #define dprintk(num, format, args...) \ do { \ - if (debug >= num) \ + if (videocodec_debug >= num) \ printk(format, ##args); \ } while (0) diff --git a/drivers/staging/media/zoran/zr36016.c b/drivers/staging/media/zoran/zr36016.c index 9b350a885879..50605460a44b 100644 --- a/drivers/staging/media/zoran/zr36016.c +++ b/drivers/staging/media/zoran/zr36016.c @@ -22,14 +22,14 @@ /* amount of chips attached via this driver */ static int zr36016_codecs; -/* debugging is available via module parameter */ -static int debug; -module_param(debug, int, 0); -MODULE_PARM_DESC(debug, "Debug level (0-4)"); +static int zr36016_debug; +module_param(zr36016_debug, int, 0); +MODULE_PARM_DESC(zr36016_debug, "Debug level (0-4)"); + #define dprintk(num, format, args...) \ do { \ - if (debug >= num) \ + if (zr36016_debug >= num) \ printk(format, ##args); \ } while (0) @@ -120,7 +120,7 @@ static u8 zr36016_read_version(struct zr36016 *ptr) static int zr36016_basic_test(struct zr36016 *ptr) { - if (debug) { + if (zr36016_debug) { int i; zr36016_writei(ptr, ZR016I_PAX_LO, 0x55); diff --git a/drivers/staging/media/zoran/zr36050.c b/drivers/staging/media/zoran/zr36050.c index c62af27f2683..4dc7927fefc3 100644 --- a/drivers/staging/media/zoran/zr36050.c +++ b/drivers/staging/media/zoran/zr36050.c @@ -32,13 +32,13 @@ static int zr36050_codecs; /* debugging is available via module parameter */ -static int debug; -module_param(debug, int, 0); -MODULE_PARM_DESC(debug, "Debug level (0-4)"); +static int zr36050_debug; +module_param(zr36050_debug, int, 0); +MODULE_PARM_DESC(zr36050_debug, "Debug level (0-4)"); #define dprintk(num, format, args...) \ do { \ - if (debug >= num) \ + if (zr36050_debug >= num) \ printk(format, ##args); \ } while (0) diff --git a/drivers/staging/media/zoran/zr36060.c b/drivers/staging/media/zoran/zr36060.c index 1c3af11b5f24..7904d5b1f402 100644 --- a/drivers/staging/media/zoran/zr36060.c +++ b/drivers/staging/media/zoran/zr36060.c @@ -34,14 +34,13 @@ static bool low_bitrate; module_param(low_bitrate, bool, 0); MODULE_PARM_DESC(low_bitrate, "Buz compatibility option, halves bitrate"); -/* debugging is available via module parameter */ -static int debug; -module_param(debug, int, 0); -MODULE_PARM_DESC(debug, "Debug level (0-4)"); +static int zr36060_debug; +module_param(zr36060_debug, int, 0); +MODULE_PARM_DESC(zr36060_debug, "Debug level (0-4)"); #define dprintk(num, format, args...) \ do { \ - if (debug >= num) \ + if (zr36060_debug >= num) \ printk(format, ##args); \ } while (0) -- 2.32.0 |
From: Corentin L. <cl...@ba...> - 2021-10-26 19:43:52
|
Simplify code by using module_pci_driver() Signed-off-by: Corentin Labbe <cl...@ba...> --- drivers/staging/media/zoran/zoran_card.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/drivers/staging/media/zoran/zoran_card.c b/drivers/staging/media/zoran/zoran_card.c index 3bc0e64f1007..f1465fbf98af 100644 --- a/drivers/staging/media/zoran/zoran_card.c +++ b/drivers/staging/media/zoran/zoran_card.c @@ -1314,23 +1314,4 @@ static struct pci_driver zoran_driver = { .remove = zoran_remove, }; -static int __init zoran_init(void) -{ - int res; - - res = pci_register_driver(&zoran_driver); - if (res) { - pr_err("Unable to register ZR36057 driver\n"); - return res; - } - - return 0; -} - -static void __exit zoran_exit(void) -{ - pci_unregister_driver(&zoran_driver); -} - -module_init(zoran_init); -module_exit(zoran_exit); +module_pci_driver(zoran_driver); -- 2.32.0 |
From: Corentin L. <cl...@ba...> - 2021-10-26 19:43:49
|
Since all kconfigs for card selection are bool, this causes all selected modules to be always built-in. Prevent this by moving selects to the main tristate kconfig. By doing this, remove also all "if MEDIA_SUBDRV_AUTOSELECT" which are wrong, since zoran always need them to work. Signed-off-by: Corentin Labbe <cl...@ba...> --- drivers/staging/media/zoran/Kconfig | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/drivers/staging/media/zoran/Kconfig b/drivers/staging/media/zoran/Kconfig index 4067fa93d44d..faef008b8554 100644 --- a/drivers/staging/media/zoran/Kconfig +++ b/drivers/staging/media/zoran/Kconfig @@ -4,6 +4,16 @@ config VIDEO_ZORAN depends on !ALPHA depends on DEBUG_FS select VIDEOBUF2_DMA_CONTIG + select VIDEO_ADV7170 if VIDEO_ZORAN_LML33R10 + select VIDEO_ADV7175 if VIDEO_ZORAN_DC10 || VIDEO_ZORAN_DC30 + select VIDEO_BT819 if VIDEO_ZORAN_LML33 + select VIDEO_BT856 if VIDEO_ZORAN_LML33 || VIDEO_ZORAN_AVS6EYES + select VIDEO_BT866 if VIDEO_ZORAN_AVS6EYES + select VIDEO_KS0127 if VIDEO_ZORAN_AVS6EYES + select VIDEO_SAA711X if VIDEO_ZORAN_BUZ || VIDEO_ZORAN_LML33R10 + select VIDEO_SAA7110 if VIDEO_ZORAN_DC10 + select VIDEO_SAA7185 if VIDEO_ZORAN_BUZ + select VIDEO_VPX3220 if VIDEO_ZORAN_DC30 help Say Y for support for MJPEG capture cards based on the Zoran 36057/36067 PCI controller chipset. This includes the Iomega @@ -17,8 +27,6 @@ config VIDEO_ZORAN config VIDEO_ZORAN_DC30 bool "Pinnacle/Miro DC30(+) support" depends on VIDEO_ZORAN - select VIDEO_ADV7175 if MEDIA_SUBDRV_AUTOSELECT - select VIDEO_VPX3220 if MEDIA_SUBDRV_AUTOSELECT help Support for the Pinnacle/Miro DC30(+) MJPEG capture/playback card. This also supports really old DC10 cards based on the @@ -35,16 +43,12 @@ config VIDEO_ZORAN_ZR36060 config VIDEO_ZORAN_BUZ bool "Iomega Buz support" depends on VIDEO_ZORAN_ZR36060 - select VIDEO_SAA711X if MEDIA_SUBDRV_AUTOSELECT - select VIDEO_SAA7185 if MEDIA_SUBDRV_AUTOSELECT help Support for the Iomega Buz MJPEG capture/playback card. config VIDEO_ZORAN_DC10 bool "Pinnacle/Miro DC10(+) support" depends on VIDEO_ZORAN_ZR36060 - select VIDEO_SAA7110 if MEDIA_SUBDRV_AUTOSELECT - select VIDEO_ADV7175 if MEDIA_SUBDRV_AUTOSELECT help Support for the Pinnacle/Miro DC10(+) MJPEG capture/playback card. @@ -52,8 +56,6 @@ config VIDEO_ZORAN_DC10 config VIDEO_ZORAN_LML33 bool "Linux Media Labs LML33 support" depends on VIDEO_ZORAN_ZR36060 - select VIDEO_BT819 if MEDIA_SUBDRV_AUTOSELECT - select VIDEO_BT856 if MEDIA_SUBDRV_AUTOSELECT help Support for the Linux Media Labs LML33 MJPEG capture/playback card. @@ -61,8 +63,6 @@ config VIDEO_ZORAN_LML33 config VIDEO_ZORAN_LML33R10 bool "Linux Media Labs LML33R10 support" depends on VIDEO_ZORAN_ZR36060 - select VIDEO_SAA711X if MEDIA_SUBDRV_AUTOSELECT - select VIDEO_ADV7170 if MEDIA_SUBDRV_AUTOSELECT help support for the Linux Media Labs LML33R10 MJPEG capture/playback card. @@ -70,8 +70,5 @@ config VIDEO_ZORAN_LML33R10 config VIDEO_ZORAN_AVS6EYES bool "AverMedia 6 Eyes support" depends on VIDEO_ZORAN_ZR36060 - select VIDEO_BT856 if MEDIA_SUBDRV_AUTOSELECT - select VIDEO_BT866 if MEDIA_SUBDRV_AUTOSELECT - select VIDEO_KS0127 if MEDIA_SUBDRV_AUTOSELECT help Support for the AverMedia 6 Eyes video surveillance card. -- 2.32.0 |
From: Corentin L. <cl...@ba...> - 2021-10-26 19:43:48
|
The zoran driver is split in many modules, but this lead to some problems. One of them is that load order is incorrect when everything is built-in. Having more than one module is useless, so fusion all zoran modules in one. Signed-off-by: Corentin Labbe <cl...@ba...> --- drivers/staging/media/zoran/Kconfig | 14 +-- drivers/staging/media/zoran/Makefile | 8 +- drivers/staging/media/zoran/videocodec.c | 36 +------ drivers/staging/media/zoran/videocodec.h | 1 - drivers/staging/media/zoran/zoran_card.c | 119 +++++++++++++++++++---- drivers/staging/media/zoran/zr36016.c | 13 +-- drivers/staging/media/zoran/zr36016.h | 2 + drivers/staging/media/zoran/zr36050.c | 16 +-- drivers/staging/media/zoran/zr36050.h | 2 + drivers/staging/media/zoran/zr36060.c | 14 +-- drivers/staging/media/zoran/zr36060.h | 2 + 11 files changed, 125 insertions(+), 102 deletions(-) diff --git a/drivers/staging/media/zoran/Kconfig b/drivers/staging/media/zoran/Kconfig index 6d6e4c93f873..4067fa93d44d 100644 --- a/drivers/staging/media/zoran/Kconfig +++ b/drivers/staging/media/zoran/Kconfig @@ -15,7 +15,7 @@ config VIDEO_ZORAN module will be called zr36067. config VIDEO_ZORAN_DC30 - tristate "Pinnacle/Miro DC30(+) support" + bool "Pinnacle/Miro DC30(+) support" depends on VIDEO_ZORAN select VIDEO_ADV7175 if MEDIA_SUBDRV_AUTOSELECT select VIDEO_VPX3220 if MEDIA_SUBDRV_AUTOSELECT @@ -25,7 +25,7 @@ config VIDEO_ZORAN_DC30 zr36050 MJPEG codec and zr36016 VFE. config VIDEO_ZORAN_ZR36060 - tristate "Zoran ZR36060" + bool "Zoran ZR36060" depends on VIDEO_ZORAN help Say Y to support Zoran boards based on 36060 chips. @@ -33,7 +33,7 @@ config VIDEO_ZORAN_ZR36060 and 33 R10 and AverMedia 6 boards. config VIDEO_ZORAN_BUZ - tristate "Iomega Buz support" + bool "Iomega Buz support" depends on VIDEO_ZORAN_ZR36060 select VIDEO_SAA711X if MEDIA_SUBDRV_AUTOSELECT select VIDEO_SAA7185 if MEDIA_SUBDRV_AUTOSELECT @@ -41,7 +41,7 @@ config VIDEO_ZORAN_BUZ Support for the Iomega Buz MJPEG capture/playback card. config VIDEO_ZORAN_DC10 - tristate "Pinnacle/Miro DC10(+) support" + bool "Pinnacle/Miro DC10(+) support" depends on VIDEO_ZORAN_ZR36060 select VIDEO_SAA7110 if MEDIA_SUBDRV_AUTOSELECT select VIDEO_ADV7175 if MEDIA_SUBDRV_AUTOSELECT @@ -50,7 +50,7 @@ config VIDEO_ZORAN_DC10 card. config VIDEO_ZORAN_LML33 - tristate "Linux Media Labs LML33 support" + bool "Linux Media Labs LML33 support" depends on VIDEO_ZORAN_ZR36060 select VIDEO_BT819 if MEDIA_SUBDRV_AUTOSELECT select VIDEO_BT856 if MEDIA_SUBDRV_AUTOSELECT @@ -59,7 +59,7 @@ config VIDEO_ZORAN_LML33 card. config VIDEO_ZORAN_LML33R10 - tristate "Linux Media Labs LML33R10 support" + bool "Linux Media Labs LML33R10 support" depends on VIDEO_ZORAN_ZR36060 select VIDEO_SAA711X if MEDIA_SUBDRV_AUTOSELECT select VIDEO_ADV7170 if MEDIA_SUBDRV_AUTOSELECT @@ -68,7 +68,7 @@ config VIDEO_ZORAN_LML33R10 card. config VIDEO_ZORAN_AVS6EYES - tristate "AverMedia 6 Eyes support" + bool "AverMedia 6 Eyes support" depends on VIDEO_ZORAN_ZR36060 select VIDEO_BT856 if MEDIA_SUBDRV_AUTOSELECT select VIDEO_BT866 if MEDIA_SUBDRV_AUTOSELECT diff --git a/drivers/staging/media/zoran/Makefile b/drivers/staging/media/zoran/Makefile index 7023158e3892..9603bac0195c 100644 --- a/drivers/staging/media/zoran/Makefile +++ b/drivers/staging/media/zoran/Makefile @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 zr36067-objs := zoran_device.o \ - zoran_driver.o zoran_card.o + zoran_driver.o zoran_card.o videocodec.o -obj-$(CONFIG_VIDEO_ZORAN) += zr36067.o videocodec.o -obj-$(CONFIG_VIDEO_ZORAN_DC30) += zr36050.o zr36016.o -obj-$(CONFIG_VIDEO_ZORAN_ZR36060) += zr36060.o +obj-$(CONFIG_VIDEO_ZORAN) += zr36067.o +zr36067-$(CONFIG_VIDEO_ZORAN_DC30) += zr36050.o zr36016.o +zr36067-$(CONFIG_VIDEO_ZORAN_ZR36060) += zr36060.o diff --git a/drivers/staging/media/zoran/videocodec.c b/drivers/staging/media/zoran/videocodec.c index 5bab7ba56257..3af7d02bd910 100644 --- a/drivers/staging/media/zoran/videocodec.c +++ b/drivers/staging/media/zoran/videocodec.c @@ -8,8 +8,6 @@ * (c) 2002 Wolfgang Scherr <sc...@ne...> */ -#define VIDEOCODEC_VERSION "v0.2" - #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> @@ -72,12 +70,9 @@ struct videocodec *videocodec_attach(struct videocodec_master *master) if ((master->flags & h->codec->flags) == master->flags) { dprintk(4, "%s: try '%s'\n", __func__, h->codec->name); - if (!try_module_get(h->codec->owner)) - return NULL; - codec = kmemdup(h->codec, sizeof(struct videocodec), GFP_KERNEL); if (!codec) - goto out_module_put; + goto out_kfree; res = strlen(codec->name); snprintf(codec->name + res, sizeof(codec->name) - res, "[%d]", h->attached); @@ -113,13 +108,10 @@ struct videocodec *videocodec_attach(struct videocodec_master *master) pr_err("%s: no codec found!\n", __func__); return NULL; - out_module_put: - module_put(h->codec->owner); out_kfree: kfree(codec); return NULL; } -EXPORT_SYMBOL(videocodec_attach); int videocodec_detach(struct videocodec *codec) { @@ -160,7 +152,6 @@ int videocodec_detach(struct videocodec *codec) prev->next = a->next; dprintk(4, "videocodec: delete middle\n"); } - module_put(a->codec->owner); kfree(a->codec); kfree(a); h->attached -= 1; @@ -175,7 +166,6 @@ int videocodec_detach(struct videocodec *codec) pr_err("%s: given codec not found!\n", __func__); return -EINVAL; } -EXPORT_SYMBOL(videocodec_detach); int videocodec_register(const struct videocodec *codec) { @@ -208,7 +198,6 @@ int videocodec_register(const struct videocodec *codec) return 0; } -EXPORT_SYMBOL(videocodec_register); int videocodec_unregister(const struct videocodec *codec) { @@ -255,7 +244,6 @@ int videocodec_unregister(const struct videocodec *codec) pr_err("%s: given codec not found!\n", __func__); return -EINVAL; } -EXPORT_SYMBOL(videocodec_unregister); int videocodec_debugfs_show(struct seq_file *m) { @@ -284,25 +272,3 @@ int videocodec_debugfs_show(struct seq_file *m) return 0; } - -/* ===================== */ -/* hook in driver module */ -/* ===================== */ -static int __init videocodec_init(void) -{ - pr_info("Linux video codec intermediate layer: %s\n", VIDEOCODEC_VERSION); - - return 0; -} - -static void __exit videocodec_exit(void) -{ -} - -module_init(videocodec_init); -module_exit(videocodec_exit); - -MODULE_AUTHOR("Wolfgang Scherr <sc...@ne...>"); -MODULE_DESCRIPTION("Intermediate API module for video codecs " - VIDEOCODEC_VERSION); -MODULE_LICENSE("GPL"); diff --git a/drivers/staging/media/zoran/videocodec.h b/drivers/staging/media/zoran/videocodec.h index 3a508d326049..9dea348fee40 100644 --- a/drivers/staging/media/zoran/videocodec.h +++ b/drivers/staging/media/zoran/videocodec.h @@ -234,7 +234,6 @@ struct jpeg_app_marker { }; struct videocodec { - struct module *owner; /* -- filled in by slave device during register -- */ char name[32]; unsigned long magic; /* may be used for client<->master attaching */ diff --git a/drivers/staging/media/zoran/zoran_card.c b/drivers/staging/media/zoran/zoran_card.c index 28a3363a8838..a7750442ef9e 100644 --- a/drivers/staging/media/zoran/zoran_card.c +++ b/drivers/staging/media/zoran/zoran_card.c @@ -29,6 +29,9 @@ #include "zoran.h" #include "zoran_card.h" #include "zoran_device.h" +#include "zr36016.h" +#include "zr36050.h" +#include "zr36060.h" extern const struct zoran_format zoran_formats[]; @@ -266,6 +269,96 @@ static const char *codecid_to_modulename(u16 codecid) return name; } +static int codec_init(struct zoran *zr, u16 codecid) +{ + switch (codecid) { + case CODEC_TYPE_ZR36060: +#ifdef CONFIG_VIDEO_ZORAN_ZR36060 + return zr36060_init_module(); +#else + pci_err(zr->pci_dev, "ZR36060 support is not enabled\n"); + return -EINVAL; +#endif + break; + case CODEC_TYPE_ZR36050: +#ifdef CONFIG_VIDEO_ZORAN_DC30 + return zr36050_init_module(); +#else + pci_err(zr->pci_dev, "ZR36050 support is not enabled\n"); + return -EINVAL; +#endif + break; + case CODEC_TYPE_ZR36016: +#ifdef CONFIG_VIDEO_ZORAN_DC30 + return zr36016_init_module(); +#else + pci_err(zr->pci_dev, "ZR36016 support is not enabled\n"); + return -EINVAL; +#endif + break; + } + + pci_err(zr->pci_dev, "unknown codec id %x\n", codecid); + return -EINVAL; +} + +static void codec_exit(struct zoran *zr, u16 codecid) +{ + switch (codecid) { + case CODEC_TYPE_ZR36060: +#ifdef CONFIG_VIDEO_ZORAN_ZR36060 + zr36060_cleanup_module(); +#endif + break; + case CODEC_TYPE_ZR36050: +#ifdef CONFIG_VIDEO_ZORAN_DC30 + zr36050_cleanup_module(); +#endif + break; + case CODEC_TYPE_ZR36016: +#ifdef CONFIG_VIDEO_ZORAN_DC30 + zr36016_cleanup_module(); +#endif + break; + } +} + +static int videocodec_init(struct zoran *zr) +{ + const char *codec_name, *vfe_name; + int result; + + codec_name = codecid_to_modulename(zr->card.video_codec); + if (codec_name) { + result = codec_init(zr, zr->card.video_codec); + if (result < 0) { + pci_err(zr->pci_dev, "failed to load video codec %s: %d\n", + codec_name, result); + return result; + } + } + vfe_name = codecid_to_modulename(zr->card.video_vfe); + if (vfe_name) { + result = codec_init(zr, zr->card.video_vfe); + if (result < 0) { + pci_err(zr->pci_dev, "failed to load video vfe %s: %d\n", + vfe_name, result); + if (codec_name) + codec_exit(zr, zr->card.video_codec); + return result; + } + } + return 0; +} + +static void videocodec_exit(struct zoran *zr) +{ + if (zr->card.video_codec != CODEC_TYPE_NONE) + codec_exit(zr, zr->card.video_codec); + if (zr->card.video_vfe != CODEC_TYPE_NONE) + codec_exit(zr, zr->card.video_vfe); +} + // struct tvnorm { // u16 wt, wa, h_start, h_sync_start, ht, ha, v_start; // }; @@ -954,6 +1047,7 @@ static void zoran_remove(struct pci_dev *pdev) videocodec_detach(zr->codec); if (zr->vfe) videocodec_detach(zr->vfe); + videocodec_exit(zr); /* unregister i2c bus */ zoran_unregister_i2c(zr); @@ -1079,6 +1173,8 @@ static int zoran_debugfs_show(struct seq_file *seq, void *v) seq_printf(seq, "Prepared %u\n", zr->prepared); seq_printf(seq, "Queued %u\n", zr->queued); + + videocodec_debugfs_show(seq); return 0; } @@ -1096,7 +1192,6 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) struct videocodec_master *master_vfe = NULL; struct videocodec_master *master_codec = NULL; int card_num; - const char *codec_name, *vfe_name; unsigned int nr; int err; @@ -1258,23 +1353,9 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) zr->card.addrs_encoder); pci_info(zr->pci_dev, "Initializing videocodec bus...\n"); - - if (zr->card.video_codec) { - codec_name = codecid_to_modulename(zr->card.video_codec); - if (codec_name) { - result = request_module(codec_name); - if (result) - pci_err(pdev, "failed to load modules %s: %d\n", codec_name, result); - } - } - if (zr->card.video_vfe) { - vfe_name = codecid_to_modulename(zr->card.video_vfe); - if (vfe_name) { - result = request_module(vfe_name); - if (result < 0) - pci_err(pdev, "failed to load modules %s: %d\n", vfe_name, result); - } - } + err = videocodec_init(zr); + if (err) + goto zr_unreg_i2c; /* reset JPEG codec */ jpeg_codec_sleep(zr, 1); @@ -1328,6 +1409,8 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) videocodec_detach(zr->vfe); zr_detach_codec: videocodec_detach(zr->codec); +zr_unreg_videocodec: + videocodec_exit(zr); zr_unreg_i2c: zoran_unregister_i2c(zr); zr_free_irq: diff --git a/drivers/staging/media/zoran/zr36016.c b/drivers/staging/media/zoran/zr36016.c index 50605460a44b..26c7c32b6bc0 100644 --- a/drivers/staging/media/zoran/zr36016.c +++ b/drivers/staging/media/zoran/zr36016.c @@ -390,7 +390,6 @@ static int zr36016_setup(struct videocodec *codec) } static const struct videocodec zr36016_codec = { - .owner = THIS_MODULE, .name = "zr36016", .magic = 0L, /* magic not used */ .flags = @@ -409,14 +408,13 @@ static const struct videocodec zr36016_codec = { HOOK IN DRIVER AS KERNEL MODULE ========================================================================= */ -static int __init zr36016_init_module(void) +int zr36016_init_module(void) { - //dprintk(1, "ZR36016 driver %s\n",ZR016_VERSION); zr36016_codecs = 0; return videocodec_register(&zr36016_codec); } -static void __exit zr36016_cleanup_module(void) +void zr36016_cleanup_module(void) { if (zr36016_codecs) { dprintk(1, @@ -425,10 +423,3 @@ static void __exit zr36016_cleanup_module(void) } videocodec_unregister(&zr36016_codec); } - -module_init(zr36016_init_module); -module_exit(zr36016_cleanup_module); - -MODULE_AUTHOR("Wolfgang Scherr <sc...@ne...>"); -MODULE_DESCRIPTION("Driver module for ZR36016 video frontends"); -MODULE_LICENSE("GPL"); diff --git a/drivers/staging/media/zoran/zr36016.h b/drivers/staging/media/zoran/zr36016.h index 1475f971cc24..04afba35669d 100644 --- a/drivers/staging/media/zoran/zr36016.h +++ b/drivers/staging/media/zoran/zr36016.h @@ -89,4 +89,6 @@ struct zr36016 { #define ZR016_SIGN 0x02 #define ZR016_YMCS 0x01 +int zr36016_init_module(void); +void zr36016_cleanup_module(void); #endif /*fndef ZR36016_H */ diff --git a/drivers/staging/media/zoran/zr36050.c b/drivers/staging/media/zoran/zr36050.c index 4dc7927fefc3..38f7021e7b06 100644 --- a/drivers/staging/media/zoran/zr36050.c +++ b/drivers/staging/media/zoran/zr36050.c @@ -5,8 +5,6 @@ * Copyright (C) 2001 Wolfgang Scherr <sc...@ne...> */ -#define ZR050_VERSION "v0.7.1" - #include <linux/module.h> #include <linux/init.h> #include <linux/slab.h> @@ -798,7 +796,6 @@ static int zr36050_setup(struct videocodec *codec) } static const struct videocodec zr36050_codec = { - .owner = THIS_MODULE, .name = "zr36050", .magic = 0L, // magic not used .flags = @@ -817,14 +814,13 @@ static const struct videocodec zr36050_codec = { HOOK IN DRIVER AS KERNEL MODULE ========================================================================= */ -static int __init zr36050_init_module(void) +int zr36050_init_module(void) { - //dprintk(1, "ZR36050 driver %s\n",ZR050_VERSION); zr36050_codecs = 0; return videocodec_register(&zr36050_codec); } -static void __exit zr36050_cleanup_module(void) +void zr36050_cleanup_module(void) { if (zr36050_codecs) { dprintk(1, @@ -833,11 +829,3 @@ static void __exit zr36050_cleanup_module(void) } videocodec_unregister(&zr36050_codec); } - -module_init(zr36050_init_module); -module_exit(zr36050_cleanup_module); - -MODULE_AUTHOR("Wolfgang Scherr <sc...@ne...>"); -MODULE_DESCRIPTION("Driver module for ZR36050 jpeg processors " - ZR050_VERSION); -MODULE_LICENSE("GPL"); diff --git a/drivers/staging/media/zoran/zr36050.h b/drivers/staging/media/zoran/zr36050.h index 8f972d045b58..f9b58f4c77b9 100644 --- a/drivers/staging/media/zoran/zr36050.h +++ b/drivers/staging/media/zoran/zr36050.h @@ -160,4 +160,6 @@ struct zr36050 { #define ZR050_U_COMPONENT 1 #define ZR050_V_COMPONENT 2 +int zr36050_init_module(void); +void zr36050_cleanup_module(void); #endif /*fndef ZR36050_H */ diff --git a/drivers/staging/media/zoran/zr36060.c b/drivers/staging/media/zoran/zr36060.c index 7904d5b1f402..d0c369e31c81 100644 --- a/drivers/staging/media/zoran/zr36060.c +++ b/drivers/staging/media/zoran/zr36060.c @@ -5,8 +5,6 @@ * Copyright (C) 2002 Laurent Pinchart <lau...@sk...> */ -#define ZR060_VERSION "v0.7" - #include <linux/module.h> #include <linux/init.h> #include <linux/slab.h> @@ -831,7 +829,6 @@ static int zr36060_setup(struct videocodec *codec) } static const struct videocodec zr36060_codec = { - .owner = THIS_MODULE, .name = "zr36060", .magic = 0L, // magic not used .flags = @@ -846,13 +843,13 @@ static const struct videocodec zr36060_codec = { // others are not used }; -static int __init zr36060_init_module(void) +int zr36060_init_module(void) { zr36060_codecs = 0; return videocodec_register(&zr36060_codec); } -static void __exit zr36060_cleanup_module(void) +void zr36060_cleanup_module(void) { if (zr36060_codecs) { dprintk(1, @@ -863,10 +860,3 @@ static void __exit zr36060_cleanup_module(void) /* however, we can't just stay alive */ videocodec_unregister(&zr36060_codec); } - -module_init(zr36060_init_module); -module_exit(zr36060_cleanup_module); - -MODULE_AUTHOR("Laurent Pinchart <lau...@sk...>"); -MODULE_DESCRIPTION("Driver module for ZR36060 jpeg processors " ZR060_VERSION); -MODULE_LICENSE("GPL"); diff --git a/drivers/staging/media/zoran/zr36060.h b/drivers/staging/media/zoran/zr36060.h index d2cdc26bf625..fbf5429534ac 100644 --- a/drivers/staging/media/zoran/zr36060.h +++ b/drivers/staging/media/zoran/zr36060.h @@ -198,4 +198,6 @@ struct zr36060 { #define ZR060_SR_H_SCALE2 BIT(0) #define ZR060_SR_H_SCALE4 (2 << 0) +int zr36060_init_module(void); +void zr36060_cleanup_module(void); #endif /*fndef ZR36060_H */ -- 2.32.0 |
From: Corentin L. <cl...@ba...> - 2021-10-26 19:43:38
|
The vidmem parameter is no longer necessary since we removed framebuffer support. Signed-off-by: Corentin Labbe <cl...@ba...> --- drivers/staging/media/zoran/zoran_card.c | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/drivers/staging/media/zoran/zoran_card.c b/drivers/staging/media/zoran/zoran_card.c index a7750442ef9e..9cd49f85a56e 100644 --- a/drivers/staging/media/zoran/zoran_card.c +++ b/drivers/staging/media/zoran/zoran_card.c @@ -39,17 +39,6 @@ static int card[BUZ_MAX] = { [0 ... (BUZ_MAX - 1)] = -1 }; module_param_array(card, int, NULL, 0444); MODULE_PARM_DESC(card, "Card type"); -/* - * The video mem address of the video card. The driver has a little database - * for some videocards to determine it from there. If your video card is not - * in there you have either to give it to the driver as a parameter or set - * in a VIDIOCSFBUF ioctl - */ - -static unsigned long vidmem; /* default = 0 - Video memory base address */ -module_param_hw(vidmem, ulong, iomem, 0444); -MODULE_PARM_DESC(vidmem, "Default video memory base address"); - /* Default input and video norm at startup of the driver. */ static unsigned int default_input; /* default 0 = Composite, 1 = S-Video */ @@ -1218,10 +1207,6 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) jpg_bufsize = 8192; if (jpg_bufsize > (512 * 1024)) jpg_bufsize = 512 * 1024; - /* Use parameter for vidmem or try to find a video card */ - if (vidmem) - pci_info(pdev, "%s: Using supplied video memory base address @ 0x%lx\n", - ZORAN_NAME, vidmem); /* some mainboards might not do PCI-PCI data transfer well */ if (pci_pci_problems & (PCIPCI_FAIL | PCIAGP_FAIL | PCIPCI_ALIMAGIK)) -- 2.32.0 |
From: Corentin L. <cl...@ba...> - 2021-10-26 19:43:37
|
After each capture, zoran driver complains that it remains some unused buffer. This is due to a missing count handling. Signed-off-by: Corentin Labbe <cl...@ba...> --- drivers/staging/media/zoran/zoran_driver.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/staging/media/zoran/zoran_driver.c b/drivers/staging/media/zoran/zoran_driver.c index 31993c266976..32d76876c683 100644 --- a/drivers/staging/media/zoran/zoran_driver.c +++ b/drivers/staging/media/zoran/zoran_driver.c @@ -887,6 +887,7 @@ int zr_set_buf(struct zoran *zr) return -EINVAL; } list_del(&buf->queue); + zr->buf_in_reserve--; spin_unlock_irqrestore(&zr->queued_bufs_lock, flags); vbuf = &buf->vbuf; -- 2.32.0 |
From: Corentin L. <cl...@ba...> - 2021-10-26 19:43:28
|
The DC30 uses a non-i2c ITT MSE3000 encoder and not an adv7175 as stated in the card list. So remove adv7175 from DC30. Signed-off-by: Corentin Labbe <cl...@ba...> --- drivers/staging/media/zoran/zoran_card.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/staging/media/zoran/zoran_card.c b/drivers/staging/media/zoran/zoran_card.c index 59df1e7691f9..a9b0316cd688 100644 --- a/drivers/staging/media/zoran/zoran_card.c +++ b/drivers/staging/media/zoran/zoran_card.c @@ -472,8 +472,6 @@ static struct card_info zoran_cards[NUM_CARDS] = { .name = "DC30", .i2c_decoder = "vpx3220a", .addrs_decoder = vpx3220_addrs, - .i2c_encoder = "adv7175", - .addrs_encoder = adv717x_addrs, .video_codec = CODEC_TYPE_ZR36050, .video_vfe = CODEC_TYPE_ZR36016, -- 2.32.0 |
From: Corentin L. <cl...@ba...> - 2021-10-26 19:41:55
|
It remains some unused code from old zoran buffer handling. Let's remove them. Signed-off-by: Corentin Labbe <cl...@ba...> --- drivers/staging/media/zoran/zoran.h | 14 --------- drivers/staging/media/zoran/zoran_card.c | 36 ---------------------- drivers/staging/media/zoran/zoran_device.h | 2 -- drivers/staging/media/zoran/zoran_driver.c | 2 -- 4 files changed, 54 deletions(-) diff --git a/drivers/staging/media/zoran/zoran.h b/drivers/staging/media/zoran/zoran.h index c36b33f42b16..654c95fa5aba 100644 --- a/drivers/staging/media/zoran/zoran.h +++ b/drivers/staging/media/zoran/zoran.h @@ -54,22 +54,8 @@ static inline struct zr_buffer *vb2_to_zr_buffer(struct vb2_buffer *vb) #define BUZ_NUM_STAT_COM 4 #define BUZ_MASK_STAT_COM 3 -#define BUZ_MAX_FRAME 256 /* Must be a power of 2 */ -#define BUZ_MASK_FRAME 255 /* Must be BUZ_MAX_FRAME-1 */ - #define BUZ_MAX_INPUT 16 -#if VIDEO_MAX_FRAME <= 32 -# define V4L_MAX_FRAME 32 -#elif VIDEO_MAX_FRAME <= 64 -# define V4L_MAX_FRAME 64 -#else -# error "Too many video frame buffers to handle" -#endif -#define V4L_MASK_FRAME (V4L_MAX_FRAME - 1) - -#define MAX_FRAME (BUZ_MAX_FRAME > VIDEO_MAX_FRAME ? BUZ_MAX_FRAME : VIDEO_MAX_FRAME) - #include "zr36057.h" enum card_type { diff --git a/drivers/staging/media/zoran/zoran_card.c b/drivers/staging/media/zoran/zoran_card.c index 4ea2fbf189b9..59df1e7691f9 100644 --- a/drivers/staging/media/zoran/zoran_card.c +++ b/drivers/staging/media/zoran/zoran_card.c @@ -60,20 +60,6 @@ static int video_nr[BUZ_MAX] = { [0 ... (BUZ_MAX - 1)] = -1 }; module_param_array(video_nr, int, NULL, 0444); MODULE_PARM_DESC(video_nr, "Video device number (-1=Auto)"); -int v4l_nbufs = 4; -int v4l_bufsize = 864; /* Everybody should be able to work with this setting */ -module_param(v4l_nbufs, int, 0644); -MODULE_PARM_DESC(v4l_nbufs, "Maximum number of V4L buffers to use"); -module_param(v4l_bufsize, int, 0644); -MODULE_PARM_DESC(v4l_bufsize, "Maximum size per V4L buffer (in kB)"); - -int jpg_nbufs = 32; -int jpg_bufsize = 512; /* max size for 100% quality full-PAL frame */ -module_param(jpg_nbufs, int, 0644); -MODULE_PARM_DESC(jpg_nbufs, "Maximum number of JPG buffers to use"); -module_param(jpg_bufsize, int, 0644); -MODULE_PARM_DESC(jpg_bufsize, "Maximum size per JPG buffer (in kB)"); - /* 1=Pass through TV signal when device is not used */ /* 0=Show color bar when device is not used (LML33: only if lml33dpath=1) */ int pass_through; @@ -1253,28 +1239,6 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) pci_info(pdev, "Zoran MJPEG board driver version %s\n", ZORAN_VERSION); - /* check the parameters we have been given, adjust if necessary */ - if (v4l_nbufs < 2) - v4l_nbufs = 2; - if (v4l_nbufs > VIDEO_MAX_FRAME) - v4l_nbufs = VIDEO_MAX_FRAME; - /* The user specifies the in KB, we want them in byte (and page aligned) */ - v4l_bufsize = PAGE_ALIGN(v4l_bufsize * 1024); - if (v4l_bufsize < 32768) - v4l_bufsize = 32768; - /* 2 MB is arbitrary but sufficient for the maximum possible images */ - if (v4l_bufsize > 2048 * 1024) - v4l_bufsize = 2048 * 1024; - if (jpg_nbufs < 4) - jpg_nbufs = 4; - if (jpg_nbufs > BUZ_MAX_FRAME) - jpg_nbufs = BUZ_MAX_FRAME; - jpg_bufsize = PAGE_ALIGN(jpg_bufsize * 1024); - if (jpg_bufsize < 8192) - jpg_bufsize = 8192; - if (jpg_bufsize > (512 * 1024)) - jpg_bufsize = 512 * 1024; - /* some mainboards might not do PCI-PCI data transfer well */ if (pci_pci_problems & (PCIPCI_FAIL | PCIAGP_FAIL | PCIPCI_ALIMAGIK)) pci_warn(pdev, "%s: chipset does not support reliable PCI-PCI DMA\n", diff --git a/drivers/staging/media/zoran/zoran_device.h b/drivers/staging/media/zoran/zoran_device.h index 6c5d70238228..322b04c55d41 100644 --- a/drivers/staging/media/zoran/zoran_device.h +++ b/drivers/staging/media/zoran/zoran_device.h @@ -47,9 +47,7 @@ extern void zr36057_restart(struct zoran *zr); extern const struct zoran_format zoran_formats[]; -extern int v4l_nbufs; extern int v4l_bufsize; -extern int jpg_nbufs; extern int jpg_bufsize; extern int pass_through; diff --git a/drivers/staging/media/zoran/zoran_driver.c b/drivers/staging/media/zoran/zoran_driver.c index 551db338c7f7..31993c266976 100644 --- a/drivers/staging/media/zoran/zoran_driver.c +++ b/drivers/staging/media/zoran/zoran_driver.c @@ -153,8 +153,6 @@ static __u32 zoran_v4l2_calc_bufsize(struct zoran_jpg_settings *settings) result <<= 1; } - if (result > jpg_bufsize) - return jpg_bufsize; if (result < 8192) return 8192; -- 2.32.0 |
From: Corentin L. <cl...@ba...> - 2021-10-26 19:41:32
|
We need to empty zoran_init() for removing it later. Furthermore, this permit to use pci_xxx instead of pr_xxx for prettier printing. Signed-off-by: Corentin Labbe <cl...@ba...> --- drivers/staging/media/zoran/zoran_card.c | 64 ++++++++++++------------ 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/drivers/staging/media/zoran/zoran_card.c b/drivers/staging/media/zoran/zoran_card.c index f259585b0689..3bc0e64f1007 100644 --- a/drivers/staging/media/zoran/zoran_card.c +++ b/drivers/staging/media/zoran/zoran_card.c @@ -1067,6 +1067,39 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) unsigned int nr; int err; + pci_info(pdev, "Zoran MJPEG board driver version %s\n", ZORAN_VERSION); + + /* check the parameters we have been given, adjust if necessary */ + if (v4l_nbufs < 2) + v4l_nbufs = 2; + if (v4l_nbufs > VIDEO_MAX_FRAME) + v4l_nbufs = VIDEO_MAX_FRAME; + /* The user specifies the in KB, we want them in byte (and page aligned) */ + v4l_bufsize = PAGE_ALIGN(v4l_bufsize * 1024); + if (v4l_bufsize < 32768) + v4l_bufsize = 32768; + /* 2 MB is arbitrary but sufficient for the maximum possible images */ + if (v4l_bufsize > 2048 * 1024) + v4l_bufsize = 2048 * 1024; + if (jpg_nbufs < 4) + jpg_nbufs = 4; + if (jpg_nbufs > BUZ_MAX_FRAME) + jpg_nbufs = BUZ_MAX_FRAME; + jpg_bufsize = PAGE_ALIGN(jpg_bufsize * 1024); + if (jpg_bufsize < 8192) + jpg_bufsize = 8192; + if (jpg_bufsize > (512 * 1024)) + jpg_bufsize = 512 * 1024; + /* Use parameter for vidmem or try to find a video card */ + if (vidmem) + pci_info(pdev, "%s: Using supplied video memory base address @ 0x%lx\n", + ZORAN_NAME, vidmem); + + /* some mainboards might not do PCI-PCI data transfer well */ + if (pci_pci_problems & (PCIPCI_FAIL | PCIAGP_FAIL | PCIPCI_ALIMAGIK)) + pci_warn(pdev, "%s: chipset does not support reliable PCI-PCI DMA\n", + ZORAN_NAME); + err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); if (err) return -ENODEV; @@ -1285,37 +1318,6 @@ static int __init zoran_init(void) { int res; - pr_info("Zoran MJPEG board driver version %s\n", ZORAN_VERSION); - - /* check the parameters we have been given, adjust if necessary */ - if (v4l_nbufs < 2) - v4l_nbufs = 2; - if (v4l_nbufs > VIDEO_MAX_FRAME) - v4l_nbufs = VIDEO_MAX_FRAME; - /* The user specifies the in KB, we want them in byte (and page aligned) */ - v4l_bufsize = PAGE_ALIGN(v4l_bufsize * 1024); - if (v4l_bufsize < 32768) - v4l_bufsize = 32768; - /* 2 MB is arbitrary but sufficient for the maximum possible images */ - if (v4l_bufsize > 2048 * 1024) - v4l_bufsize = 2048 * 1024; - if (jpg_nbufs < 4) - jpg_nbufs = 4; - if (jpg_nbufs > BUZ_MAX_FRAME) - jpg_nbufs = BUZ_MAX_FRAME; - jpg_bufsize = PAGE_ALIGN(jpg_bufsize * 1024); - if (jpg_bufsize < 8192) - jpg_bufsize = 8192; - if (jpg_bufsize > (512 * 1024)) - jpg_bufsize = 512 * 1024; - /* Use parameter for vidmem or try to find a video card */ - if (vidmem) - pr_info("%s: Using supplied video memory base address @ 0x%lx\n", ZORAN_NAME, vidmem); - - /* some mainboards might not do PCI-PCI data transfer well */ - if (pci_pci_problems & (PCIPCI_FAIL | PCIAGP_FAIL | PCIPCI_ALIMAGIK)) - pr_warn("%s: chipset does not support reliable PCI-PCI DMA\n", ZORAN_NAME); - res = pci_register_driver(&zoran_driver); if (res) { pr_err("Unable to register ZR36057 driver\n"); -- 2.32.0 |
From: LABBE C. <cl...@ba...> - 2021-10-25 18:26:03
|
Le Mon, Oct 25, 2021 at 05:13:04PM +0200, Hans Verkuil a écrit : > On 25/10/2021 16:21, LABBE Corentin wrote: > > Le Mon, Oct 25, 2021 at 02:45:02PM +0200, Hans Verkuil a écrit : > >> Hi Corentin, > >> > >> On 13/10/2021 20:58, Corentin Labbe wrote: > >>> Hello > >>> > >>> The main change of this serie is to fusion all zoran related modules in > >>> one. > >>> This fixes the load order problem when everything is built-in. > >>> > >>> Regards > >>> > >>> Changes since v1: > >>> - add missing debugfs cleaning > >>> - clean some remaining module_get/put functions which made impossible to > >>> remove the zoran module > >>> - added the two latest patchs > >> > >> Something weird is wrong with this series. I have a DC30, but loading this with: > >> > >> modprobe zr36067 card=3 > >> > >> results in this error message in the kernel log: > >> > >> [ 58.645557] zr36067: module is from the staging directory, the quality is unknown, you have been warned. > >> [ 58.646658] zr36067 0000:03:00.0: Zoran MJPEG board driver version 0.10.1 > >> [ 58.646793] zr36067 0000:03:00.0: Zoran ZR36057 (rev 1), irq: 18, memory: 0xf4000000 > >> [ 58.648821] zr36067 0000:03:00.0: Initializing i2c bus... > >> [ 58.662420] vpx3220 22-0047: vpx3216b found @ 0x8e (DC30[0]) > >> [ 58.737445] zr36067 0000:03:00.0: Fail to get encoder > >> > >> This works before, so why this is now failing is not clear to me. > >> > >> It does work with 'card=0', but I really have a DC30. > >> > >> If I test with 'card=0' then the rmmod issue is now solved. > > > > Everything normal, since card 0 does not have encoder. > > Could you check that adv7175 is compiled ? > > Yes, and it loaded as well (I see it with lsmod). > > However, there is no adv7175 on my board, instead it appears to have an ITT MSE3000. > There is no driver for this one (and I don't even think it is an i2c device), so > I suspect that before the driver just continued without encoder support, whereas now > it fails when it can't load the encoder. > > Could that be the reason? In the absence of an encoder, I think it should just > continue, esp. since the driver doesn't use the encoder anyway. > So probably the card list is wrong against DC30. I checked high resolution photo of DC30 on internet, and it confirms the fact that DC30 does not have adv7175. Since DC30 and DC30+ are identical in the card list, perhaps it is a very old copy/paste error. So I will add a patch removing adv7175 from DC30. Thanks for the report Regards |
From: Hans V. <hve...@xs...> - 2021-10-25 15:13:19
|
On 25/10/2021 16:21, LABBE Corentin wrote: > Le Mon, Oct 25, 2021 at 02:45:02PM +0200, Hans Verkuil a écrit : >> Hi Corentin, >> >> On 13/10/2021 20:58, Corentin Labbe wrote: >>> Hello >>> >>> The main change of this serie is to fusion all zoran related modules in >>> one. >>> This fixes the load order problem when everything is built-in. >>> >>> Regards >>> >>> Changes since v1: >>> - add missing debugfs cleaning >>> - clean some remaining module_get/put functions which made impossible to >>> remove the zoran module >>> - added the two latest patchs >> >> Something weird is wrong with this series. I have a DC30, but loading this with: >> >> modprobe zr36067 card=3 >> >> results in this error message in the kernel log: >> >> [ 58.645557] zr36067: module is from the staging directory, the quality is unknown, you have been warned. >> [ 58.646658] zr36067 0000:03:00.0: Zoran MJPEG board driver version 0.10.1 >> [ 58.646793] zr36067 0000:03:00.0: Zoran ZR36057 (rev 1), irq: 18, memory: 0xf4000000 >> [ 58.648821] zr36067 0000:03:00.0: Initializing i2c bus... >> [ 58.662420] vpx3220 22-0047: vpx3216b found @ 0x8e (DC30[0]) >> [ 58.737445] zr36067 0000:03:00.0: Fail to get encoder >> >> This works before, so why this is now failing is not clear to me. >> >> It does work with 'card=0', but I really have a DC30. >> >> If I test with 'card=0' then the rmmod issue is now solved. > > Everything normal, since card 0 does not have encoder. > Could you check that adv7175 is compiled ? Yes, and it loaded as well (I see it with lsmod). However, there is no adv7175 on my board, instead it appears to have an ITT MSE3000. There is no driver for this one (and I don't even think it is an i2c device), so I suspect that before the driver just continued without encoder support, whereas now it fails when it can't load the encoder. Could that be the reason? In the absence of an encoder, I think it should just continue, esp. since the driver doesn't use the encoder anyway. Regards, Hans > > I got the same problem with my DC10+ where saa7110 was not compiled. > This issue was reproduced randomly and I have no explanation. (kconfig problem ?) > > Regards > |
From: LABBE C. <cl...@ba...> - 2021-10-25 14:21:25
|
Le Mon, Oct 25, 2021 at 02:45:02PM +0200, Hans Verkuil a écrit : > Hi Corentin, > > On 13/10/2021 20:58, Corentin Labbe wrote: > > Hello > > > > The main change of this serie is to fusion all zoran related modules in > > one. > > This fixes the load order problem when everything is built-in. > > > > Regards > > > > Changes since v1: > > - add missing debugfs cleaning > > - clean some remaining module_get/put functions which made impossible to > > remove the zoran module > > - added the two latest patchs > > Something weird is wrong with this series. I have a DC30, but loading this with: > > modprobe zr36067 card=3 > > results in this error message in the kernel log: > > [ 58.645557] zr36067: module is from the staging directory, the quality is unknown, you have been warned. > [ 58.646658] zr36067 0000:03:00.0: Zoran MJPEG board driver version 0.10.1 > [ 58.646793] zr36067 0000:03:00.0: Zoran ZR36057 (rev 1), irq: 18, memory: 0xf4000000 > [ 58.648821] zr36067 0000:03:00.0: Initializing i2c bus... > [ 58.662420] vpx3220 22-0047: vpx3216b found @ 0x8e (DC30[0]) > [ 58.737445] zr36067 0000:03:00.0: Fail to get encoder > > This works before, so why this is now failing is not clear to me. > > It does work with 'card=0', but I really have a DC30. > > If I test with 'card=0' then the rmmod issue is now solved. Everything normal, since card 0 does not have encoder. Could you check that adv7175 is compiled ? I got the same problem with my DC10+ where saa7110 was not compiled. This issue was reproduced randomly and I have no explanation. (kconfig problem ?) Regards |