media fixes for v6.6-rc5

-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEE+QmuaPwR3wnBdVwACF8+vY7k4RUFAmUhBYMACgkQCF8+vY7k
 4RURZhAAiPg8BDMYMH9W7XKZxetU5K3LMp0LwYyPdQUXyNgEDikT6//U3GJOHAdR
 jcyWTkVYNJ7JFv1uwKJscIBq+YGijimGPktGqUKY6YsFlYzT52k21OKi2YvInqxd
 E4kJH9v9Lxr5K26icfKIyEwqDC6eTcG8clckmfXZPxmcdhQXFYFXxW+tJjqtpBnO
 0DWNJRlnQ+P4jX3y3yuuSJALVY7qKT6DQRz5SeIRKiRvRrlhrH4FCiFZ6XwFPbX/
 ZXQf7IoJqylNA6FmpEc0W4yhUo4oFZKA1N0s7QOfmvBiyxSRXHFs9j6BppzWAYJc
 8CoVM8aci9FTmnLjCB7tknUr2Pl9dVDirLVTjgFMLhFcSbtNPGD+ywwM7lvT87NZ
 n5jCL6x2/dMJYv/qHmxNyRTXtr2tw3vccL69ZdDnv5bZ/L1uAn7ZIytEFEMrTnuz
 MMzawQeKqzLhN/zf+JCZBeeo+6zVpG3BuHW5HeDDUNVyb3Kq1F1ykypnaP8H5euy
 LLczGx/JqHZzW/v2x1DY0vpvhM+z4c55KcoK2InI8h2p/UiAyHQc+7oB5tFltUWm
 ME2M3tQZ+EczNDTAYLxYMRUemhW5KaqpRlOWoX+34QyAIonOcX4F1Fr2HBalCoSk
 WroDxdbU+UgHrDfK49HngZrH9jmsRImGEEVOgGeI2NWa9Y3qgaM=
 =tmgl
 -----END PGP SIGNATURE-----

Merge tag 'media/v6.6-3' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media

Pull media fixes from Mauro Carvalho Chehab:

 - two Kconfig build fixes under randconfig

 - pxa_camera: Fix an error handling path

 - mediatek: vcodec: Fix a NULL-access pointer

 - tegra-video: fix an infinite recursion regression

* tag 'media/v6.6-3' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media:
  media: mediatek: vcodec: Fix encoder access NULL pointer
  staging: media: tegra-video: fix infinite recursion regression
  media: pci: intel: ivsc: select V4L2_FWNODE
  media: ipu-bridge: Fix Kconfig dependencies
  media: pxa_camera: Fix an error handling path in pxa_camera_probe()
This commit is contained in:
Linus Torvalds 2023-10-07 10:09:36 -07:00
commit b036cda9d5
7 changed files with 31 additions and 37 deletions

View File

@ -1,11 +1,19 @@
# SPDX-License-Identifier: GPL-2.0-only
config IPU_BRIDGE
tristate
depends on I2C && ACPI
help
This is a helper module for the IPU bridge, which can be
used by ipu3 and other drivers. In order to handle module
dependencies, this is selected by each driver that needs it.
source "drivers/media/pci/intel/ipu3/Kconfig"
source "drivers/media/pci/intel/ivsc/Kconfig"
config IPU_BRIDGE
tristate "Intel IPU Bridge"
depends on I2C && ACPI
help
The IPU bridge is a helper library for Intel IPU drivers to
function on systems shipped with Windows.
Currently used by the ipu3-cio2 and atomisp drivers.
Supported systems include:
- Microsoft Surface models (except Surface Pro 3)
- The Lenovo Miix line (for example the 510, 520, 710 and 720)
- Dell 7285

View File

@ -2,13 +2,13 @@
config VIDEO_IPU3_CIO2
tristate "Intel ipu3-cio2 driver"
depends on VIDEO_DEV && PCI
depends on IPU_BRIDGE || !IPU_BRIDGE
depends on ACPI || COMPILE_TEST
depends on X86
select MEDIA_CONTROLLER
select VIDEO_V4L2_SUBDEV_API
select V4L2_FWNODE
select VIDEOBUF2_DMA_SG
select IPU_BRIDGE if CIO2_BRIDGE
help
This is the Intel IPU3 CIO2 CSI-2 receiver unit, found in Intel
@ -18,22 +18,3 @@ config VIDEO_IPU3_CIO2
Say Y or M here if you have a Skylake/Kaby Lake SoC with MIPI CSI-2
connected camera.
The module will be called ipu3-cio2.
config CIO2_BRIDGE
bool "IPU3 CIO2 Sensors Bridge"
depends on VIDEO_IPU3_CIO2 && ACPI
depends on I2C
help
This extension provides an API for the ipu3-cio2 driver to create
connections to cameras that are hidden in the SSDB buffer in ACPI.
It can be used to enable support for cameras in detachable / hybrid
devices that ship with Windows.
Say Y here if your device is a detachable / hybrid laptop that comes
with Windows installed by the OEM, for example:
- Microsoft Surface models (except Surface Pro 3)
- The Lenovo Miix line (for example the 510, 520, 710 and 720)
- Dell 7285
If in doubt, say N here.

View File

@ -6,7 +6,7 @@ config INTEL_VSC
depends on INTEL_MEI && ACPI && VIDEO_DEV
select MEDIA_CONTROLLER
select VIDEO_V4L2_SUBDEV_API
select V4L2_ASYNC
select V4L2_FWNODE
help
This adds support for Intel Visual Sensing Controller (IVSC).

View File

@ -2398,7 +2398,7 @@ static int pxa_camera_probe(struct platform_device *pdev)
PXA_CAM_DRV_NAME, pcdev);
if (err) {
dev_err(&pdev->dev, "Camera interrupt register failed\n");
goto exit_v4l2_device_unregister;
goto exit_deactivate;
}
pcdev->notifier.ops = &pxa_camera_sensor_ops;

View File

@ -138,7 +138,8 @@ int vpu_enc_init(struct venc_vpu_inst *vpu)
vpu->ctx->vpu_inst = vpu;
status = mtk_vcodec_fw_ipi_register(vpu->ctx->dev->fw_handler, vpu->id,
vpu_enc_ipi_handler, "venc", NULL);
vpu_enc_ipi_handler, "venc",
vpu->ctx->dev);
if (status) {
mtk_venc_err(vpu->ctx, "vpu_ipi_register fail %d", status);

View File

@ -12,12 +12,12 @@ menuconfig INTEL_ATOMISP
config VIDEO_ATOMISP
tristate "Intel Atom Image Signal Processor Driver"
depends on VIDEO_DEV && INTEL_ATOMISP
depends on IPU_BRIDGE
depends on MEDIA_PCI_SUPPORT
depends on PMIC_OPREGION
depends on I2C
select V4L2_FWNODE
select IOSF_MBI
select IPU_BRIDGE
select VIDEOBUF2_VMALLOC
select VIDEO_V4L2_SUBDEV_API
help

View File

@ -1455,17 +1455,18 @@ static int __maybe_unused vi_runtime_suspend(struct device *dev)
}
/*
* Graph Management
* Find the entity matching a given fwnode in an v4l2_async_notifier list
*/
static struct tegra_vi_graph_entity *
tegra_vi_graph_find_entity(struct tegra_vi_channel *chan,
tegra_vi_graph_find_entity(struct list_head *list,
const struct fwnode_handle *fwnode)
{
struct tegra_vi_graph_entity *entity;
struct v4l2_async_connection *asd;
list_for_each_entry(asd, &chan->notifier.done_list, asc_entry) {
list_for_each_entry(asd, list, asc_entry) {
entity = to_tegra_vi_graph_entity(asd);
if (entity->asd.match.fwnode == fwnode)
return entity;
}
@ -1532,7 +1533,8 @@ static int tegra_vi_graph_build(struct tegra_vi_channel *chan,
}
/* find the remote entity from notifier list */
ent = tegra_vi_graph_find_entity(chan, link.remote_node);
ent = tegra_vi_graph_find_entity(&chan->notifier.done_list,
link.remote_node);
if (!ent) {
dev_err(vi->dev, "no entity found for %pOF\n",
to_of_node(link.remote_node));
@ -1664,7 +1666,8 @@ static int tegra_vi_graph_notify_bound(struct v4l2_async_notifier *notifier,
* Locate the entity corresponding to the bound subdev and store the
* subdev pointer.
*/
entity = tegra_vi_graph_find_entity(chan, subdev->fwnode);
entity = tegra_vi_graph_find_entity(&chan->notifier.waiting_list,
subdev->fwnode);
if (!entity) {
dev_err(vi->dev, "no entity for subdev %s\n", subdev->name);
return -EINVAL;
@ -1713,7 +1716,8 @@ static int tegra_vi_graph_parse_one(struct tegra_vi_channel *chan,
/* skip entities that are already processed */
if (device_match_fwnode(vi->dev, remote) ||
tegra_vi_graph_find_entity(chan, remote)) {
tegra_vi_graph_find_entity(&chan->notifier.waiting_list,
remote)) {
fwnode_handle_put(remote);
continue;
}