21 Nov, 2018

1 commit

  • Some old Samsung drivers use the legacy crop API incorrectly:
    the crop and compose targets are swapped. Normally VIDIOC_G_CROP
    will return the CROP rectangle of a CAPTURE stream and the COMPOSE
    rectangle of an OUTPUT stream.

    The Samsung drivers do the opposite. Note that these drivers predate
    the selection API.

    If this 'QUIRK' flag is set, then the v4l2-ioctl core will swap
    the CROP and COMPOSE targets as well.

    That way backwards compatibility is ensured and we can convert the
    Samsung drivers to the selection API.

    Signed-off-by: Hans Verkuil
    Reviewed-by: Niklas Söderlund
    Acked-by: Sakari Ailus
    Reviewed-by: Sylwester Nawrocki
    Tested-by: Sylwester Nawrocki
    Signed-off-by: Mauro Carvalho Chehab

    Hans Verkuil
     

29 May, 2018

2 commits

  • The ioctl serialization mutex (vdev->lock or q->lock for vb2 queues)
    was taken at the highest level in v4l2-dev.c. This prevents more
    fine-grained locking since at that level we cannot examine the ioctl
    arguments, we can only do that after video_usercopy is called.

    So push the locking down to __video_do_ioctl() and subdev_do_ioctl_lock().

    This also allows us to make a few functions in v4l2-ioctl.c static and
    video_usercopy() is no longer exported.

    The locking scheme is not changed by this patch, just pushed down.

    Signed-off-by: Hans Verkuil
    Signed-off-by: Mauro Carvalho Chehab

    Hans Verkuil
     
  • The last user of this 'feature' was the gspca driver. Now that
    that driver has been converted to vb2 we can delete this code.

    Signed-off-by: Hans Verkuil
    Reviewed-by: Hans de Goede
    Signed-off-by: Mauro Carvalho Chehab

    Hans Verkuil
     

10 May, 2018

1 commit

  • Fix this warning when building the docs:

    include/media/v4l2-dev.h:42: warning: Enum value 'VFL_TYPE_MAX' not described in enum 'vfl_devnode_type'

    Acked-by: Sakari Ailus
    Signed-off-by: Hans Verkuil
    Signed-off-by: Mauro Carvalho Chehab

    Hans Verkuil
     

05 Apr, 2018

1 commit

  • The size of devnode_nums[] bit array is too short to store information
    for VFL_TYPE_TOUCH. That causes it to override other memory regions.

    Thankfully, on recent reports, it is overriding video_device[] array,
    trigging a WARN_ON(). Yet, it just warns about the problem, but let
    the code excecuting, with generates an OOPS:

    [ 43.177394] WARNING: CPU: 1 PID: 711 at drivers/media/v4l2-core/v4l2-dev.c:945 __video_register_device+0xc99/0x1090 [videodev]
    [ 43.177396] Modules linked in: hid_sensor_custom hid_sensor_als hid_sensor_incl_3d hid_sensor_rotation hid_sensor_magn_3d hid_sensor_accel_3d hid_sensor_gyro_3d hid_sensor_trigger industrialio_triggered_buffer kfifo_buf joydev hid_sensor_iio_common hid_rmi(+) rmi_core industrialio videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_common videodev hid_multitouch media hid_sensor_hub binfmt_misc nls_iso8859_1 snd_hda_codec_hdmi arc4 snd_soc_skl snd_soc_skl_ipc snd_hda_ext_core snd_soc_sst_dsp snd_soc_sst_ipc snd_hda_codec_realtek snd_soc_acpi snd_hda_codec_generic snd_soc_core snd_compress ac97_bus snd_pcm_dmaengine snd_hda_intel snd_hda_codec intel_rapl snd_hda_core x86_pkg_temp_thermal snd_hwdep intel_powerclamp coretemp snd_pcm kvm_intel snd_seq_midi snd_seq_midi_event snd_rawmidi crct10dif_pclmul
    [ 43.177426] crc32_pclmul ghash_clmulni_intel iwlmvm pcbc mac80211 snd_seq aesni_intel iwlwifi aes_x86_64 snd_seq_device crypto_simd glue_helper cryptd snd_timer intel_cstate intel_rapl_perf input_leds serio_raw intel_wmi_thunderbolt snd wmi_bmof cfg80211 soundcore ideapad_laptop sparse_keymap idma64 virt_dma tpm_crb acpi_pad int3400_thermal acpi_thermal_rel intel_pch_thermal processor_thermal_device mac_hid int340x_thermal_zone mei_me intel_soc_dts_iosf mei intel_lpss_pci shpchp intel_lpss sch_fq_codel vfio_pci nfsd vfio_virqfd parport_pc ppdev auth_rpcgss nfs_acl lockd grace lp parport sunrpc ip_tables x_tables autofs4 hid_logitech_hidpp hid_logitech_dj hid_generic usbhid kvmgt vfio_mdev mdev vfio_iommu_type1 vfio kvm irqbypass i915 i2c_algo_bit drm_kms_helper syscopyarea sdhci_pci sysfillrect
    [ 43.177466] sysimgblt cqhci fb_sys_fops sdhci drm i2c_hid wmi hid video pinctrl_sunrisepoint pinctrl_intel
    [ 43.177474] CPU: 1 PID: 711 Comm: systemd-udevd Not tainted 4.16.0 #1
    [ 43.177475] Hardware name: LENOVO 80UE/VIUU4, BIOS 2UCN10T 10/14/2016
    [ 43.177481] RIP: 0010:__video_register_device+0xc99/0x1090 [videodev]
    [ 43.177482] RSP: 0000:ffffa5c5c231b420 EFLAGS: 00010202
    [ 43.177484] RAX: 0000000000000000 RBX: 0000000000000005 RCX: 0000000000000000
    [ 43.177485] RDX: ffffffffc0c44cc0 RSI: ffffffffffffffff RDI: ffffffffc0c44cc0
    [ 43.177486] RBP: ffffa5c5c231b478 R08: ffffffffc0c96900 R09: ffff8eda1a51f018
    [ 43.177487] R10: 0000000000000600 R11: 00000000000003b6 R12: 0000000000000000
    [ 43.177488] R13: 0000000000000005 R14: ffffffffc0c96900 R15: ffff8eda1d6d91c0
    [ 43.177489] FS: 00007fd2d8ef2480(0000) GS:ffff8eda33480000(0000) knlGS:0000000000000000
    [ 43.177490] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 43.177491] CR2: 00007ffe0a6ad01c CR3: 0000000456ae2004 CR4: 00000000003606e0
    [ 43.177492] Call Trace:
    [ 43.177498] ? devres_add+0x5f/0x70
    [ 43.177502] rmi_f54_probe+0x437/0x470 [rmi_core]
    [ 43.177505] rmi_function_probe+0x25/0x30 [rmi_core]
    [ 43.177507] driver_probe_device+0x310/0x480
    [ 43.177509] __device_attach_driver+0x86/0x100
    [ 43.177511] ? __driver_attach+0xf0/0xf0
    [ 43.177512] bus_for_each_drv+0x6b/0xb0
    [ 43.177514] __device_attach+0xdd/0x160
    [ 43.177516] device_initial_probe+0x13/0x20
    [ 43.177518] bus_probe_device+0x95/0xa0
    [ 43.177519] device_add+0x44b/0x680
    [ 43.177522] rmi_register_function+0x62/0xd0 [rmi_core]
    [ 43.177525] rmi_create_function+0x112/0x1a0 [rmi_core]
    [ 43.177527] ? rmi_driver_clear_irq_bits+0xc0/0xc0 [rmi_core]
    [ 43.177530] rmi_scan_pdt+0xca/0x1a0 [rmi_core]
    [ 43.177535] rmi_init_functions+0x5b/0x120 [rmi_core]
    [ 43.177537] rmi_driver_probe+0x152/0x3c0 [rmi_core]
    [ 43.177547] ? sysfs_create_link+0x25/0x40
    [ 43.177549] driver_probe_device+0x310/0x480
    [ 43.177551] __device_attach_driver+0x86/0x100
    [ 43.177553] ? __driver_attach+0xf0/0xf0
    [ 43.177554] bus_for_each_drv+0x6b/0xb0
    [ 43.177556] __device_attach+0xdd/0x160
    [ 43.177558] device_initial_probe+0x13/0x20
    [ 43.177560] bus_probe_device+0x95/0xa0
    [ 43.177561] device_add+0x44b/0x680
    [ 43.177564] rmi_register_transport_device+0x84/0x100 [rmi_core]
    [ 43.177568] rmi_input_configured+0xbf/0x1a0 [hid_rmi]
    [ 43.177571] ? input_allocate_device+0xdf/0xf0
    [ 43.177574] hidinput_connect+0x4a9/0x37a0 [hid]
    [ 43.177578] hid_connect+0x326/0x3d0 [hid]
    [ 43.177581] hid_hw_start+0x42/0x70 [hid]
    [ 43.177583] rmi_probe+0x115/0x510 [hid_rmi]
    [ 43.177586] hid_device_probe+0xd3/0x150 [hid]
    [ 43.177588] ? sysfs_create_link+0x25/0x40
    [ 43.177590] driver_probe_device+0x310/0x480
    [ 43.177592] __driver_attach+0xbf/0xf0
    [ 43.177593] ? driver_probe_device+0x480/0x480
    [ 43.177595] bus_for_each_dev+0x74/0xb0
    [ 43.177597] ? kmem_cache_alloc_trace+0x1a6/0x1c0
    [ 43.177599] driver_attach+0x1e/0x20
    [ 43.177600] bus_add_driver+0x167/0x260
    [ 43.177602] ? 0xffffffffc0cbc000
    [ 43.177604] driver_register+0x60/0xe0
    [ 43.177605] ? 0xffffffffc0cbc000
    [ 43.177607] __hid_register_driver+0x63/0x70 [hid]
    [ 43.177610] rmi_driver_init+0x23/0x1000 [hid_rmi]
    [ 43.177612] do_one_initcall+0x52/0x191
    [ 43.177615] ? _cond_resched+0x19/0x40
    [ 43.177617] ? kmem_cache_alloc_trace+0xa2/0x1c0
    [ 43.177619] ? do_init_module+0x27/0x209
    [ 43.177621] do_init_module+0x5f/0x209
    [ 43.177623] load_module+0x1987/0x1f10
    [ 43.177626] ? ima_post_read_file+0x96/0xa0
    [ 43.177629] SYSC_finit_module+0xfc/0x120
    [ 43.177630] ? SYSC_finit_module+0xfc/0x120
    [ 43.177632] SyS_finit_module+0xe/0x10
    [ 43.177634] do_syscall_64+0x73/0x130
    [ 43.177637] entry_SYSCALL_64_after_hwframe+0x3d/0xa2
    [ 43.177638] RIP: 0033:0x7fd2d880b839
    [ 43.177639] RSP: 002b:00007ffe0a6b2368 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
    [ 43.177641] RAX: ffffffffffffffda RBX: 000055cdd86542e0 RCX: 00007fd2d880b839
    [ 43.177641] RDX: 0000000000000000 RSI: 00007fd2d84ea0e5 RDI: 0000000000000016
    [ 43.177642] RBP: 00007fd2d84ea0e5 R08: 0000000000000000 R09: 00007ffe0a6b2480
    [ 43.177643] R10: 0000000000000016 R11: 0000000000000246 R12: 0000000000000000
    [ 43.177644] R13: 000055cdd8688930 R14: 0000000000020000 R15: 000055cdd86542e0
    [ 43.177645] Code: 48 c7 c7 54 b4 c3 c0 e8 96 9d ec dd e9 d4 fb ff ff 0f 0b 41 be ea ff ff ff e9 c7 fb ff ff 0f 0b 41 be ea ff ff ff e9 ba fb ff ff 0b e9 d8 f4 ff ff 83 fa 01 0f 84 c4 02 00 00 48 83 78 68 00
    [ 43.177675] ---[ end trace d44d9bc41477c2dd ]---
    [ 43.177679] BUG: unable to handle kernel NULL pointer dereference at 0000000000000499
    [ 43.177723] IP: __video_register_device+0x1cc/0x1090 [videodev]
    [ 43.177749] PGD 0 P4D 0
    [ 43.177764] Oops: 0000 [#1] SMP PTI
    [ 43.177780] Modules linked in: hid_sensor_custom hid_sensor_als hid_sensor_incl_3d hid_sensor_rotation hid_sensor_magn_3d hid_sensor_accel_3d hid_sensor_gyro_3d hid_sensor_trigger industrialio_triggered_buffer kfifo_buf joydev hid_sensor_iio_common hid_rmi(+) rmi_core industrialio videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_common videodev hid_multitouch media hid_sensor_hub binfmt_misc nls_iso8859_1 snd_hda_codec_hdmi arc4 snd_soc_skl snd_soc_skl_ipc snd_hda_ext_core snd_soc_sst_dsp snd_soc_sst_ipc snd_hda_codec_realtek snd_soc_acpi snd_hda_codec_generic snd_soc_core snd_compress ac97_bus snd_pcm_dmaengine snd_hda_intel snd_hda_codec intel_rapl snd_hda_core x86_pkg_temp_thermal snd_hwdep intel_powerclamp coretemp snd_pcm kvm_intel snd_seq_midi snd_seq_midi_event snd_rawmidi crct10dif_pclmul
    [ 43.178055] crc32_pclmul ghash_clmulni_intel iwlmvm pcbc mac80211 snd_seq aesni_intel iwlwifi aes_x86_64 snd_seq_device crypto_simd glue_helper cryptd snd_timer intel_cstate intel_rapl_perf input_leds serio_raw intel_wmi_thunderbolt snd wmi_bmof cfg80211 soundcore ideapad_laptop sparse_keymap idma64 virt_dma tpm_crb acpi_pad int3400_thermal acpi_thermal_rel intel_pch_thermal processor_thermal_device mac_hid int340x_thermal_zone mei_me intel_soc_dts_iosf mei intel_lpss_pci shpchp intel_lpss sch_fq_codel vfio_pci nfsd vfio_virqfd parport_pc ppdev auth_rpcgss nfs_acl lockd grace lp parport sunrpc ip_tables x_tables autofs4 hid_logitech_hidpp hid_logitech_dj hid_generic usbhid kvmgt vfio_mdev mdev vfio_iommu_type1 vfio kvm irqbypass i915 i2c_algo_bit drm_kms_helper syscopyarea sdhci_pci sysfillrect
    [ 43.178337] sysimgblt cqhci fb_sys_fops sdhci drm i2c_hid wmi hid video pinctrl_sunrisepoint pinctrl_intel
    [ 43.178380] CPU: 1 PID: 711 Comm: systemd-udevd Tainted: G W 4.16.0 #1
    [ 43.178411] Hardware name: LENOVO 80UE/VIUU4, BIOS 2UCN10T 10/14/2016
    [ 43.178441] RIP: 0010:__video_register_device+0x1cc/0x1090 [videodev]
    [ 43.178467] RSP: 0000:ffffa5c5c231b420 EFLAGS: 00010202
    [ 43.178490] RAX: ffffffffc0c44cc0 RBX: 0000000000000005 RCX: ffffffffc0c454c0
    [ 43.178519] RDX: 0000000000000001 RSI: ffff8eda1d6d9118 RDI: ffffffffc0c44cc0
    [ 43.178549] RBP: ffffa5c5c231b478 R08: ffffffffc0c96900 R09: ffff8eda1a51f018
    [ 43.178579] R10: 0000000000000600 R11: 00000000000003b6 R12: 0000000000000000
    [ 43.178608] R13: 0000000000000005 R14: ffffffffc0c96900 R15: ffff8eda1d6d91c0
    [ 43.178636] FS: 00007fd2d8ef2480(0000) GS:ffff8eda33480000(0000) knlGS:0000000000000000
    [ 43.178669] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 43.178693] CR2: 0000000000000499 CR3: 0000000456ae2004 CR4: 00000000003606e0
    [ 43.178721] Call Trace:
    [ 43.178736] ? devres_add+0x5f/0x70
    [ 43.178755] rmi_f54_probe+0x437/0x470 [rmi_core]
    [ 43.178779] rmi_function_probe+0x25/0x30 [rmi_core]
    [ 43.178805] driver_probe_device+0x310/0x480
    [ 43.178828] __device_attach_driver+0x86/0x100
    [ 43.178851] ? __driver_attach+0xf0/0xf0
    [ 43.178884] bus_for_each_drv+0x6b/0xb0
    [ 43.178904] __device_attach+0xdd/0x160
    [ 43.178925] device_initial_probe+0x13/0x20
    [ 43.178948] bus_probe_device+0x95/0xa0
    [ 43.178968] device_add+0x44b/0x680
    [ 43.178987] rmi_register_function+0x62/0xd0 [rmi_core]
    [ 43.181747] rmi_create_function+0x112/0x1a0 [rmi_core]
    [ 43.184677] ? rmi_driver_clear_irq_bits+0xc0/0xc0 [rmi_core]
    [ 43.187505] rmi_scan_pdt+0xca/0x1a0 [rmi_core]
    [ 43.190171] rmi_init_functions+0x5b/0x120 [rmi_core]
    [ 43.192809] rmi_driver_probe+0x152/0x3c0 [rmi_core]
    [ 43.195403] ? sysfs_create_link+0x25/0x40
    [ 43.198253] driver_probe_device+0x310/0x480
    [ 43.201083] __device_attach_driver+0x86/0x100
    [ 43.203800] ? __driver_attach+0xf0/0xf0
    [ 43.206503] bus_for_each_drv+0x6b/0xb0
    [ 43.209291] __device_attach+0xdd/0x160
    [ 43.212207] device_initial_probe+0x13/0x20
    [ 43.215146] bus_probe_device+0x95/0xa0
    [ 43.217885] device_add+0x44b/0x680
    [ 43.220597] rmi_register_transport_device+0x84/0x100 [rmi_core]
    [ 43.223321] rmi_input_configured+0xbf/0x1a0 [hid_rmi]
    [ 43.226051] ? input_allocate_device+0xdf/0xf0
    [ 43.228814] hidinput_connect+0x4a9/0x37a0 [hid]
    [ 43.231701] hid_connect+0x326/0x3d0 [hid]
    [ 43.234548] hid_hw_start+0x42/0x70 [hid]
    [ 43.237302] rmi_probe+0x115/0x510 [hid_rmi]
    [ 43.239862] hid_device_probe+0xd3/0x150 [hid]
    [ 43.242558] ? sysfs_create_link+0x25/0x40
    [ 43.242828] audit: type=1400 audit(1522795151.600:4): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/snap/core/4206/usr/lib/snapd/snap-confine" pid=1151 comm="apparmor_parser"
    [ 43.244859] driver_probe_device+0x310/0x480
    [ 43.244862] __driver_attach+0xbf/0xf0
    [ 43.246982] audit: type=1400 audit(1522795151.600:5): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/snap/core/4206/usr/lib/snapd/snap-confine//mount-namespace-capture-helper" pid=1151 comm="apparmor_parser"
    [ 43.249403] ? driver_probe_device+0x480/0x480
    [ 43.249405] bus_for_each_dev+0x74/0xb0
    [ 43.253200] audit: type=1400 audit(1522795151.600:6): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/snap/core/4206/usr/lib/snapd/snap-confine//snap_update_ns" pid=1151 comm="apparmor_parser"
    [ 43.254055] ? kmem_cache_alloc_trace+0x1a6/0x1c0
    [ 43.256282] audit: type=1400 audit(1522795151.604:7): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/sbin/dhclient" pid=1152 comm="apparmor_parser"
    [ 43.258436] driver_attach+0x1e/0x20
    [ 43.260875] audit: type=1400 audit(1522795151.604:8): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1152 comm="apparmor_parser"
    [ 43.263118] bus_add_driver+0x167/0x260
    [ 43.267676] audit: type=1400 audit(1522795151.604:9): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/NetworkManager/nm-dhcp-helper" pid=1152 comm="apparmor_parser"
    [ 43.268807] ? 0xffffffffc0cbc000
    [ 43.268812] driver_register+0x60/0xe0
    [ 43.271184] audit: type=1400 audit(1522795151.604:10): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/connman/scripts/dhclient-script" pid=1152 comm="apparmor_parser"
    [ 43.274081] ? 0xffffffffc0cbc000
    [ 43.274086] __hid_register_driver+0x63/0x70 [hid]
    [ 43.288367] rmi_driver_init+0x23/0x1000 [hid_rmi]
    [ 43.291501] do_one_initcall+0x52/0x191
    [ 43.292348] audit: type=1400 audit(1522795151.652:11): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/man" pid=1242 comm="apparmor_parser"
    [ 43.294212] ? _cond_resched+0x19/0x40
    [ 43.300028] ? kmem_cache_alloc_trace+0xa2/0x1c0
    [ 43.303475] ? do_init_module+0x27/0x209
    [ 43.306842] do_init_module+0x5f/0x209
    [ 43.310269] load_module+0x1987/0x1f10
    [ 43.313704] ? ima_post_read_file+0x96/0xa0
    [ 43.317174] SYSC_finit_module+0xfc/0x120
    [ 43.320754] ? SYSC_finit_module+0xfc/0x120
    [ 43.324065] SyS_finit_module+0xe/0x10
    [ 43.327387] do_syscall_64+0x73/0x130
    [ 43.330909] entry_SYSCALL_64_after_hwframe+0x3d/0xa2
    [ 43.334305] RIP: 0033:0x7fd2d880b839
    [ 43.337810] RSP: 002b:00007ffe0a6b2368 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
    [ 43.341259] RAX: ffffffffffffffda RBX: 000055cdd86542e0 RCX: 00007fd2d880b839
    [ 43.344613] RDX: 0000000000000000 RSI: 00007fd2d84ea0e5 RDI: 0000000000000016
    [ 43.347962] RBP: 00007fd2d84ea0e5 R08: 0000000000000000 R09: 00007ffe0a6b2480
    [ 43.351456] R10: 0000000000000016 R11: 0000000000000246 R12: 0000000000000000
    [ 43.354845] R13: 000055cdd8688930 R14: 0000000000020000 R15: 000055cdd86542e0
    [ 43.358224] Code: c7 05 ad 12 02 00 00 00 00 00 48 8d 88 00 08 00 00 eb 09 48 83 c0 08 48 39 c1 74 31 48 8b 10 48 85 d2 74 ef 49 8b b7 98 04 00 00 39 b2 98 04 00 00 75 df 48 63 92 f8 04 00 00 f0 48 0f ab 15
    [ 43.361764] RIP: __video_register_device+0x1cc/0x1090 [videodev] RSP: ffffa5c5c231b420
    [ 43.365281] CR2: 0000000000000499

    This patch fixes the array size and changes the WARN_ON() to return an error,
    instead of letting the Kernel to proceed with registering.

    Cc: stable@vger.kernel.org # For Kernel 4.16
    Fixes: 4839c58f034a ("media: v4l2-dev: convert VFL_TYPE_* into an enum")
    Reported-by: Peter Geis
    Reported-by: Jaak Ristioja
    Reported-by: Michał Siemek
    Reviewed-by: Hans Verkuil
    Reviewed-by: Sakari Ailus
    Signed-off-by: Mauro Carvalho Chehab

    Mauro Carvalho Chehab
     

26 Feb, 2018

1 commit

  • A recent change to the media_entity_to_video_device() macro breaks some
    use-cases for the macro due to a symbol collision. Before the change
    this worked:

    vdev = media_entity_to_video_device(link->sink->entity);

    While after the change it results in a compiler error "error: 'struct
    video_device' has no member named 'link'; did you mean 'lock'?". While
    the following still works after the change.

    struct media_entity *entity = link->sink->entity;
    vdev = media_entity_to_video_device(entity);

    Fix the collision by renaming the macro argument to '__entity'.

    Fixes: 69b925c5fc36d8f1 ("media: v4l2-dev.h: add kernel-doc to two macros")

    Signed-off-by: Niklas Söderlund
    Acked-by: Sakari Ailus
    Signed-off-by: Hans Verkuil
    Signed-off-by: Mauro Carvalho Chehab

    Niklas Söderlund
     

07 Feb, 2018

1 commit

  • Pull media updates from Mauro Carvalho Chehab:

    - videobuf2 was moved to a media/common dir, as it is now used by the
    DVB subsystem too

    - Digital TV core memory mapped support interface

    - new sensor driver: ov7740

    - several improvements at ddbridge driver

    - new V4L2 driver: IPU3 CIO2 CSI-2 receiver unit, found on some Intel
    SoCs

    - new tuner driver: tda18250

    - finally got rid of all LIRC staging drivers

    - as we don't have old lirc drivers anymore, restruct the lirc device
    code

    - add support for UVC metadata

    - add a new staging driver for NVIDIA Tegra Video Decoder Engine

    - DVB kAPI headers moved to include/media

    - synchronize the kAPI and uAPI for the DVB subsystem, removing the gap
    for non-legacy APIs

    - reduce the kAPI gap for V4L2

    - lots of other driver enhancements, cleanups, etc.

    * tag 'media/v4.16-2' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (407 commits)
    media: v4l2-compat-ioctl32.c: make ctrl_is_pointer work for subdevs
    media: v4l2-compat-ioctl32.c: refactor compat ioctl32 logic
    media: v4l2-compat-ioctl32.c: don't copy back the result for certain errors
    media: v4l2-compat-ioctl32.c: drop pr_info for unknown buffer type
    media: v4l2-compat-ioctl32.c: copy clip list in put_v4l2_window32
    media: v4l2-compat-ioctl32.c: fix ctrl_is_pointer
    media: v4l2-compat-ioctl32.c: copy m.userptr in put_v4l2_plane32
    media: v4l2-compat-ioctl32.c: avoid sizeof(type)
    media: v4l2-compat-ioctl32.c: move 'helper' functions to __get/put_v4l2_format32
    media: v4l2-compat-ioctl32.c: fix the indentation
    media: v4l2-compat-ioctl32.c: add missing VIDIOC_PREPARE_BUF
    media: v4l2-ioctl.c: don't copy back the result for -ENOTTY
    media: v4l2-ioctl.c: use check_fmt for enum/g/s/try_fmt
    media: vivid: fix module load error when enabling fb and no_error_inj=1
    media: dvb_demux: improve debug messages
    media: dvb_demux: Better handle discontinuity errors
    media: cxusb, dib0700: ignore XC2028_I2C_FLUSH
    media: ts2020: avoid integer overflows on 32 bit machines
    media: i2c: ov7740: use gpio/consumer.h instead of gpio.h
    media: entity: Add a nop variant of media_entity_cleanup
    ...

    Linus Torvalds
     

05 Jan, 2018

1 commit


19 Dec, 2017

3 commits


18 Dec, 2017

1 commit


28 Nov, 2017

1 commit


02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

22 Sep, 2016

1 commit

  • As warned by linuxdoc[1] tool, using:

    $ for i in $(git grep kernel-doc Documentation/media/kapi/|cut -d: -f4); do kernel-lintdoc --sloppy $i; done

    include/media/v4l2-dev.h:118 :WARN: function name from comment differs: v4l2_prio_close v4l2_prio_check
    include/media/v4l2-mc.h:56 [kernel-doc WARN] : enum name from comment differs: if_vid_dec_index if_vid_dec_pad_index
    include/media/v4l2-mc.h:71 [kernel-doc WARN] : enum name from comment differs: if_aud_dec_index if_aud_dec_pad_index
    include/media/v4l2-mem2mem.h:396 [kernel-doc WARN] : function name from comment differs: v4l2_m2m_num_src_bufs_ready v4l2_m2m_num_dst_bufs_ready
    drivers/media/dvb-core/dvb_math.h:28 [kernel-doc WARN] : function name from comment differs: cintlog2 intlog2
    include/media/v4l2-subdev.h:215 [kernel-doc WARN] : struct name from comment differs: s_radio v4l2_subdev_tuner_ops
    include/media/v4l2-subdev.h:890 [kernel-doc WARN] : function name from comment differs: v4l2_set_subdevdata v4l2_set_subdev_hostdata
    include/media/v4l2-subdev.h:901 [kernel-doc WARN] : function name from comment differs: v4l2_get_subdevdata v4l2_get_subdev_hostdata
    drivers/media/dvb-core/dvb_ringbuffer.h:196 [kernel-doc WARN] : function name from comment differs: dvb_ringbuffer_writeuser dvb_ringbuffer_write_user
    include/media/videobuf2-core.h:399 [kernel-doc WARN] : struct name from comment differs: vb2_ops vb2_buf_ops
    include/media/media-entity.h:132 [kernel-doc ERROR] : duplicate parameter definition 'source'
    include/media/media-entity.h:477 [kernel-doc WARN] : function name from comment differs: media_entity_enum_test media_entity_enum_test_and_set
    include/media/media-entity.h:535 [kernel-doc WARN] : function name from comment differs: gobj_to_entity gobj_to_pad
    include/media/media-entity.h:544 [kernel-doc WARN] : function name from comment differs: gobj_to_entity gobj_to_link
    include/media/media-entity.h:553 [kernel-doc WARN] : function name from comment differs: gobj_to_entity gobj_to_intf
    include/media/media-entity.h:562 [kernel-doc WARN] : function name from comment differs: gobj_to_entity intf_to_devnode
    include/media/rc-core.h:234 [kernel-doc WARN] : function name from comment differs: rc_open rc_close
    include/media/v4l2-ctrls.h:397 [kernel-doc WARN] : missing initial short description of 'v4l2_ctrl_handler_init'
    include/media/v4l2-dev.h:118 [kernel-doc WARN] : function name from comment differs: v4l2_prio_close v4l2_prio_check
    include/media/v4l2-event.h:225 [kernel-doc WARN] : missing initial short description of 'v4l2_src_change_event_subscribe'

    [1] https://return42.github.io/linuxdoc/linux.html

    The above are real issues at the documentation. On several cases,
    caused by cut-and-paste.

    Fix them.

    Signed-off-by: Mauro Carvalho Chehab

    Mauro Carvalho Chehab
     

09 Sep, 2016

1 commit


24 Aug, 2016

1 commit

  • Some touch controllers send out touch data in a similar way to a
    greyscale frame grabber.

    Add new device type VFL_TYPE_TOUCH:
    - This uses a new device prefix v4l-touch for these devices, to stop
    generic capture software from treating them as webcams. Otherwise,
    touch is treated similarly to video capture.
    - Add V4L2_INPUT_TYPE_TOUCH
    - Add MEDIA_INTF_T_V4L_TOUCH
    - Add V4L2_CAP_TOUCH to indicate device is a touch device

    Add formats:
    - V4L2_TCH_FMT_DELTA_TD16 for signed 16-bit touch deltas
    - V4L2_TCH_FMT_DELTA_TD08 for signed 16-bit touch deltas
    - V4L2_TCH_FMT_TU16 for unsigned 16-bit touch data
    - V4L2_TCH_FMT_TU08 for unsigned 8-bit touch data

    This support will be used by:
    - Atmel maXTouch (atmel_mxt_ts)
    - Synaptics RMI4.
    - sur40

    Signed-off-by: Nick Dyer
    Tested-by: Chris Healy
    Signed-off-by: Hans Verkuil
    Signed-off-by: Mauro Carvalho Chehab
    Acked-by: Dmitry Torokhov

    Nick Dyer
     

23 Jul, 2016

2 commits


14 Apr, 2016

1 commit

  • Instead of letting drivers fill in device_caps at querycap time,
    let them fill it in when the video device is registered.

    This has the advantage that in the future the v4l2 core can access
    the video device's capabilities and take decisions based on that.

    Signed-off-by: Hans Verkuil
    Signed-off-by: Laurent Pinchart
    Signed-off-by: Mauro Carvalho Chehab

    Hans Verkuil
     

27 Feb, 2016

1 commit

  • Add a new interfaces to be used by v4l-core to invoke enable
    source and disable_source handlers in the media_device. The
    enable_source helper function invokes the enable_source handler
    to find media source entity connected to the entity and check
    is it is available or busy. If source is available, link is
    activated and pipeline is started. The disable_source helper
    function invokes the disable_source handler to deactivate and
    stop the pipeline.

    Signed-off-by: Shuah Khan
    Signed-off-by: Mauro Carvalho Chehab

    Shuah Khan
     

11 Jan, 2016

1 commit


03 Mar, 2015

1 commit


23 Dec, 2014

1 commit

  • The old debug field is renamed to dev_debug to ensure that existing drivers
    (including out-of-tree drivers) that try to use the old name will no longer
    compile. A comment has also been added that makes it explicit that drivers
    shouldn't use this field.

    Additional bits have been added to the debug flag to be more fine-grained
    when debugging, especially when dealing with streaming ioctls and read,
    write and poll. You want to enable those explicitly to prevent flooding
    the log when streaming unless you actually want to do that.

    Signed-off-by: Hans Verkuil
    Acked-by: Sakari Ailus
    Signed-off-by: Mauro Carvalho Chehab

    Hans Verkuil
     

05 Jul, 2014

1 commit


06 Mar, 2014

1 commit


21 Jun, 2013

1 commit

  • The last set of drivers still using the parent field of video_device instead
    of the v4l2_dev field have been converted, so v4l2_dev is now always set.
    A proper pointer to v4l2_dev is necessary these days otherwise the advanced
    debugging ioctls will not work when addressing sub-devices. It also ensures
    that the core can always go from a video_device struct to the top-level
    v4l2_device struct.
    There is still one single use case for the parent pointer: if there are
    multiple busses, each being the parent of one or more video nodes, and if
    they all share the same v4l2_device struct. In that case one still needs a
    parent pointer since the v4l2_device struct can only refer to a single
    parent device. The cx88 driver is one such case. Unfortunately, the cx88
    failed to set the parent pointer since 3.6. The next patch will correct this.
    In order to support this use-case the parent pointer is only renamed to
    dev_parent, not removed altogether. It has been renamed to ensure that the
    compiler will catch any (possibly out-of-tree) drivers that were missed during
    the conversion.

    Signed-off-by: Hans Verkuil
    Acked-by: Sakari Ailus
    Acked-by: Laurent Pinchart
    Signed-off-by: Mauro Carvalho Chehab

    Hans Verkuil
     

17 Jun, 2013

1 commit

  • The use of current_norm to keep track of the current standard has been
    deprecated for quite some time. Now that all drivers that were using it
    have been converted to use g_std we can drop it from the core.
    It was a bad idea to introduce this at the time: since it is a per-device
    node field it didn't work for drivers that create multiple nodes, all sharing
    the same tuner (e.g. video and vbi nodes, or a raw video node and a compressed
    video node). In addition it was very surprising behavior that g_std was
    implemented in the core. Often drivers implemented both g_std and current_norm,
    because they didn't understand how it should be used.
    Since the benefits were very limited (if they were there at all), it is better
    to just drop it and require that drivers just implement g_std.

    Signed-off-by: Hans Verkuil
    Signed-off-by: Mauro Carvalho Chehab

    Hans Verkuil
     

26 Sep, 2012

1 commit


10 Aug, 2012

1 commit


07 Jul, 2012

1 commit

  • This prepares struct video_device for easier integration with vb2.

    It also introduces a new lock that protects the vb2_queue. It is up
    to the driver to use it or not. And the driver can associate an owner
    filehandle with the queue to check whether queuing requests are
    permitted for the calling filehandle.

    Signed-off-by: Hans Verkuil
    Signed-off-by: Mauro Carvalho Chehab

    Hans Verkuil
     

15 May, 2012

2 commits

  • Rename the function v4l2_dont_use_lock to v4l2_disable_ioctl_locking,
    and rename v4l2_dont_use_cmd to v4l2_disable_ioctl.

    Signed-off-by: Hans Verkuil
    Signed-off-by: Mauro Carvalho Chehab

    Hans Verkuil
     
  • This flag is for legacy drivers only and will go away in the future.

    A note regarding commit 5126f2590bee412e3053de851cb07f531e4be36a
    (v4l2-dev: add flag to have the core lock all file operations):

    That commit message suggests that by not taking the core lock for fops
    other than unlocked_ioctl all problems relating to AB-BA locking and
    mm->mmap_sem are solved. This is not the case.

    More work needs to be done by moving the core lock further down into
    video_ioctl2. It should only be taken after the copy_from/to_user calls
    are done.

    Signed-off-by: Hans Verkuil
    Signed-off-by: Mauro Carvalho Chehab

    Hans Verkuil
     

14 May, 2012

3 commits

  • This used to be the default if the lock pointer was set, but now that lock is by
    default only used for ioctl serialization. Those drivers that already used
    core locking have this flag set explicitly, except for some drivers where
    it was obvious that there was no need to serialize any file operations other
    than ioctl.

    The drivers that didn't need this flag were:

    drivers/media/radio/dsbr100.c
    drivers/media/radio/radio-isa.c
    drivers/media/radio/radio-keene.c
    drivers/media/radio/radio-miropcm20.c
    drivers/media/radio/radio-mr800.c
    drivers/media/radio/radio-tea5764.c
    drivers/media/radio/radio-timb.c
    drivers/media/video/vivi.c
    sound/i2c/other/tea575x-tuner.c

    The other drivers that use core locking and where it was not immediately
    obvious that this flag wasn't needed were changed so that the flag is set
    together with a comment that that driver needs work to avoid having to
    set that flag. This will often involve taking the core lock in the fops
    themselves.

    Eventually this flag should go and it should not be used in new drivers.

    There are a few reasons why we want to avoid core locking of non-ioctl
    fops: in the case of mmap this can lead to a deadlock in rare situations
    since when mmap is called the mmap_sem is held and it is possible for
    other parts of the code to take that lock as well (copy_from_user()/copy_to_user()
    perform a down_read(&mm->mmap_sem) when a page fault occurs).

    It is very unlikely that that happens since the core lock serializes all
    fops, but the kernel warns about it if lock validation is turned on.

    For poll it is also undesirable to take the core lock as that can introduce
    increased latency. The same is true for read/write.

    While it was possible to make flags or something to turn on/off taking the
    core lock for each file operation, in practice it is much simpler to just
    not take it at all except for ioctl and leave it to the driver to take the
    lock. There are only a handful fops compared to the zillion ioctls we have.

    I also wanted to make it obvious which drivers still take the lock for all
    fops, so that's why I chose to have drivers set it explicitly.

    Signed-off-by: Hans Verkuil
    Acked-by: Hans de Goede
    Signed-off-by: Mauro Carvalho Chehab

    Hans Verkuil
     
  • Rather than testing whether an ioctl is implemented in the driver or not
    every time the ioctl is called, do it upfront when the device is registered.

    This also allows a driver to disable certain ioctls based on the capabilities
    of the detected board, something you can't do today without creating separate
    v4l2_ioctl_ops structs for each new variation.

    For the most part it is pretty straightforward, but for control ioctls a flag
    is needed since it is possible that you have per-filehandle controls, and that
    can't be determined upfront of course.

    Signed-off-by: Hans Verkuil
    Acked-by: Hans de Goede
    Signed-off-by: Mauro Carvalho Chehab

    Hans Verkuil
     
  • Using the V4L2 core lock is a very robust method that is usually very good
    at doing the right thing. But some drivers, particularly USB drivers, may
    want to prevent the core from taking the lock for specific ioctls, particularly
    buffer queuing ioctls.

    The reason is that certain commands like S_CTRL can take a long time to process
    over USB and all the time the core has the lock, preventing VIDIOC_DQBUF from
    proceeding, even though a frame may be ready in the queue.

    This introduces unwanted latency.

    Since the buffer queuing commands often have their own internal lock it is
    often not necessary to take the core lock. Drivers can now say that they don't
    want the core to take the lock for specific ioctls.

    As it is a specific opt-out it makes it clear to the reviewer that those
    ioctls will need more care when reviewing.

    Signed-off-by: Hans Verkuil
    Acked-by: Hans de Goede
    Signed-off-by: Mauro Carvalho Chehab

    Hans Verkuil
     

20 Mar, 2012

1 commit

  • Drivers implementing custom ioctls need to handle 32-bit/64-bit
    compatibility themselves. Provide them with a way to do so.

    To avoid circular module dependencies, merge the v4l2-compat-ioctl32
    module into videodev. There is no point in keeping them separate, as the
    v4l2_compat_ioctl32() function is required by videodev if CONFIG_COMPAT
    is set anyway.

    Signed-off-by: Laurent Pinchart
    Reviewed-by: Hans Verkuil
    Signed-off-by: Mauro Carvalho Chehab

    Laurent Pinchart
     

01 Jun, 2011

1 commit


20 May, 2011

1 commit


23 Mar, 2011

1 commit