media updates for v5.18-rc1
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE+QmuaPwR3wnBdVwACF8+vY7k4RUFAmI5jiEACgkQCF8+vY7k 4RWfnw/9FSBVrFgzoDwM4choQu997T6GSsEuqJFbLdDLPbKZifl9UsCPmenFp0aS 4D2EG4A1nF/HQTHJ6vPSWjgVP9zhCAX/DvHH+9DiSAWQoSIVmUZGoEhbAHlbE12K PUs0MEIR8o8k3IBvMD6buH1FpnIgZO1ULi1Cx/5YH1GaRshdZrLcgz0YioXomLKE KvNokrhLYzJFIWl34KZ+92RluPOy7DlEJpRNbCTYkaLYfSYqLs/FTisuEUt3gEso tjgUaBxJ/k3AOgU4XXoeVlqTFuK1TY70aA0aqmVYPqZ7eCO2Btbm11h8WoYO/SgY N3P57LP86WWUHNA13argVv/pQo0x8iX5RnYObLDMGGrUQyQT7BcjMGCrKIVyMRAz 06dZbnGnbsOOph9D7wwQ+xJQwUqyrllVVhRdMIWXJQjKqAP9mmgIB/dcwrrP5Ziw y0fmuaXZ/ZmvD63yq2iWwV6niWvNa5XMnR3NxceOV60WOe9LS6aio/duwfaZ5ic1 qzTAtc/+3FuIgRD35eILrjymu53gW6pt6vS0pHP/+xvHq5Yp7u8Pc5+jFxLYRM8e AOglA7ZxGGz1uL/LUJ4DD8BQ55wr0EH63Lm7Pfy4JmmzqI/TQwEQifT/H8mDNP+G DCmod3ZyCsHH6vsN0afa4ZxqyCDToVHVwvko4mzOnl4hED5JteI= =Bc0l -----END PGP SIGNATURE----- Merge tag 'media/v5.18-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media Pull media updates from Mauro Carvalho Chehab: - a major reorg at platform Kconfig/Makefile files, organizing them per vendor. The other media Kconfig/Makefile files also sorted - New sensor drivers: hi847, isl7998x, ov08d10 - New Amphion vpu decoder stateful driver - New Atmel microchip csi2dc driver - tegra-vde driver promoted from staging - atomisp: some fixes for it to work on BYT - imx7-mipi-csis driver promoted from staging and renamed - camss driver got initial support for VFE hardware version Titan 480 - mtk-vcodec has gained support for MT8192 - lots of driver changes, fixes and improvements * tag 'media/v5.18-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (417 commits) media: nxp: Restrict VIDEO_IMX_MIPI_CSIS to ARCH_MXC or COMPILE_TEST media: amphion: cleanup media device if register it fail media: amphion: fix some issues to improve robust media: amphion: fix some error related with undefined reference to __divdi3 media: amphion: fix an issue that using pm_runtime_get_sync incorrectly media: vidtv: use vfree() for memory allocated with vzalloc() media: m5mols/m5mols.h: document new reset field media: pixfmt-yuv-planar.rst: fix PIX_FMT labels media: platform: Remove unnecessary print function dev_err() media: amphion: Add missing of_node_put() in vpu_core_parse_dt() media: mtk-vcodec: Add missing of_node_put() in mtk_vdec_hw_prob_done() media: platform: amphion: Fix build error without MAILBOX media: spi: Kconfig: Place SPI drivers on a single menu media: i2c: Kconfig: move camera drivers to the top media: atomisp: fix bad usage at error handling logic media: platform: rename mediatek/mtk-jpeg/ to mediatek/jpeg/ media: media/*/Kconfig: sort entries media: Kconfig: cleanup VIDEO_DEV dependencies media: platform/*/Kconfig: make manufacturer menus more uniform media: platform: Create vendor/{Makefile,Kconfig} files ...
This commit is contained in:
commit
182966e1cd
|
@ -14,7 +14,7 @@ data from LCD controller (FIMD) through the SoC internal writeback data
|
||||||
path. There are multiple FIMC instances in the SoCs (up to 4), having
|
path. There are multiple FIMC instances in the SoCs (up to 4), having
|
||||||
slightly different capabilities, like pixel alignment constraints, rotator
|
slightly different capabilities, like pixel alignment constraints, rotator
|
||||||
availability, LCD writeback support, etc. The driver is located at
|
availability, LCD writeback support, etc. The driver is located at
|
||||||
drivers/media/platform/exynos4-is directory.
|
drivers/media/platform/samsung/exynos4-is directory.
|
||||||
|
|
||||||
Supported SoCs
|
Supported SoCs
|
||||||
--------------
|
--------------
|
||||||
|
|
|
@ -284,7 +284,7 @@ tda9887 TDA 9885/6/7 analog IF demodulator
|
||||||
tea5761 TEA 5761 radio tuner
|
tea5761 TEA 5761 radio tuner
|
||||||
tea5767 TEA 5767 radio tuner
|
tea5767 TEA 5767 radio tuner
|
||||||
tua9001 Infineon TUA9001 silicon tuner
|
tua9001 Infineon TUA9001 silicon tuner
|
||||||
tuner-xc2028 XCeive xc2028/xc3028 tuners
|
xc2028 XCeive xc2028/xc3028 tuners
|
||||||
xc4000 Xceive XC4000 silicon tuner
|
xc4000 Xceive XC4000 silicon tuner
|
||||||
xc5000 Xceive XC5000 silicon tuner
|
xc5000 Xceive XC5000 silicon tuner
|
||||||
============ ==================================================
|
============ ==================================================
|
||||||
|
|
|
@ -33,7 +33,7 @@ reference manual [#f1]_.
|
||||||
Entities
|
Entities
|
||||||
--------
|
--------
|
||||||
|
|
||||||
imx7-mipi-csi2
|
imx-mipi-csi2
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
This is the MIPI CSI-2 receiver entity. It has one sink pad to receive the pixel
|
This is the MIPI CSI-2 receiver entity. It has one sink pad to receive the pixel
|
||||||
|
|
|
@ -17,7 +17,7 @@ Introduction
|
||||||
------------
|
------------
|
||||||
|
|
||||||
This file documents the Texas Instruments OMAP 3 Image Signal Processor (ISP)
|
This file documents the Texas Instruments OMAP 3 Image Signal Processor (ISP)
|
||||||
driver located under drivers/media/platform/omap3isp. The original driver was
|
driver located under drivers/media/platform/ti/omap3isp. The original driver was
|
||||||
written by Texas Instruments but since that it has been rewritten (twice) at
|
written by Texas Instruments but since that it has been rewritten (twice) at
|
||||||
Nokia.
|
Nokia.
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ As of Revision AB, the ISS is described in detail in section 8.
|
||||||
This driver is supporting **only** the CSI2-A/B interfaces for now.
|
This driver is supporting **only** the CSI2-A/B interfaces for now.
|
||||||
|
|
||||||
It makes use of the Media Controller framework [#f2]_, and inherited most of the
|
It makes use of the Media Controller framework [#f2]_, and inherited most of the
|
||||||
code from OMAP3 ISP driver (found under drivers/media/platform/omap3isp/\*),
|
code from OMAP3 ISP driver (found under drivers/media/platform/ti/omap3isp/\*),
|
||||||
except that it doesn't need an IOMMU now for ISS buffers memory mapping.
|
except that it doesn't need an IOMMU now for ISS buffers memory mapping.
|
||||||
|
|
||||||
Supports usage of MMAP buffers only (for now).
|
Supports usage of MMAP buffers only (for now).
|
||||||
|
|
|
@ -76,3 +76,16 @@ vimc-capture:
|
||||||
|
|
||||||
* 1 Pad sink
|
* 1 Pad sink
|
||||||
* 1 Pad source
|
* 1 Pad source
|
||||||
|
|
||||||
|
Module options
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Vimc has a module parameter to configure the driver.
|
||||||
|
|
||||||
|
* ``allocator=<unsigned int>``
|
||||||
|
|
||||||
|
memory allocator selection, default is 0. It specifies the way buffers
|
||||||
|
will be allocated.
|
||||||
|
|
||||||
|
- 0: vmalloc
|
||||||
|
- 1: dma-contig
|
||||||
|
|
|
@ -61,8 +61,6 @@ Required properties (DMA function blocks):
|
||||||
"mediatek,<chip>-disp-rdma"
|
"mediatek,<chip>-disp-rdma"
|
||||||
"mediatek,<chip>-disp-wdma"
|
"mediatek,<chip>-disp-wdma"
|
||||||
the supported chips are mt2701, mt8167 and mt8173.
|
the supported chips are mt2701, mt8167 and mt8173.
|
||||||
- larb: Should contain a phandle pointing to the local arbiter device as defined
|
|
||||||
in Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.yaml
|
|
||||||
- iommus: Should point to the respective IOMMU block with master port as
|
- iommus: Should point to the respective IOMMU block with master port as
|
||||||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
|
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
|
||||||
for details.
|
for details.
|
||||||
|
@ -91,7 +89,6 @@ ovl0: ovl@1400c000 {
|
||||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||||
clocks = <&mmsys CLK_MM_DISP_OVL0>;
|
clocks = <&mmsys CLK_MM_DISP_OVL0>;
|
||||||
iommus = <&iommu M4U_PORT_DISP_OVL0>;
|
iommus = <&iommu M4U_PORT_DISP_OVL0>;
|
||||||
mediatek,larb = <&larb0>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ovl1: ovl@1400d000 {
|
ovl1: ovl@1400d000 {
|
||||||
|
@ -101,7 +98,6 @@ ovl1: ovl@1400d000 {
|
||||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||||
clocks = <&mmsys CLK_MM_DISP_OVL1>;
|
clocks = <&mmsys CLK_MM_DISP_OVL1>;
|
||||||
iommus = <&iommu M4U_PORT_DISP_OVL1>;
|
iommus = <&iommu M4U_PORT_DISP_OVL1>;
|
||||||
mediatek,larb = <&larb4>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
rdma0: rdma@1400e000 {
|
rdma0: rdma@1400e000 {
|
||||||
|
@ -111,7 +107,6 @@ rdma0: rdma@1400e000 {
|
||||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||||
clocks = <&mmsys CLK_MM_DISP_RDMA0>;
|
clocks = <&mmsys CLK_MM_DISP_RDMA0>;
|
||||||
iommus = <&iommu M4U_PORT_DISP_RDMA0>;
|
iommus = <&iommu M4U_PORT_DISP_RDMA0>;
|
||||||
mediatek,larb = <&larb0>;
|
|
||||||
mediatek,rdma-fifosize = <8192>;
|
mediatek,rdma-fifosize = <8192>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -122,7 +117,6 @@ rdma1: rdma@1400f000 {
|
||||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||||
clocks = <&mmsys CLK_MM_DISP_RDMA1>;
|
clocks = <&mmsys CLK_MM_DISP_RDMA1>;
|
||||||
iommus = <&iommu M4U_PORT_DISP_RDMA1>;
|
iommus = <&iommu M4U_PORT_DISP_RDMA1>;
|
||||||
mediatek,larb = <&larb4>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
rdma2: rdma@14010000 {
|
rdma2: rdma@14010000 {
|
||||||
|
@ -132,7 +126,6 @@ rdma2: rdma@14010000 {
|
||||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||||
clocks = <&mmsys CLK_MM_DISP_RDMA2>;
|
clocks = <&mmsys CLK_MM_DISP_RDMA2>;
|
||||||
iommus = <&iommu M4U_PORT_DISP_RDMA2>;
|
iommus = <&iommu M4U_PORT_DISP_RDMA2>;
|
||||||
mediatek,larb = <&larb4>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
wdma0: wdma@14011000 {
|
wdma0: wdma@14011000 {
|
||||||
|
@ -142,7 +135,6 @@ wdma0: wdma@14011000 {
|
||||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||||
clocks = <&mmsys CLK_MM_DISP_WDMA0>;
|
clocks = <&mmsys CLK_MM_DISP_WDMA0>;
|
||||||
iommus = <&iommu M4U_PORT_DISP_WDMA0>;
|
iommus = <&iommu M4U_PORT_DISP_WDMA0>;
|
||||||
mediatek,larb = <&larb0>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
wdma1: wdma@14012000 {
|
wdma1: wdma@14012000 {
|
||||||
|
@ -152,7 +144,6 @@ wdma1: wdma@14012000 {
|
||||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||||
clocks = <&mmsys CLK_MM_DISP_WDMA1>;
|
clocks = <&mmsys CLK_MM_DISP_WDMA1>;
|
||||||
iommus = <&iommu M4U_PORT_DISP_WDMA1>;
|
iommus = <&iommu M4U_PORT_DISP_WDMA1>;
|
||||||
mediatek,larb = <&larb4>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
color0: color@14013000 {
|
color0: color@14013000 {
|
||||||
|
|
|
@ -0,0 +1,180 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||||
|
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/media/amphion,vpu.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Amphion VPU codec IP
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Ming Qian <ming.qian@nxp.com>
|
||||||
|
- Shijie Qin <shijie.qin@nxp.com>
|
||||||
|
|
||||||
|
description: |-
|
||||||
|
The Amphion MXC video encoder(Windsor) and decoder(Malone) accelerators present
|
||||||
|
on NXP i.MX8Q SoCs.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
$nodename:
|
||||||
|
pattern: "^vpu@[0-9a-f]+$"
|
||||||
|
|
||||||
|
compatible:
|
||||||
|
items:
|
||||||
|
- enum:
|
||||||
|
- nxp,imx8qm-vpu
|
||||||
|
- nxp,imx8qxp-vpu
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
power-domains:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
"#address-cells":
|
||||||
|
const: 1
|
||||||
|
|
||||||
|
"#size-cells":
|
||||||
|
const: 1
|
||||||
|
|
||||||
|
ranges: true
|
||||||
|
|
||||||
|
patternProperties:
|
||||||
|
"^mailbox@[0-9a-f]+$":
|
||||||
|
description:
|
||||||
|
Each vpu encoder or decoder correspond a MU, which used for communication
|
||||||
|
between driver and firmware. Implement via mailbox on driver.
|
||||||
|
$ref: ../mailbox/fsl,mu.yaml#
|
||||||
|
|
||||||
|
|
||||||
|
"^vpu_core@[0-9a-f]+$":
|
||||||
|
description:
|
||||||
|
Each core correspond a decoder or encoder, need to configure them
|
||||||
|
separately. NXP i.MX8QM SoC has one decoder and two encoder, i.MX8QXP SoC
|
||||||
|
has one decoder and one encoder.
|
||||||
|
type: object
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
items:
|
||||||
|
- enum:
|
||||||
|
- nxp,imx8q-vpu-decoder
|
||||||
|
- nxp,imx8q-vpu-encoder
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
power-domains:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
mbox-names:
|
||||||
|
items:
|
||||||
|
- const: tx0
|
||||||
|
- const: tx1
|
||||||
|
- const: rx
|
||||||
|
|
||||||
|
mboxes:
|
||||||
|
description:
|
||||||
|
List of phandle of 2 MU channels for tx, 1 MU channel for rx.
|
||||||
|
maxItems: 3
|
||||||
|
|
||||||
|
memory-region:
|
||||||
|
description:
|
||||||
|
Phandle to the reserved memory nodes to be associated with the
|
||||||
|
remoteproc device. The reserved memory nodes should be carveout nodes,
|
||||||
|
and should be defined as per the bindings in
|
||||||
|
Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt
|
||||||
|
items:
|
||||||
|
- description: region reserved for firmware image sections.
|
||||||
|
- description: region used for RPC shared memory between firmware and
|
||||||
|
driver.
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- power-domains
|
||||||
|
- mbox-names
|
||||||
|
- mboxes
|
||||||
|
- memory-region
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- power-domains
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
# Device node example for i.MX8QM platform:
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/firmware/imx/rsrc.h>
|
||||||
|
|
||||||
|
vpu: vpu@2c000000 {
|
||||||
|
compatible = "nxp,imx8qm-vpu";
|
||||||
|
ranges = <0x2c000000 0x2c000000 0x2000000>;
|
||||||
|
reg = <0x2c000000 0x1000000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
power-domains = <&pd IMX_SC_R_VPU>;
|
||||||
|
|
||||||
|
mu_m0: mailbox@2d000000 {
|
||||||
|
compatible = "fsl,imx6sx-mu";
|
||||||
|
reg = <0x2d000000 0x20000>;
|
||||||
|
interrupts = <0 472 4>;
|
||||||
|
#mbox-cells = <2>;
|
||||||
|
power-domains = <&pd IMX_SC_R_VPU_MU_0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
mu1_m0: mailbox@2d020000 {
|
||||||
|
compatible = "fsl,imx6sx-mu";
|
||||||
|
reg = <0x2d020000 0x20000>;
|
||||||
|
interrupts = <0 473 4>;
|
||||||
|
#mbox-cells = <2>;
|
||||||
|
power-domains = <&pd IMX_SC_R_VPU_MU_1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
mu2_m0: mailbox@2d040000 {
|
||||||
|
compatible = "fsl,imx6sx-mu";
|
||||||
|
reg = <0x2d040000 0x20000>;
|
||||||
|
interrupts = <0 474 4>;
|
||||||
|
#mbox-cells = <2>;
|
||||||
|
power-domains = <&pd IMX_SC_R_VPU_MU_2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vpu_core0: vpu_core@2d080000 {
|
||||||
|
compatible = "nxp,imx8q-vpu-decoder";
|
||||||
|
reg = <0x2d080000 0x10000>;
|
||||||
|
power-domains = <&pd IMX_SC_R_VPU_DEC_0>;
|
||||||
|
mbox-names = "tx0", "tx1", "rx";
|
||||||
|
mboxes = <&mu_m0 0 0>,
|
||||||
|
<&mu_m0 0 1>,
|
||||||
|
<&mu_m0 1 0>;
|
||||||
|
memory-region = <&decoder_boot>, <&decoder_rpc>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vpu_core1: vpu_core@2d090000 {
|
||||||
|
compatible = "nxp,imx8q-vpu-encoder";
|
||||||
|
reg = <0x2d090000 0x10000>;
|
||||||
|
power-domains = <&pd IMX_SC_R_VPU_ENC_0>;
|
||||||
|
mbox-names = "tx0", "tx1", "rx";
|
||||||
|
mboxes = <&mu1_m0 0 0>,
|
||||||
|
<&mu1_m0 0 1>,
|
||||||
|
<&mu1_m0 1 0>;
|
||||||
|
memory-region = <&encoder1_boot>, <&encoder1_rpc>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vpu_core2: vpu_core@2d0a0000 {
|
||||||
|
reg = <0x2d0a0000 0x10000>;
|
||||||
|
compatible = "nxp,imx8q-vpu-encoder";
|
||||||
|
power-domains = <&pd IMX_SC_R_VPU_ENC_1>;
|
||||||
|
mbox-names = "tx0", "tx1", "rx";
|
||||||
|
mboxes = <&mu2_m0 0 0>,
|
||||||
|
<&mu2_m0 0 1>,
|
||||||
|
<&mu2_m0 1 0>;
|
||||||
|
memory-region = <&encoder2_boot>, <&encoder2_rpc>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
...
|
|
@ -49,7 +49,8 @@ properties:
|
||||||
description: Definition of the regulator used for the VDDD power supply.
|
description: Definition of the regulator used for the VDDD power supply.
|
||||||
|
|
||||||
port:
|
port:
|
||||||
$ref: /schemas/graph.yaml#/properties/port
|
$ref: /schemas/graph.yaml#/$defs/port-base
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
endpoint:
|
endpoint:
|
||||||
|
@ -68,8 +69,11 @@ properties:
|
||||||
- const: 1
|
- const: 1
|
||||||
- const: 2
|
- const: 2
|
||||||
|
|
||||||
|
link-frequencies: true
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
- link-frequencies
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/media/i2c/isil,isl79987.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Intersil ISL79987 Analog to MIPI CSI-2 decoder
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Michael Tretter <m.tretter@pengutronix.de>
|
||||||
|
- Marek Vasut <marex@denx.de>
|
||||||
|
|
||||||
|
description:
|
||||||
|
The Intersil ISL79987 is an analog to MIPI CSI-2 decoder which is capable of
|
||||||
|
receiving up to four analog stream and multiplexing them into up to four MIPI
|
||||||
|
CSI-2 virtual channels, using one MIPI clock lane and 1/2 data lanes.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
enum:
|
||||||
|
- isil,isl79987
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
reset-gpios:
|
||||||
|
maxItems: 1
|
||||||
|
description:
|
||||||
|
A GPIO spec for the RSTB pin (active high)
|
||||||
|
|
||||||
|
powerdown-gpios:
|
||||||
|
maxItems: 1
|
||||||
|
description:
|
||||||
|
A GPIO spec for the Power Down pin (active high)
|
||||||
|
|
||||||
|
ports:
|
||||||
|
$ref: /schemas/graph.yaml#/properties/ports
|
||||||
|
properties:
|
||||||
|
port@0:
|
||||||
|
$ref: /schemas/graph.yaml#/$defs/port-base
|
||||||
|
unevaluatedProperties: false
|
||||||
|
description: Output port
|
||||||
|
|
||||||
|
properties:
|
||||||
|
endpoint:
|
||||||
|
$ref: /schemas/media/video-interfaces.yaml#
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
properties:
|
||||||
|
data-lanes:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 2
|
||||||
|
|
||||||
|
required:
|
||||||
|
- data-lanes
|
||||||
|
|
||||||
|
patternProperties:
|
||||||
|
"^port@[1-4]$":
|
||||||
|
$ref: /schemas/graph.yaml#/properties/port
|
||||||
|
description: Input ports
|
||||||
|
|
||||||
|
required:
|
||||||
|
- port@0
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- ports
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
|
|
||||||
|
i2c {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
isl7998x_mipi@44 {
|
||||||
|
compatible = "isil,isl79987";
|
||||||
|
reg = <0x44>;
|
||||||
|
powerdown-gpios = <&gpio3 27 GPIO_ACTIVE_HIGH>;
|
||||||
|
reset-gpios = <&gpio3 28 GPIO_ACTIVE_HIGH>;
|
||||||
|
|
||||||
|
ports {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
port@0 {
|
||||||
|
reg = <0>;
|
||||||
|
isl79987_out: endpoint {
|
||||||
|
remote-endpoint = <&mipi_csi2_in>;
|
||||||
|
data-lanes = <1 2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
port@1 {
|
||||||
|
reg = <1>;
|
||||||
|
endpoint {
|
||||||
|
remote-endpoint = <&camera_0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
port@2 {
|
||||||
|
reg = <2>;
|
||||||
|
endpoint {
|
||||||
|
remote-endpoint = <&camera_1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -70,6 +70,28 @@ properties:
|
||||||
a remote serializer whose high-threshold noise immunity is not enabled
|
a remote serializer whose high-threshold noise immunity is not enabled
|
||||||
is 100000 micro volts
|
is 100000 micro volts
|
||||||
|
|
||||||
|
maxim,gpio-poc:
|
||||||
|
$ref: '/schemas/types.yaml#/definitions/uint32-array'
|
||||||
|
minItems: 2
|
||||||
|
maxItems: 2
|
||||||
|
description: |
|
||||||
|
Index of the MAX9286 gpio output line (0 or 1) that controls Power over
|
||||||
|
Coax to the cameras and its associated polarity flag.
|
||||||
|
|
||||||
|
The property accepts an array of two unsigned integers, the first being
|
||||||
|
the gpio line index (0 or 1) and the second being the gpio line polarity
|
||||||
|
flag (GPIO_ACTIVE_HIGH or GPIO_ACTIVE_LOW) as defined in
|
||||||
|
<include/dt-bindings/gpio/gpio.h>.
|
||||||
|
|
||||||
|
When the remote cameras power is controlled by one of the MAX9286 gpio
|
||||||
|
lines, this property has to be used to specify which line among the two
|
||||||
|
available ones controls the remote camera power enablement.
|
||||||
|
|
||||||
|
When this property is used it is not possible to register a gpio
|
||||||
|
controller as the gpio lines are controlled directly by the MAX9286 and
|
||||||
|
not available for consumers, nor the 'poc-supply' property should be
|
||||||
|
specified.
|
||||||
|
|
||||||
ports:
|
ports:
|
||||||
$ref: /schemas/graph.yaml#/properties/ports
|
$ref: /schemas/graph.yaml#/properties/ports
|
||||||
|
|
||||||
|
@ -165,7 +187,16 @@ required:
|
||||||
- reg
|
- reg
|
||||||
- ports
|
- ports
|
||||||
- i2c-mux
|
- i2c-mux
|
||||||
- gpio-controller
|
|
||||||
|
# If 'maxim,gpio-poc' is present, then 'poc-supply' and 'gpio-controller'
|
||||||
|
# are not allowed.
|
||||||
|
if:
|
||||||
|
required:
|
||||||
|
- maxim,gpio-poc
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
poc-supply: false
|
||||||
|
gpio-controller: false
|
||||||
|
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
|
|
||||||
|
@ -174,140 +205,174 @@ examples:
|
||||||
#include <dt-bindings/gpio/gpio.h>
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
|
|
||||||
i2c@e66d8000 {
|
i2c@e66d8000 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
reg = <0 0xe66d8000>;
|
reg = <0 0xe66d8000>;
|
||||||
|
|
||||||
gmsl-deserializer@2c {
|
gmsl-deserializer@2c {
|
||||||
compatible = "maxim,max9286";
|
compatible = "maxim,max9286";
|
||||||
reg = <0x2c>;
|
reg = <0x2c>;
|
||||||
poc-supply = <&camera_poc_12v>;
|
poc-supply = <&camera_poc_12v>;
|
||||||
enable-gpios = <&gpio 13 GPIO_ACTIVE_HIGH>;
|
enable-gpios = <&gpio 13 GPIO_ACTIVE_HIGH>;
|
||||||
|
|
||||||
gpio-controller;
|
gpio-controller;
|
||||||
#gpio-cells = <2>;
|
#gpio-cells = <2>;
|
||||||
|
|
||||||
maxim,reverse-channel-microvolt = <170000>;
|
maxim,reverse-channel-microvolt = <170000>;
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
port@0 {
|
port@0 {
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
|
|
||||||
max9286_in0: endpoint {
|
max9286_in0: endpoint {
|
||||||
remote-endpoint = <&rdacm20_out0>;
|
remote-endpoint = <&rdacm20_out0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
port@1 {
|
||||||
|
reg = <1>;
|
||||||
|
|
||||||
|
max9286_in1: endpoint {
|
||||||
|
remote-endpoint = <&rdacm20_out1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
port@2 {
|
||||||
|
reg = <2>;
|
||||||
|
|
||||||
|
max9286_in2: endpoint {
|
||||||
|
remote-endpoint = <&rdacm20_out2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
port@3 {
|
||||||
|
reg = <3>;
|
||||||
|
|
||||||
|
max9286_in3: endpoint {
|
||||||
|
remote-endpoint = <&rdacm20_out3>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
port@4 {
|
||||||
|
reg = <4>;
|
||||||
|
|
||||||
|
max9286_out: endpoint {
|
||||||
|
data-lanes = <1 2 3 4>;
|
||||||
|
remote-endpoint = <&csi40_in>;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
port@1 {
|
i2c-mux {
|
||||||
reg = <1>;
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
max9286_in1: endpoint {
|
i2c@0 {
|
||||||
remote-endpoint = <&rdacm20_out1>;
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
reg = <0>;
|
||||||
|
|
||||||
|
camera@51 {
|
||||||
|
compatible = "imi,rdacm20";
|
||||||
|
reg = <0x51>, <0x61>;
|
||||||
|
|
||||||
|
port {
|
||||||
|
rdacm20_out0: endpoint {
|
||||||
|
remote-endpoint = <&max9286_in0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c@1 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
reg = <1>;
|
||||||
|
|
||||||
|
camera@52 {
|
||||||
|
compatible = "imi,rdacm20";
|
||||||
|
reg = <0x52>, <0x62>;
|
||||||
|
|
||||||
|
port {
|
||||||
|
rdacm20_out1: endpoint {
|
||||||
|
remote-endpoint = <&max9286_in1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c@2 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
reg = <2>;
|
||||||
|
|
||||||
|
camera@53 {
|
||||||
|
compatible = "imi,rdacm20";
|
||||||
|
reg = <0x53>, <0x63>;
|
||||||
|
|
||||||
|
port {
|
||||||
|
rdacm20_out2: endpoint {
|
||||||
|
remote-endpoint = <&max9286_in2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c@3 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
reg = <3>;
|
||||||
|
|
||||||
|
camera@54 {
|
||||||
|
compatible = "imi,rdacm20";
|
||||||
|
reg = <0x54>, <0x64>;
|
||||||
|
|
||||||
|
port {
|
||||||
|
rdacm20_out3: endpoint {
|
||||||
|
remote-endpoint = <&max9286_in3>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
port@2 {
|
|
||||||
reg = <2>;
|
|
||||||
|
|
||||||
max9286_in2: endpoint {
|
|
||||||
remote-endpoint = <&rdacm20_out2>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
port@3 {
|
|
||||||
reg = <3>;
|
|
||||||
|
|
||||||
max9286_in3: endpoint {
|
|
||||||
remote-endpoint = <&rdacm20_out3>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
port@4 {
|
|
||||||
reg = <4>;
|
|
||||||
|
|
||||||
max9286_out: endpoint {
|
|
||||||
data-lanes = <1 2 3 4>;
|
|
||||||
remote-endpoint = <&csi40_in>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c-mux {
|
/*
|
||||||
#address-cells = <1>;
|
* Example of a deserializer that controls the camera Power over Coax
|
||||||
#size-cells = <0>;
|
* through one of its gpio lines.
|
||||||
|
*/
|
||||||
|
gmsl-deserializer@6c {
|
||||||
|
compatible = "maxim,max9286";
|
||||||
|
reg = <0x6c>;
|
||||||
|
enable-gpios = <&gpio 14 GPIO_ACTIVE_HIGH>;
|
||||||
|
|
||||||
i2c@0 {
|
/*
|
||||||
#address-cells = <1>;
|
* The remote camera power is controlled by MAX9286 GPIO line #0.
|
||||||
#size-cells = <0>;
|
* No 'poc-supply' nor 'gpio-controller' are specified.
|
||||||
reg = <0>;
|
*/
|
||||||
|
maxim,gpio-poc = <0 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
camera@51 {
|
/*
|
||||||
compatible = "imi,rdacm20";
|
* Do not describe connections as they're the same as in the previous
|
||||||
reg = <0x51>, <0x61>;
|
* example.
|
||||||
|
*/
|
||||||
|
ports {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
port {
|
port@4 {
|
||||||
rdacm20_out0: endpoint {
|
reg = <4>;
|
||||||
remote-endpoint = <&max9286_in0>;
|
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
i2c@1 {
|
i2c-mux {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
reg = <1>;
|
|
||||||
|
|
||||||
camera@52 {
|
|
||||||
compatible = "imi,rdacm20";
|
|
||||||
reg = <0x52>, <0x62>;
|
|
||||||
|
|
||||||
port {
|
|
||||||
rdacm20_out1: endpoint {
|
|
||||||
remote-endpoint = <&max9286_in1>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
i2c@2 {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
reg = <2>;
|
|
||||||
|
|
||||||
camera@53 {
|
|
||||||
compatible = "imi,rdacm20";
|
|
||||||
reg = <0x53>, <0x63>;
|
|
||||||
|
|
||||||
port {
|
|
||||||
rdacm20_out2: endpoint {
|
|
||||||
remote-endpoint = <&max9286_in2>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
i2c@3 {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
reg = <3>;
|
|
||||||
|
|
||||||
camera@54 {
|
|
||||||
compatible = "imi,rdacm20";
|
|
||||||
reg = <0x54>, <0x64>;
|
|
||||||
|
|
||||||
port {
|
|
||||||
rdacm20_out3: endpoint {
|
|
||||||
remote-endpoint = <&max9286_in3>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,169 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||||
|
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/media/mediatek,vcodec-decoder.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Mediatek Video Decode Accelerator
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Yunfei Dong <yunfei.dong@mediatek.com>
|
||||||
|
|
||||||
|
description: |+
|
||||||
|
Mediatek Video Decode is the video decode hardware present in Mediatek
|
||||||
|
SoCs which supports high resolution decoding functionalities.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
enum:
|
||||||
|
- mediatek,mt8173-vcodec-dec
|
||||||
|
- mediatek,mt8183-vcodec-dec
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 12
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
maxItems: 8
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: vcodecpll
|
||||||
|
- const: univpll_d2
|
||||||
|
- const: clk_cci400_sel
|
||||||
|
- const: vdec_sel
|
||||||
|
- const: vdecpll
|
||||||
|
- const: vencpll
|
||||||
|
- const: venc_lt_sel
|
||||||
|
- const: vdec_bus_clk_src
|
||||||
|
|
||||||
|
assigned-clocks: true
|
||||||
|
|
||||||
|
assigned-clock-parents: true
|
||||||
|
|
||||||
|
assigned-clock-rates: true
|
||||||
|
|
||||||
|
power-domains:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
iommus:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 32
|
||||||
|
description: |
|
||||||
|
List of the hardware port in respective IOMMU block for current Socs.
|
||||||
|
Refer to bindings/iommu/mediatek,iommu.yaml.
|
||||||
|
|
||||||
|
dma-ranges:
|
||||||
|
maxItems: 1
|
||||||
|
description: |
|
||||||
|
Describes the physical address space of IOMMU maps to memory.
|
||||||
|
|
||||||
|
mediatek,vpu:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/phandle
|
||||||
|
maxItems: 1
|
||||||
|
description:
|
||||||
|
Describes point to vpu.
|
||||||
|
|
||||||
|
mediatek,scp:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/phandle
|
||||||
|
maxItems: 1
|
||||||
|
description:
|
||||||
|
Describes point to scp.
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- interrupts
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- iommus
|
||||||
|
- assigned-clocks
|
||||||
|
- assigned-clock-parents
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- mediatek,mt8183-vcodec-dec
|
||||||
|
|
||||||
|
then:
|
||||||
|
required:
|
||||||
|
- mediatek,scp
|
||||||
|
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- mediatek,mt8173-vcodec-dec
|
||||||
|
|
||||||
|
then:
|
||||||
|
required:
|
||||||
|
- mediatek,vpu
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||||
|
#include <dt-bindings/clock/mt8173-clk.h>
|
||||||
|
#include <dt-bindings/memory/mt8173-larb-port.h>
|
||||||
|
#include <dt-bindings/interrupt-controller/irq.h>
|
||||||
|
#include <dt-bindings/power/mt8173-power.h>
|
||||||
|
|
||||||
|
vcodec_dec: vcodec@16000000 {
|
||||||
|
compatible = "mediatek,mt8173-vcodec-dec";
|
||||||
|
reg = <0x16000000 0x100>, /*VDEC_SYS*/
|
||||||
|
<0x16020000 0x1000>, /*VDEC_MISC*/
|
||||||
|
<0x16021000 0x800>, /*VDEC_LD*/
|
||||||
|
<0x16021800 0x800>, /*VDEC_TOP*/
|
||||||
|
<0x16022000 0x1000>, /*VDEC_CM*/
|
||||||
|
<0x16023000 0x1000>, /*VDEC_AD*/
|
||||||
|
<0x16024000 0x1000>, /*VDEC_AV*/
|
||||||
|
<0x16025000 0x1000>, /*VDEC_PP*/
|
||||||
|
<0x16026800 0x800>, /*VP8_VD*/
|
||||||
|
<0x16027000 0x800>, /*VP6_VD*/
|
||||||
|
<0x16027800 0x800>, /*VP8_VL*/
|
||||||
|
<0x16028400 0x400>; /*VP9_VD*/
|
||||||
|
interrupts = <GIC_SPI 204 IRQ_TYPE_LEVEL_LOW>;
|
||||||
|
iommus = <&iommu M4U_PORT_HW_VDEC_MC_EXT>,
|
||||||
|
<&iommu M4U_PORT_HW_VDEC_PP_EXT>,
|
||||||
|
<&iommu M4U_PORT_HW_VDEC_AVC_MV_EXT>,
|
||||||
|
<&iommu M4U_PORT_HW_VDEC_PRED_RD_EXT>,
|
||||||
|
<&iommu M4U_PORT_HW_VDEC_PRED_WR_EXT>,
|
||||||
|
<&iommu M4U_PORT_HW_VDEC_UFO_EXT>,
|
||||||
|
<&iommu M4U_PORT_HW_VDEC_VLD_EXT>,
|
||||||
|
<&iommu M4U_PORT_HW_VDEC_VLD2_EXT>;
|
||||||
|
mediatek,vpu = <&vpu>;
|
||||||
|
power-domains = <&scpsys MT8173_POWER_DOMAIN_VDEC>;
|
||||||
|
clocks = <&apmixedsys CLK_APMIXED_VCODECPLL>,
|
||||||
|
<&topckgen CLK_TOP_UNIVPLL_D2>,
|
||||||
|
<&topckgen CLK_TOP_CCI400_SEL>,
|
||||||
|
<&topckgen CLK_TOP_VDEC_SEL>,
|
||||||
|
<&topckgen CLK_TOP_VCODECPLL>,
|
||||||
|
<&apmixedsys CLK_APMIXED_VENCPLL>,
|
||||||
|
<&topckgen CLK_TOP_VENC_LT_SEL>,
|
||||||
|
<&topckgen CLK_TOP_VCODECPLL_370P5>;
|
||||||
|
clock-names = "vcodecpll",
|
||||||
|
"univpll_d2",
|
||||||
|
"clk_cci400_sel",
|
||||||
|
"vdec_sel",
|
||||||
|
"vdecpll",
|
||||||
|
"vencpll",
|
||||||
|
"venc_lt_sel",
|
||||||
|
"vdec_bus_clk_src";
|
||||||
|
assigned-clocks = <&topckgen CLK_TOP_VENC_LT_SEL>,
|
||||||
|
<&topckgen CLK_TOP_CCI400_SEL>,
|
||||||
|
<&topckgen CLK_TOP_VDEC_SEL>,
|
||||||
|
<&apmixedsys CLK_APMIXED_VCODECPLL>,
|
||||||
|
<&apmixedsys CLK_APMIXED_VENCPLL>;
|
||||||
|
assigned-clock-parents = <&topckgen CLK_TOP_VCODECPLL_370P5>,
|
||||||
|
<&topckgen CLK_TOP_UNIVPLL_D2>,
|
||||||
|
<&topckgen CLK_TOP_VCODECPLL>;
|
||||||
|
assigned-clock-rates = <0>, <0>, <0>, <1482000000>, <800000000>;
|
||||||
|
};
|
|
@ -0,0 +1,179 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||||
|
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/media/mediatek,vcodec-encoder.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Mediatek Video Encode Accelerator
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Yunfei Dong <yunfei.dong@mediatek.com>
|
||||||
|
|
||||||
|
description: |+
|
||||||
|
Mediatek Video Encode is the video encode hardware present in Mediatek
|
||||||
|
SoCs which supports high resolution encoding functionalities.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
enum:
|
||||||
|
- mediatek,mt8173-vcodec-enc-vp8
|
||||||
|
- mediatek,mt8173-vcodec-enc
|
||||||
|
- mediatek,mt8183-vcodec-enc
|
||||||
|
- mediatek,mt8192-vcodec-enc
|
||||||
|
- mediatek,mt8195-vcodec-enc
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 5
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 5
|
||||||
|
|
||||||
|
assigned-clocks: true
|
||||||
|
|
||||||
|
assigned-clock-parents: true
|
||||||
|
|
||||||
|
iommus:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 32
|
||||||
|
description: |
|
||||||
|
List of the hardware port in respective IOMMU block for current Socs.
|
||||||
|
Refer to bindings/iommu/mediatek,iommu.yaml.
|
||||||
|
|
||||||
|
dma-ranges:
|
||||||
|
maxItems: 1
|
||||||
|
description: |
|
||||||
|
Describes the physical address space of IOMMU maps to memory.
|
||||||
|
|
||||||
|
mediatek,vpu:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/phandle
|
||||||
|
maxItems: 1
|
||||||
|
description:
|
||||||
|
Describes point to vpu.
|
||||||
|
|
||||||
|
mediatek,scp:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/phandle
|
||||||
|
maxItems: 1
|
||||||
|
description:
|
||||||
|
Describes point to scp.
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- interrupts
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- iommus
|
||||||
|
- assigned-clocks
|
||||||
|
- assigned-clock-parents
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- mediatek,mt8183-vcodec-enc
|
||||||
|
- mediatek,mt8192-vcodec-enc
|
||||||
|
|
||||||
|
then:
|
||||||
|
required:
|
||||||
|
- mediatek,scp
|
||||||
|
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- mediatek,mt8173-vcodec-enc-vp8
|
||||||
|
- mediatek,mt8173-vcodec-enc
|
||||||
|
|
||||||
|
then:
|
||||||
|
required:
|
||||||
|
- mediatek,vpu
|
||||||
|
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
enum:
|
||||||
|
- mediatek,mt8173-vcodec-enc
|
||||||
|
- mediatek,mt8192-vcodec-enc
|
||||||
|
- mediatek,mt8173-vcodec-enc
|
||||||
|
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
clock:
|
||||||
|
items:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 1
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: venc_sel
|
||||||
|
else: # for vp8 hw decoder
|
||||||
|
properties:
|
||||||
|
clock:
|
||||||
|
items:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 1
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: venc_lt_sel
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||||
|
#include <dt-bindings/clock/mt8173-clk.h>
|
||||||
|
#include <dt-bindings/memory/mt8173-larb-port.h>
|
||||||
|
#include <dt-bindings/interrupt-controller/irq.h>
|
||||||
|
|
||||||
|
vcodec_enc_avc: vcodec@18002000 {
|
||||||
|
compatible = "mediatek,mt8173-vcodec-enc";
|
||||||
|
reg = <0x18002000 0x1000>;
|
||||||
|
interrupts = <GIC_SPI 198 IRQ_TYPE_LEVEL_LOW>;
|
||||||
|
iommus = <&iommu M4U_PORT_VENC_RCPU>,
|
||||||
|
<&iommu M4U_PORT_VENC_REC>,
|
||||||
|
<&iommu M4U_PORT_VENC_BSDMA>,
|
||||||
|
<&iommu M4U_PORT_VENC_SV_COMV>,
|
||||||
|
<&iommu M4U_PORT_VENC_RD_COMV>,
|
||||||
|
<&iommu M4U_PORT_VENC_CUR_LUMA>,
|
||||||
|
<&iommu M4U_PORT_VENC_CUR_CHROMA>,
|
||||||
|
<&iommu M4U_PORT_VENC_REF_LUMA>,
|
||||||
|
<&iommu M4U_PORT_VENC_REF_CHROMA>,
|
||||||
|
<&iommu M4U_PORT_VENC_NBM_RDMA>,
|
||||||
|
<&iommu M4U_PORT_VENC_NBM_WDMA>;
|
||||||
|
mediatek,vpu = <&vpu>;
|
||||||
|
clocks = <&topckgen CLK_TOP_VENC_SEL>;
|
||||||
|
clock-names = "venc_sel";
|
||||||
|
assigned-clocks = <&topckgen CLK_TOP_VENC_SEL>;
|
||||||
|
assigned-clock-parents = <&topckgen CLK_TOP_VCODECPLL>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vcodec_enc_vp8: vcodec@19002000 {
|
||||||
|
compatible = "mediatek,mt8173-vcodec-enc-vp8";
|
||||||
|
reg = <0x19002000 0x1000>; /* VENC_LT_SYS */
|
||||||
|
interrupts = <GIC_SPI 202 IRQ_TYPE_LEVEL_LOW>;
|
||||||
|
iommus = <&iommu M4U_PORT_VENC_RCPU_SET2>,
|
||||||
|
<&iommu M4U_PORT_VENC_REC_FRM_SET2>,
|
||||||
|
<&iommu M4U_PORT_VENC_BSDMA_SET2>,
|
||||||
|
<&iommu M4U_PORT_VENC_SV_COMA_SET2>,
|
||||||
|
<&iommu M4U_PORT_VENC_RD_COMA_SET2>,
|
||||||
|
<&iommu M4U_PORT_VENC_CUR_LUMA_SET2>,
|
||||||
|
<&iommu M4U_PORT_VENC_CUR_CHROMA_SET2>,
|
||||||
|
<&iommu M4U_PORT_VENC_REF_LUMA_SET2>,
|
||||||
|
<&iommu M4U_PORT_VENC_REC_CHROMA_SET2>;
|
||||||
|
mediatek,vpu = <&vpu>;
|
||||||
|
clocks = <&topckgen CLK_TOP_VENC_LT_SEL>;
|
||||||
|
clock-names = "venc_lt_sel";
|
||||||
|
assigned-clocks = <&topckgen CLK_TOP_VENC_LT_SEL>;
|
||||||
|
assigned-clock-parents = <&topckgen CLK_TOP_VCODECPLL_370P5>;
|
||||||
|
};
|
|
@ -0,0 +1,265 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||||
|
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: "http://devicetree.org/schemas/media/mediatek,vcodec-subdev-decoder.yaml#"
|
||||||
|
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
||||||
|
|
||||||
|
title: Mediatek Video Decode Accelerator With Multi Hardware
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Yunfei Dong <yunfei.dong@mediatek.com>
|
||||||
|
|
||||||
|
description: |
|
||||||
|
Mediatek Video Decode is the video decode hardware present in Mediatek
|
||||||
|
SoCs which supports high resolution decoding functionalities. Required
|
||||||
|
parent and child device node.
|
||||||
|
|
||||||
|
About the Decoder Hardware Block Diagram, please check below:
|
||||||
|
|
||||||
|
+---------------------------------+------------------------------------+
|
||||||
|
| | |
|
||||||
|
| input -> lat HW -> lat buffer --|--> lat buffer -> core HW -> output |
|
||||||
|
| || | || |
|
||||||
|
+------------||-------------------+---------------------||-------------+
|
||||||
|
lat workqueue | core workqueue <parent>
|
||||||
|
-------------||-----------------------------------------||------------------
|
||||||
|
|| || <child>
|
||||||
|
\/ <----------------HW index-------------->\/
|
||||||
|
+------------------------------------------------------+
|
||||||
|
| enable/disable |
|
||||||
|
| clk power irq iommu |
|
||||||
|
| (lat/lat soc/core0/core1) |
|
||||||
|
+------------------------------------------------------+
|
||||||
|
|
||||||
|
As above, there are parent and child devices, child mean each hardware. The child device
|
||||||
|
controls the information of each hardware independent which include clk/power/irq.
|
||||||
|
|
||||||
|
There are two workqueues in parent device: lat workqueue and core workqueue. They are used
|
||||||
|
to lat and core hardware deocder. Lat workqueue need to get input bitstream and lat buffer,
|
||||||
|
then enable lat to decode, writing the result to lat buffer, dislabe hardware when lat decode
|
||||||
|
done. Core workqueue need to get lat buffer and output buffer, then enable core to decode,
|
||||||
|
writing the result to output buffer, disable hardware when core decode done. These two
|
||||||
|
hardwares will decode each frame cyclically.
|
||||||
|
|
||||||
|
For the smi common may not the same for each hardware, can't combine all hardware in one node,
|
||||||
|
or leading to iommu fault when access dram data.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: mediatek,mt8192-vcodec-dec
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
iommus:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 32
|
||||||
|
description: |
|
||||||
|
List of the hardware port in respective IOMMU block for current Socs.
|
||||||
|
Refer to bindings/iommu/mediatek,iommu.yaml.
|
||||||
|
|
||||||
|
mediatek,scp:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/phandle
|
||||||
|
maxItems: 1
|
||||||
|
description: |
|
||||||
|
The node of system control processor (SCP), using
|
||||||
|
the remoteproc & rpmsg framework.
|
||||||
|
|
||||||
|
dma-ranges:
|
||||||
|
maxItems: 1
|
||||||
|
description: |
|
||||||
|
Describes the physical address space of IOMMU maps to memory.
|
||||||
|
|
||||||
|
"#address-cells":
|
||||||
|
const: 1
|
||||||
|
|
||||||
|
"#size-cells":
|
||||||
|
const: 1
|
||||||
|
|
||||||
|
ranges: true
|
||||||
|
|
||||||
|
# Required child node:
|
||||||
|
patternProperties:
|
||||||
|
'^vcodec-lat@[0-9a-f]+$':
|
||||||
|
type: object
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: mediatek,mtk-vcodec-lat
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
iommus:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 32
|
||||||
|
description: |
|
||||||
|
List of the hardware port in respective IOMMU block for current Socs.
|
||||||
|
Refer to bindings/iommu/mediatek,iommu.yaml.
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
maxItems: 5
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: sel
|
||||||
|
- const: soc-vdec
|
||||||
|
- const: soc-lat
|
||||||
|
- const: vdec
|
||||||
|
- const: top
|
||||||
|
|
||||||
|
assigned-clocks:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
assigned-clock-parents:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
power-domains:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- interrupts
|
||||||
|
- iommus
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- assigned-clocks
|
||||||
|
- assigned-clock-parents
|
||||||
|
- power-domains
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
'^vcodec-core@[0-9a-f]+$':
|
||||||
|
type: object
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: mediatek,mtk-vcodec-core
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
iommus:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 32
|
||||||
|
description: |
|
||||||
|
List of the hardware port in respective IOMMU block for current Socs.
|
||||||
|
Refer to bindings/iommu/mediatek,iommu.yaml.
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
maxItems: 5
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: sel
|
||||||
|
- const: soc-vdec
|
||||||
|
- const: soc-lat
|
||||||
|
- const: vdec
|
||||||
|
- const: top
|
||||||
|
|
||||||
|
assigned-clocks:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
assigned-clock-parents:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
power-domains:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- interrupts
|
||||||
|
- iommus
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- assigned-clocks
|
||||||
|
- assigned-clock-parents
|
||||||
|
- power-domains
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- iommus
|
||||||
|
- mediatek,scp
|
||||||
|
- dma-ranges
|
||||||
|
- ranges
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||||
|
#include <dt-bindings/memory/mt8192-larb-port.h>
|
||||||
|
#include <dt-bindings/interrupt-controller/irq.h>
|
||||||
|
#include <dt-bindings/clock/mt8192-clk.h>
|
||||||
|
#include <dt-bindings/power/mt8192-power.h>
|
||||||
|
|
||||||
|
video-codec@16000000 {
|
||||||
|
compatible = "mediatek,mt8192-vcodec-dec";
|
||||||
|
mediatek,scp = <&scp>;
|
||||||
|
iommus = <&iommu0 M4U_PORT_L4_VDEC_MC_EXT>;
|
||||||
|
dma-ranges = <0x1 0x0 0x0 0x40000000 0x0 0xfff00000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
ranges = <0 0x16000000 0x40000>;
|
||||||
|
reg = <0x16000000 0x1000>; /* VDEC_SYS */
|
||||||
|
vcodec-lat@10000 {
|
||||||
|
compatible = "mediatek,mtk-vcodec-lat";
|
||||||
|
reg = <0x10000 0x800>;
|
||||||
|
interrupts = <GIC_SPI 426 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||||
|
iommus = <&iommu0 M4U_PORT_L5_VDEC_LAT0_VLD_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L5_VDEC_LAT0_VLD2_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L5_VDEC_LAT0_AVC_MV_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L5_VDEC_LAT0_PRED_RD_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L5_VDEC_LAT0_TILE_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L5_VDEC_LAT0_WDMA_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L5_VDEC_LAT0_RG_CTRL_DMA_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L5_VDEC_UFO_ENC_EXT>;
|
||||||
|
clocks = <&topckgen CLK_TOP_VDEC_SEL>,
|
||||||
|
<&vdecsys_soc CLK_VDEC_SOC_VDEC>,
|
||||||
|
<&vdecsys_soc CLK_VDEC_SOC_LAT>,
|
||||||
|
<&vdecsys_soc CLK_VDEC_SOC_LARB1>,
|
||||||
|
<&topckgen CLK_TOP_MAINPLL_D4>;
|
||||||
|
clock-names = "sel", "soc-vdec", "soc-lat", "vdec", "top";
|
||||||
|
assigned-clocks = <&topckgen CLK_TOP_VDEC_SEL>;
|
||||||
|
assigned-clock-parents = <&topckgen CLK_TOP_MAINPLL_D4>;
|
||||||
|
power-domains = <&spm MT8192_POWER_DOMAIN_VDEC>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vcodec-core@25000 {
|
||||||
|
compatible = "mediatek,mtk-vcodec-core";
|
||||||
|
reg = <0x25000 0x1000>;
|
||||||
|
interrupts = <GIC_SPI 425 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||||
|
iommus = <&iommu0 M4U_PORT_L4_VDEC_MC_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L4_VDEC_UFO_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L4_VDEC_PP_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L4_VDEC_PRED_RD_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L4_VDEC_PRED_WR_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L4_VDEC_PPWRAP_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L4_VDEC_TILE_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L4_VDEC_VLD_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L4_VDEC_VLD2_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L4_VDEC_AVC_MV_EXT>,
|
||||||
|
<&iommu0 M4U_PORT_L4_VDEC_RG_CTRL_DMA_EXT>;
|
||||||
|
clocks = <&topckgen CLK_TOP_VDEC_SEL>,
|
||||||
|
<&vdecsys CLK_VDEC_VDEC>,
|
||||||
|
<&vdecsys CLK_VDEC_LAT>,
|
||||||
|
<&vdecsys CLK_VDEC_LARB1>,
|
||||||
|
<&topckgen CLK_TOP_MAINPLL_D4>;
|
||||||
|
clock-names = "sel", "soc-vdec", "soc-lat", "vdec", "top";
|
||||||
|
assigned-clocks = <&topckgen CLK_TOP_VDEC_SEL>;
|
||||||
|
assigned-clock-parents = <&topckgen CLK_TOP_MAINPLL_D4>;
|
||||||
|
power-domains = <&spm MT8192_POWER_DOMAIN_VDEC2>;
|
||||||
|
};
|
||||||
|
};
|
|
@ -1,38 +0,0 @@
|
||||||
* Mediatek JPEG Decoder
|
|
||||||
|
|
||||||
Mediatek JPEG Decoder is the JPEG decode hardware present in Mediatek SoCs
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible : must be one of the following string:
|
|
||||||
"mediatek,mt8173-jpgdec"
|
|
||||||
"mediatek,mt7623-jpgdec", "mediatek,mt2701-jpgdec"
|
|
||||||
"mediatek,mt2701-jpgdec"
|
|
||||||
- reg : physical base address of the jpeg decoder registers and length of
|
|
||||||
memory mapped region.
|
|
||||||
- interrupts : interrupt number to the interrupt controller.
|
|
||||||
- clocks: device clocks, see
|
|
||||||
Documentation/devicetree/bindings/clock/clock-bindings.txt for details.
|
|
||||||
- clock-names: must contain "jpgdec-smi" and "jpgdec".
|
|
||||||
- power-domains: a phandle to the power domain, see
|
|
||||||
Documentation/devicetree/bindings/power/power_domain.txt for details.
|
|
||||||
- mediatek,larb: must contain the local arbiters in the current Socs, see
|
|
||||||
Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.yaml
|
|
||||||
for details.
|
|
||||||
- iommus: should point to the respective IOMMU block with master port as
|
|
||||||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
|
|
||||||
for details.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
jpegdec: jpegdec@15004000 {
|
|
||||||
compatible = "mediatek,mt2701-jpgdec";
|
|
||||||
reg = <0 0x15004000 0 0x1000>;
|
|
||||||
interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_LOW>;
|
|
||||||
clocks = <&imgsys CLK_IMG_JPGDEC_SMI>,
|
|
||||||
<&imgsys CLK_IMG_JPGDEC>;
|
|
||||||
clock-names = "jpgdec-smi",
|
|
||||||
"jpgdec";
|
|
||||||
power-domains = <&scpsys MT2701_POWER_DOMAIN_ISP>;
|
|
||||||
mediatek,larb = <&larb2>;
|
|
||||||
iommus = <&iommu MT2701_M4U_PORT_JPGDEC_WDMA>,
|
|
||||||
<&iommu MT2701_M4U_PORT_JPGDEC_BSDMA>;
|
|
||||||
};
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/media/mediatek-jpeg-decoder.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: MediaTek JPEG Decoder Device Tree Bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Xia Jiang <xia.jiang@mediatek.com>
|
||||||
|
|
||||||
|
description: |-
|
||||||
|
Mediatek JPEG Decoder is the JPEG decode hardware present in Mediatek SoCs
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
oneOf:
|
||||||
|
- items:
|
||||||
|
- enum:
|
||||||
|
- mediatek,mt8173-jpgdec
|
||||||
|
- mediatek,mt2701-jpgdec
|
||||||
|
- items:
|
||||||
|
- enum:
|
||||||
|
- mediatek,mt7623-jpgdec
|
||||||
|
- const: mediatek,mt2701-jpgdec
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
maxItems: 2
|
||||||
|
minItems: 2
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: jpgdec-smi
|
||||||
|
- const: jpgdec
|
||||||
|
|
||||||
|
power-domains:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
iommus:
|
||||||
|
maxItems: 2
|
||||||
|
description: |
|
||||||
|
Points to the respective IOMMU block with master port as argument, see
|
||||||
|
Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml for details.
|
||||||
|
Ports are according to the HW.
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- interrupts
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- power-domains
|
||||||
|
- iommus
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/clock/mt2701-clk.h>
|
||||||
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||||
|
#include <dt-bindings/memory/mt2701-larb-port.h>
|
||||||
|
#include <dt-bindings/power/mt2701-power.h>
|
||||||
|
jpegdec: jpegdec@15004000 {
|
||||||
|
compatible = "mediatek,mt2701-jpgdec";
|
||||||
|
reg = <0x15004000 0x1000>;
|
||||||
|
interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_LOW>;
|
||||||
|
clocks = <&imgsys CLK_IMG_JPGDEC_SMI>,
|
||||||
|
<&imgsys CLK_IMG_JPGDEC>;
|
||||||
|
clock-names = "jpgdec-smi",
|
||||||
|
"jpgdec";
|
||||||
|
power-domains = <&scpsys MT2701_POWER_DOMAIN_ISP>;
|
||||||
|
iommus = <&iommu MT2701_M4U_PORT_JPGDEC_WDMA>,
|
||||||
|
<&iommu MT2701_M4U_PORT_JPGDEC_BSDMA>;
|
||||||
|
};
|
|
@ -1,35 +0,0 @@
|
||||||
* MediaTek JPEG Encoder
|
|
||||||
|
|
||||||
MediaTek JPEG Encoder is the JPEG encode hardware present in MediaTek SoCs
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible : "mediatek,mt2701-jpgenc"
|
|
||||||
followed by "mediatek,mtk-jpgenc"
|
|
||||||
- reg : physical base address of the JPEG encoder registers and length of
|
|
||||||
memory mapped region.
|
|
||||||
- interrupts : interrupt number to the interrupt controller.
|
|
||||||
- clocks: device clocks, see
|
|
||||||
Documentation/devicetree/bindings/clock/clock-bindings.txt for details.
|
|
||||||
- clock-names: must contain "jpgenc". It is the clock of JPEG encoder.
|
|
||||||
- power-domains: a phandle to the power domain, see
|
|
||||||
Documentation/devicetree/bindings/power/power_domain.txt for details.
|
|
||||||
- mediatek,larb: must contain the local arbiters in the current SoCs, see
|
|
||||||
Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.yaml
|
|
||||||
for details.
|
|
||||||
- iommus: should point to the respective IOMMU block with master port as
|
|
||||||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
|
|
||||||
for details.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
jpegenc: jpegenc@1500a000 {
|
|
||||||
compatible = "mediatek,mt2701-jpgenc",
|
|
||||||
"mediatek,mtk-jpgenc";
|
|
||||||
reg = <0 0x1500a000 0 0x1000>;
|
|
||||||
interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_LOW>;
|
|
||||||
clocks = <&imgsys CLK_IMG_VENC>;
|
|
||||||
clock-names = "jpgenc";
|
|
||||||
power-domains = <&scpsys MT2701_POWER_DOMAIN_ISP>;
|
|
||||||
mediatek,larb = <&larb2>;
|
|
||||||
iommus = <&iommu MT2701_M4U_PORT_JPGENC_RDMA>,
|
|
||||||
<&iommu MT2701_M4U_PORT_JPGENC_BSDMA>;
|
|
||||||
};
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/media/mediatek-jpeg-encoder.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: MediaTek JPEG Encoder Device Tree Bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Xia Jiang <xia.jiang@mediatek.com>
|
||||||
|
|
||||||
|
description: |-
|
||||||
|
MediaTek JPEG Encoder is the JPEG encode hardware present in MediaTek SoCs
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
items:
|
||||||
|
- enum:
|
||||||
|
- mediatek,mt2701-jpgenc
|
||||||
|
- mediatek,mt8183-jpgenc
|
||||||
|
- const: mediatek,mtk-jpgenc
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: jpgenc
|
||||||
|
|
||||||
|
power-domains:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
iommus:
|
||||||
|
maxItems: 2
|
||||||
|
description: |
|
||||||
|
Points to the respective IOMMU block with master port as argument, see
|
||||||
|
Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml for details.
|
||||||
|
Ports are according to the HW.
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- interrupts
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- power-domains
|
||||||
|
- iommus
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/clock/mt2701-clk.h>
|
||||||
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||||
|
#include <dt-bindings/memory/mt2701-larb-port.h>
|
||||||
|
#include <dt-bindings/power/mt2701-power.h>
|
||||||
|
jpegenc: jpegenc@1500a000 {
|
||||||
|
compatible = "mediatek,mt2701-jpgenc",
|
||||||
|
"mediatek,mtk-jpgenc";
|
||||||
|
reg = <0x1500a000 0x1000>;
|
||||||
|
interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_LOW>;
|
||||||
|
clocks = <&imgsys CLK_IMG_VENC>;
|
||||||
|
clock-names = "jpgenc";
|
||||||
|
power-domains = <&scpsys MT2701_POWER_DOMAIN_ISP>;
|
||||||
|
iommus = <&iommu MT2701_M4U_PORT_JPGENC_RDMA>,
|
||||||
|
<&iommu MT2701_M4U_PORT_JPGENC_BSDMA>;
|
||||||
|
};
|
|
@ -27,9 +27,6 @@ Required properties (DMA function blocks, child node):
|
||||||
- iommus: should point to the respective IOMMU block with master port as
|
- iommus: should point to the respective IOMMU block with master port as
|
||||||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
|
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
|
||||||
for details.
|
for details.
|
||||||
- mediatek,larb: must contain the local arbiters in the current Socs, see
|
|
||||||
Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.yaml
|
|
||||||
for details.
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
mdp_rdma0: rdma@14001000 {
|
mdp_rdma0: rdma@14001000 {
|
||||||
|
@ -40,7 +37,6 @@ Example:
|
||||||
<&mmsys CLK_MM_MUTEX_32K>;
|
<&mmsys CLK_MM_MUTEX_32K>;
|
||||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||||
iommus = <&iommu M4U_PORT_MDP_RDMA0>;
|
iommus = <&iommu M4U_PORT_MDP_RDMA0>;
|
||||||
mediatek,larb = <&larb0>;
|
|
||||||
mediatek,vpu = <&vpu>;
|
mediatek,vpu = <&vpu>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -51,7 +47,6 @@ Example:
|
||||||
<&mmsys CLK_MM_MUTEX_32K>;
|
<&mmsys CLK_MM_MUTEX_32K>;
|
||||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||||
iommus = <&iommu M4U_PORT_MDP_RDMA1>;
|
iommus = <&iommu M4U_PORT_MDP_RDMA1>;
|
||||||
mediatek,larb = <&larb4>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
mdp_rsz0: rsz@14003000 {
|
mdp_rsz0: rsz@14003000 {
|
||||||
|
@ -81,7 +76,6 @@ Example:
|
||||||
clocks = <&mmsys CLK_MM_MDP_WDMA>;
|
clocks = <&mmsys CLK_MM_MDP_WDMA>;
|
||||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||||
iommus = <&iommu M4U_PORT_MDP_WDMA>;
|
iommus = <&iommu M4U_PORT_MDP_WDMA>;
|
||||||
mediatek,larb = <&larb0>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
mdp_wrot0: wrot@14007000 {
|
mdp_wrot0: wrot@14007000 {
|
||||||
|
@ -90,7 +84,6 @@ Example:
|
||||||
clocks = <&mmsys CLK_MM_MDP_WROT0>;
|
clocks = <&mmsys CLK_MM_MDP_WROT0>;
|
||||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||||
iommus = <&iommu M4U_PORT_MDP_WROT0>;
|
iommus = <&iommu M4U_PORT_MDP_WROT0>;
|
||||||
mediatek,larb = <&larb0>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
mdp_wrot1: wrot@14008000 {
|
mdp_wrot1: wrot@14008000 {
|
||||||
|
@ -99,5 +92,4 @@ Example:
|
||||||
clocks = <&mmsys CLK_MM_MDP_WROT1>;
|
clocks = <&mmsys CLK_MM_MDP_WROT1>;
|
||||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||||
iommus = <&iommu M4U_PORT_MDP_WROT1>;
|
iommus = <&iommu M4U_PORT_MDP_WROT1>;
|
||||||
mediatek,larb = <&larb4>;
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,131 +0,0 @@
|
||||||
Mediatek Video Codec
|
|
||||||
|
|
||||||
Mediatek Video Codec is the video codec hw present in Mediatek SoCs which
|
|
||||||
supports high resolution encoding and decoding functionalities.
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible : must be one of the following string:
|
|
||||||
"mediatek,mt8173-vcodec-enc-vp8" for mt8173 vp8 encoder.
|
|
||||||
"mediatek,mt8173-vcodec-enc" for mt8173 avc encoder.
|
|
||||||
"mediatek,mt8183-vcodec-enc" for MT8183 encoder.
|
|
||||||
"mediatek,mt8173-vcodec-dec" for MT8173 decoder.
|
|
||||||
"mediatek,mt8192-vcodec-enc" for MT8192 encoder.
|
|
||||||
"mediatek,mt8183-vcodec-dec" for MT8183 decoder.
|
|
||||||
"mediatek,mt8195-vcodec-enc" for MT8195 encoder.
|
|
||||||
- reg : Physical base address of the video codec registers and length of
|
|
||||||
memory mapped region.
|
|
||||||
- interrupts : interrupt number to the cpu.
|
|
||||||
- mediatek,larb : must contain the local arbiters in the current Socs.
|
|
||||||
- clocks : list of clock specifiers, corresponding to entries in
|
|
||||||
the clock-names property.
|
|
||||||
- clock-names: avc encoder must contain "venc_sel", vp8 encoder must
|
|
||||||
contain "venc_lt_sel", decoder must contain "vcodecpll", "univpll_d2",
|
|
||||||
"clk_cci400_sel", "vdec_sel", "vdecpll", "vencpll", "venc_lt_sel",
|
|
||||||
"vdec_bus_clk_src".
|
|
||||||
- iommus : should point to the respective IOMMU block with master port as
|
|
||||||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
|
|
||||||
for details.
|
|
||||||
- dma-ranges : describes the dma address range space that the codec hw access.
|
|
||||||
One of the two following nodes:
|
|
||||||
- mediatek,vpu : the node of the video processor unit, if using VPU.
|
|
||||||
- mediatek,scp : the node of the SCP unit, if using SCP.
|
|
||||||
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
vcodec_dec: vcodec@16000000 {
|
|
||||||
compatible = "mediatek,mt8173-vcodec-dec";
|
|
||||||
reg = <0 0x16000000 0 0x100>, /*VDEC_SYS*/
|
|
||||||
<0 0x16020000 0 0x1000>, /*VDEC_MISC*/
|
|
||||||
<0 0x16021000 0 0x800>, /*VDEC_LD*/
|
|
||||||
<0 0x16021800 0 0x800>, /*VDEC_TOP*/
|
|
||||||
<0 0x16022000 0 0x1000>, /*VDEC_CM*/
|
|
||||||
<0 0x16023000 0 0x1000>, /*VDEC_AD*/
|
|
||||||
<0 0x16024000 0 0x1000>, /*VDEC_AV*/
|
|
||||||
<0 0x16025000 0 0x1000>, /*VDEC_PP*/
|
|
||||||
<0 0x16026800 0 0x800>, /*VP8_VD*/
|
|
||||||
<0 0x16027000 0 0x800>, /*VP6_VD*/
|
|
||||||
<0 0x16027800 0 0x800>, /*VP8_VL*/
|
|
||||||
<0 0x16028400 0 0x400>; /*VP9_VD*/
|
|
||||||
interrupts = <GIC_SPI 204 IRQ_TYPE_LEVEL_LOW>;
|
|
||||||
mediatek,larb = <&larb1>;
|
|
||||||
iommus = <&iommu M4U_PORT_HW_VDEC_MC_EXT>,
|
|
||||||
<&iommu M4U_PORT_HW_VDEC_PP_EXT>,
|
|
||||||
<&iommu M4U_PORT_HW_VDEC_AVC_MV_EXT>,
|
|
||||||
<&iommu M4U_PORT_HW_VDEC_PRED_RD_EXT>,
|
|
||||||
<&iommu M4U_PORT_HW_VDEC_PRED_WR_EXT>,
|
|
||||||
<&iommu M4U_PORT_HW_VDEC_UFO_EXT>,
|
|
||||||
<&iommu M4U_PORT_HW_VDEC_VLD_EXT>,
|
|
||||||
<&iommu M4U_PORT_HW_VDEC_VLD2_EXT>;
|
|
||||||
mediatek,vpu = <&vpu>;
|
|
||||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_VDEC>;
|
|
||||||
clocks = <&apmixedsys CLK_APMIXED_VCODECPLL>,
|
|
||||||
<&topckgen CLK_TOP_UNIVPLL_D2>,
|
|
||||||
<&topckgen CLK_TOP_CCI400_SEL>,
|
|
||||||
<&topckgen CLK_TOP_VDEC_SEL>,
|
|
||||||
<&topckgen CLK_TOP_VCODECPLL>,
|
|
||||||
<&apmixedsys CLK_APMIXED_VENCPLL>,
|
|
||||||
<&topckgen CLK_TOP_VENC_LT_SEL>,
|
|
||||||
<&topckgen CLK_TOP_VCODECPLL_370P5>;
|
|
||||||
clock-names = "vcodecpll",
|
|
||||||
"univpll_d2",
|
|
||||||
"clk_cci400_sel",
|
|
||||||
"vdec_sel",
|
|
||||||
"vdecpll",
|
|
||||||
"vencpll",
|
|
||||||
"venc_lt_sel",
|
|
||||||
"vdec_bus_clk_src";
|
|
||||||
assigned-clocks = <&topckgen CLK_TOP_VENC_LT_SEL>,
|
|
||||||
<&topckgen CLK_TOP_CCI400_SEL>,
|
|
||||||
<&topckgen CLK_TOP_VDEC_SEL>,
|
|
||||||
<&apmixedsys CLK_APMIXED_VCODECPLL>,
|
|
||||||
<&apmixedsys CLK_APMIXED_VENCPLL>;
|
|
||||||
assigned-clock-parents = <&topckgen CLK_TOP_VCODECPLL_370P5>,
|
|
||||||
<&topckgen CLK_TOP_UNIVPLL_D2>,
|
|
||||||
<&topckgen CLK_TOP_VCODECPLL>;
|
|
||||||
assigned-clock-rates = <0>, <0>, <0>, <1482000000>, <800000000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
vcodec_enc_avc: vcodec@18002000 {
|
|
||||||
compatible = "mediatek,mt8173-vcodec-enc";
|
|
||||||
reg = <0 0x18002000 0 0x1000>;
|
|
||||||
interrupts = <GIC_SPI 198 IRQ_TYPE_LEVEL_LOW>;
|
|
||||||
iommus = <&iommu M4U_PORT_VENC_RCPU>,
|
|
||||||
<&iommu M4U_PORT_VENC_REC>,
|
|
||||||
<&iommu M4U_PORT_VENC_BSDMA>,
|
|
||||||
<&iommu M4U_PORT_VENC_SV_COMV>,
|
|
||||||
<&iommu M4U_PORT_VENC_RD_COMV>,
|
|
||||||
<&iommu M4U_PORT_VENC_CUR_LUMA>,
|
|
||||||
<&iommu M4U_PORT_VENC_CUR_CHROMA>,
|
|
||||||
<&iommu M4U_PORT_VENC_REF_LUMA>,
|
|
||||||
<&iommu M4U_PORT_VENC_REF_CHROMA>,
|
|
||||||
<&iommu M4U_PORT_VENC_NBM_RDMA>,
|
|
||||||
<&iommu M4U_PORT_VENC_NBM_WDMA>;
|
|
||||||
mediatek,larb = <&larb3>;
|
|
||||||
mediatek,vpu = <&vpu>;
|
|
||||||
clocks = <&topckgen CLK_TOP_VENC_SEL>;
|
|
||||||
clock-names = "venc_sel";
|
|
||||||
assigned-clocks = <&topckgen CLK_TOP_VENC_SEL>;
|
|
||||||
assigned-clock-parents = <&topckgen CLK_TOP_VCODECPLL>;
|
|
||||||
};
|
|
||||||
|
|
||||||
vcodec_enc_vp8: vcodec@19002000 {
|
|
||||||
compatible = "mediatek,mt8173-vcodec-enc-vp8";
|
|
||||||
reg = <0 0x19002000 0 0x1000>; /* VENC_LT_SYS */
|
|
||||||
interrupts = <GIC_SPI 202 IRQ_TYPE_LEVEL_LOW>;
|
|
||||||
iommus = <&iommu M4U_PORT_VENC_RCPU_SET2>,
|
|
||||||
<&iommu M4U_PORT_VENC_REC_FRM_SET2>,
|
|
||||||
<&iommu M4U_PORT_VENC_BSDMA_SET2>,
|
|
||||||
<&iommu M4U_PORT_VENC_SV_COMA_SET2>,
|
|
||||||
<&iommu M4U_PORT_VENC_RD_COMA_SET2>,
|
|
||||||
<&iommu M4U_PORT_VENC_CUR_LUMA_SET2>,
|
|
||||||
<&iommu M4U_PORT_VENC_CUR_CHROMA_SET2>,
|
|
||||||
<&iommu M4U_PORT_VENC_REF_LUMA_SET2>,
|
|
||||||
<&iommu M4U_PORT_VENC_REC_CHROMA_SET2>;
|
|
||||||
mediatek,larb = <&larb5>;
|
|
||||||
mediatek,vpu = <&vpu>;
|
|
||||||
clocks = <&topckgen CLK_TOP_VENC_LT_SEL>;
|
|
||||||
clock-names = "venc_lt_sel";
|
|
||||||
assigned-clocks = <&topckgen CLK_TOP_VENC_LT_SEL>;
|
|
||||||
assigned-clock-parents = <&topckgen CLK_TOP_VCODECPLL_370P5>;
|
|
||||||
};
|
|
|
@ -0,0 +1,197 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/media/microchip,csi2dc.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Microchip CSI2 Demux Controller (CSI2DC)
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Eugen Hristev <eugen.hristev@microchip.com>
|
||||||
|
|
||||||
|
description:
|
||||||
|
CSI2DC - Camera Serial Interface 2 Demux Controller
|
||||||
|
|
||||||
|
CSI2DC is a hardware block that receives incoming data from either from an
|
||||||
|
IDI interface or from a parallel bus interface.
|
||||||
|
It filters IDI packets based on their data type and virtual channel
|
||||||
|
identifier, then converts the byte stream to a pixel stream into a cross
|
||||||
|
clock domain towards a parallel interface that can be read by a sensor
|
||||||
|
controller.
|
||||||
|
IDI interface is Synopsys proprietary.
|
||||||
|
CSI2DC can act a simple bypass bridge if the incoming data is coming from
|
||||||
|
a parallel interface.
|
||||||
|
|
||||||
|
CSI2DC provides two pipes, one video pipe and one data pipe. Video pipe
|
||||||
|
is connected at the output to a sensor controller and the data pipe is
|
||||||
|
accessible as a DMA slave port to a DMA controller.
|
||||||
|
|
||||||
|
CSI2DC supports a single 'port' node as a sink port with either Synopsys
|
||||||
|
32-bit IDI interface or a parallel interface.
|
||||||
|
|
||||||
|
CSI2DC supports one 'port' node as source port with parallel interface.
|
||||||
|
This is called video pipe.
|
||||||
|
This port has an 'endpoint' that can be connected to a sink port of another
|
||||||
|
controller (next in pipeline).
|
||||||
|
|
||||||
|
CSI2DC also supports direct access to the data through AHB, via DMA channel,
|
||||||
|
called data pipe.
|
||||||
|
For data pipe to be available, a dma controller and a dma channel must be
|
||||||
|
referenced.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: microchip,sama7g5-csi2dc
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
minItems: 2
|
||||||
|
maxItems: 2
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
description:
|
||||||
|
CSI2DC must have two clocks to function correctly. One clock is the
|
||||||
|
peripheral clock for the inside functionality of the hardware block.
|
||||||
|
This is named 'pclk'. The second clock must be the cross domain clock,
|
||||||
|
in which CSI2DC will perform clock crossing. This clock must be fed
|
||||||
|
by the next controller in pipeline, which usually is a sensor controller.
|
||||||
|
Normally this clock should be given by this sensor controller who
|
||||||
|
is also a clock source. This clock is named 'scck', sensor controller clock.
|
||||||
|
items:
|
||||||
|
- const: pclk
|
||||||
|
- const: scck
|
||||||
|
|
||||||
|
dmas:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
dma-names:
|
||||||
|
const: rx
|
||||||
|
|
||||||
|
ports:
|
||||||
|
$ref: /schemas/graph.yaml#/properties/ports
|
||||||
|
|
||||||
|
properties:
|
||||||
|
port@0:
|
||||||
|
$ref: /schemas/graph.yaml#/$defs/port-base
|
||||||
|
description:
|
||||||
|
Input port node, single endpoint describing the input port.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
endpoint:
|
||||||
|
$ref: video-interfaces.yaml#
|
||||||
|
unevaluatedProperties: false
|
||||||
|
description: Endpoint connected to input device
|
||||||
|
|
||||||
|
properties:
|
||||||
|
bus-type:
|
||||||
|
enum: [4, 5, 6]
|
||||||
|
default: 4
|
||||||
|
|
||||||
|
bus-width:
|
||||||
|
enum: [8, 9, 10, 11, 12, 13, 14]
|
||||||
|
default: 14
|
||||||
|
|
||||||
|
clock-noncontinuous:
|
||||||
|
type: boolean
|
||||||
|
description:
|
||||||
|
Presence of this boolean property decides whether clock is
|
||||||
|
continuous or noncontinuous.
|
||||||
|
|
||||||
|
remote-endpoint: true
|
||||||
|
|
||||||
|
port@1:
|
||||||
|
$ref: /schemas/graph.yaml#/$defs/port-base
|
||||||
|
description:
|
||||||
|
Output port node, single endpoint describing the output port.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
endpoint:
|
||||||
|
unevaluatedProperties: false
|
||||||
|
$ref: video-interfaces.yaml#
|
||||||
|
description: Endpoint connected to output device
|
||||||
|
|
||||||
|
properties:
|
||||||
|
bus-type:
|
||||||
|
enum: [5, 6]
|
||||||
|
default: 5
|
||||||
|
|
||||||
|
bus-width:
|
||||||
|
enum: [8, 9, 10, 11, 12, 13, 14]
|
||||||
|
default: 14
|
||||||
|
|
||||||
|
remote-endpoint: true
|
||||||
|
|
||||||
|
required:
|
||||||
|
- port@0
|
||||||
|
- port@1
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- ports
|
||||||
|
|
||||||
|
examples:
|
||||||
|
# Example for connecting to a parallel sensor controller block (video pipe)
|
||||||
|
# and the input is received from Synopsys IDI interface
|
||||||
|
- |
|
||||||
|
csi2dc@e1404000 {
|
||||||
|
compatible = "microchip,sama7g5-csi2dc";
|
||||||
|
reg = <0xe1404000 0x500>;
|
||||||
|
clocks = <&pclk>, <&scck>;
|
||||||
|
clock-names = "pclk", "scck";
|
||||||
|
|
||||||
|
ports {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
port@0 {
|
||||||
|
reg = <0>; /* must be 0, first child port */
|
||||||
|
csi2dc_in: endpoint { /* input from IDI interface */
|
||||||
|
bus-type = <4>; /* MIPI CSI2 D-PHY */
|
||||||
|
remote-endpoint = <&csi2host_out>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
port@1 {
|
||||||
|
reg = <1>; /* must be 1, second child port */
|
||||||
|
csi2dc_out: endpoint {
|
||||||
|
remote-endpoint = <&xisc_in>; /* output to sensor controller */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Example for connecting to a DMA master as an AHB slave
|
||||||
|
# and the input is received from Synopsys IDI interface
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/dma/at91.h>
|
||||||
|
csi2dc@e1404000 {
|
||||||
|
compatible = "microchip,sama7g5-csi2dc";
|
||||||
|
reg = <0xe1404000 0x500>;
|
||||||
|
clocks = <&pclk>, <&scck>;
|
||||||
|
clock-names = "pclk", "scck";
|
||||||
|
dmas = <&dma0 AT91_XDMAC_DT_PERID(34)>;
|
||||||
|
dma-names = "rx";
|
||||||
|
|
||||||
|
ports {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
port@0 {
|
||||||
|
reg = <0>; /* must be 0, first child port */
|
||||||
|
csi2dc_input: endpoint { /* input from IDI interface */
|
||||||
|
remote-endpoint = <&csi2host_out>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
port@1 {
|
||||||
|
reg = <1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
...
|
|
@ -1,7 +1,7 @@
|
||||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: http://devicetree.org/schemas/media/nxp,imx7-mipi-csi2.yaml#
|
$id: http://devicetree.org/schemas/media/nxp,imx-mipi-csi2.yaml#
|
||||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
title: NXP i.MX7 and i.MX8 MIPI CSI-2 receiver
|
title: NXP i.MX7 and i.MX8 MIPI CSI-2 receiver
|
|
@ -17,6 +17,7 @@ properties:
|
||||||
compatible:
|
compatible:
|
||||||
oneOf:
|
oneOf:
|
||||||
- enum:
|
- enum:
|
||||||
|
- fsl,imx8mq-csi
|
||||||
- fsl,imx7-csi
|
- fsl,imx7-csi
|
||||||
- fsl,imx6ul-csi
|
- fsl,imx6ul-csi
|
||||||
- items:
|
- items:
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
$id: "http://devicetree.org/schemas/media/nxp,imx8mq-vpu.yaml#"
|
$id: "http://devicetree.org/schemas/media/nxp,imx8mq-vpu.yaml#"
|
||||||
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
||||||
|
|
||||||
title: Hantro G1/G2 VPU codecs implemented on i.MX8MQ SoCs
|
title: Hantro G1/G2 VPU codecs implemented on i.MX8M SoCs
|
||||||
|
|
||||||
maintainers:
|
maintainers:
|
||||||
- Philipp Zabel <p.zabel@pengutronix.de>
|
- Philipp Zabel <p.zabel@pengutronix.de>
|
||||||
|
@ -15,33 +15,21 @@ description:
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
compatible:
|
compatible:
|
||||||
const: nxp,imx8mq-vpu
|
oneOf:
|
||||||
|
- const: nxp,imx8mq-vpu
|
||||||
|
deprecated: true
|
||||||
|
- const: nxp,imx8mq-vpu-g1
|
||||||
|
- const: nxp,imx8mq-vpu-g2
|
||||||
|
- const: nxp,imx8mm-vpu-g1
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
maxItems: 3
|
maxItems: 1
|
||||||
|
|
||||||
reg-names:
|
|
||||||
items:
|
|
||||||
- const: g1
|
|
||||||
- const: g2
|
|
||||||
- const: ctrl
|
|
||||||
|
|
||||||
interrupts:
|
interrupts:
|
||||||
maxItems: 2
|
maxItems: 1
|
||||||
|
|
||||||
interrupt-names:
|
|
||||||
items:
|
|
||||||
- const: g1
|
|
||||||
- const: g2
|
|
||||||
|
|
||||||
clocks:
|
clocks:
|
||||||
maxItems: 3
|
maxItems: 1
|
||||||
|
|
||||||
clock-names:
|
|
||||||
items:
|
|
||||||
- const: g1
|
|
||||||
- const: g2
|
|
||||||
- const: bus
|
|
||||||
|
|
||||||
power-domains:
|
power-domains:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
@ -49,31 +37,33 @@ properties:
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
- reg
|
- reg
|
||||||
- reg-names
|
|
||||||
- interrupts
|
- interrupts
|
||||||
- interrupt-names
|
|
||||||
- clocks
|
- clocks
|
||||||
- clock-names
|
|
||||||
|
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
|
|
||||||
examples:
|
examples:
|
||||||
- |
|
- |
|
||||||
#include <dt-bindings/clock/imx8mq-clock.h>
|
#include <dt-bindings/clock/imx8mq-clock.h>
|
||||||
|
#include <dt-bindings/power/imx8mq-power.h>
|
||||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||||
|
|
||||||
vpu: video-codec@38300000 {
|
vpu_g1: video-codec@38300000 {
|
||||||
compatible = "nxp,imx8mq-vpu";
|
compatible = "nxp,imx8mq-vpu-g1";
|
||||||
reg = <0x38300000 0x10000>,
|
reg = <0x38300000 0x10000>;
|
||||||
<0x38310000 0x10000>,
|
interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
<0x38320000 0x10000>;
|
clocks = <&clk IMX8MQ_CLK_VPU_G1_ROOT>;
|
||||||
reg-names = "g1", "g2", "ctrl";
|
power-domains = <&vpu_blk_ctrl IMX8MQ_VPUBLK_PD_G1>;
|
||||||
interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
|
};
|
||||||
<GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
|
- |
|
||||||
interrupt-names = "g1", "g2";
|
#include <dt-bindings/clock/imx8mq-clock.h>
|
||||||
clocks = <&clk IMX8MQ_CLK_VPU_G1_ROOT>,
|
#include <dt-bindings/power/imx8mq-power.h>
|
||||||
<&clk IMX8MQ_CLK_VPU_G2_ROOT>,
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||||
<&clk IMX8MQ_CLK_VPU_DEC_ROOT>;
|
|
||||||
clock-names = "g1", "g2", "bus";
|
vpu_g2: video-codec@38300000 {
|
||||||
power-domains = <&pgc_vpu>;
|
compatible = "nxp,imx8mq-vpu-g2";
|
||||||
|
reg = <0x38310000 0x10000>;
|
||||||
|
interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&clk IMX8MQ_CLK_VPU_G2_ROOT>;
|
||||||
|
power-domains = <&vpu_blk_ctrl IMX8MQ_VPUBLK_PD_G2>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -83,10 +83,6 @@ properties:
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
clock-lanes:
|
|
||||||
items:
|
|
||||||
- const: 1
|
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
description:
|
description:
|
||||||
An array of physical data lanes indexes.
|
An array of physical data lanes indexes.
|
||||||
|
@ -99,7 +95,6 @@ properties:
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
port@1:
|
port@1:
|
||||||
|
@ -114,16 +109,11 @@ properties:
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
clock-lanes:
|
|
||||||
items:
|
|
||||||
- const: 1
|
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
|
|
|
@ -105,10 +105,6 @@ properties:
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
clock-lanes:
|
|
||||||
items:
|
|
||||||
- const: 7
|
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
description:
|
description:
|
||||||
An array of physical data lanes indexes.
|
An array of physical data lanes indexes.
|
||||||
|
@ -121,7 +117,6 @@ properties:
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
port@1:
|
port@1:
|
||||||
|
@ -136,16 +131,11 @@ properties:
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
clock-lanes:
|
|
||||||
items:
|
|
||||||
- const: 7
|
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
port@2:
|
port@2:
|
||||||
|
@ -160,16 +150,11 @@ properties:
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
clock-lanes:
|
|
||||||
items:
|
|
||||||
- const: 7
|
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
port@3:
|
port@3:
|
||||||
|
@ -184,16 +169,11 @@ properties:
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
clock-lanes:
|
|
||||||
items:
|
|
||||||
- const: 7
|
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
|
|
|
@ -111,16 +111,11 @@ properties:
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
clock-lanes:
|
|
||||||
items:
|
|
||||||
- const: 7
|
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
port@1:
|
port@1:
|
||||||
|
@ -135,16 +130,11 @@ properties:
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
clock-lanes:
|
|
||||||
items:
|
|
||||||
- const: 7
|
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
port@2:
|
port@2:
|
||||||
|
@ -159,16 +149,11 @@ properties:
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
clock-lanes:
|
|
||||||
items:
|
|
||||||
- const: 7
|
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
port@3:
|
port@3:
|
||||||
|
@ -183,16 +168,11 @@ properties:
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
clock-lanes:
|
|
||||||
items:
|
|
||||||
- const: 7
|
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
|
|
|
@ -105,15 +105,11 @@ properties:
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
clock-lanes:
|
|
||||||
maxItems: 1
|
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
port@1:
|
port@1:
|
||||||
|
@ -128,16 +124,11 @@ properties:
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
clock-lanes:
|
|
||||||
items:
|
|
||||||
- const: 7
|
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
port@2:
|
port@2:
|
||||||
|
@ -152,15 +143,11 @@ properties:
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
clock-lanes:
|
|
||||||
maxItems: 1
|
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
port@3:
|
port@3:
|
||||||
|
@ -175,15 +162,11 @@ properties:
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
clock-lanes:
|
|
||||||
maxItems: 1
|
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
|
@ -203,9 +186,13 @@ properties:
|
||||||
- const: vfe1
|
- const: vfe1
|
||||||
- const: vfe_lite
|
- const: vfe_lite
|
||||||
|
|
||||||
vdda-supply:
|
vdda-phy-supply:
|
||||||
description:
|
description:
|
||||||
Definition of the regulator used as analog power supply.
|
Phandle to a regulator supply to PHY core block.
|
||||||
|
|
||||||
|
vdda-pll-supply:
|
||||||
|
description:
|
||||||
|
Phandle to 1.8V regulator supply to PHY refclk pll block.
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-names
|
- clock-names
|
||||||
|
@ -217,7 +204,8 @@ required:
|
||||||
- power-domains
|
- power-domains
|
||||||
- reg
|
- reg
|
||||||
- reg-names
|
- reg-names
|
||||||
- vdda-supply
|
- vdda-phy-supply
|
||||||
|
- vdda-pll-supply
|
||||||
|
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
|
|
||||||
|
@ -361,7 +349,8 @@ examples:
|
||||||
"vfe1",
|
"vfe1",
|
||||||
"vfe_lite";
|
"vfe_lite";
|
||||||
|
|
||||||
vdda-supply = <®_2v8>;
|
vdda-phy-supply = <&vreg_l1a_0p875>;
|
||||||
|
vdda-pll-supply = <&vreg_l26a_1p2>;
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
|
|
@ -0,0 +1,463 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||||
|
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: "http://devicetree.org/schemas/media/qcom,sm8250-camss.yaml#"
|
||||||
|
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
||||||
|
|
||||||
|
title: Qualcomm CAMSS ISP
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Robert Foss <robert.foss@linaro.org>
|
||||||
|
|
||||||
|
description: |
|
||||||
|
The CAMSS IP is a CSI decoder and ISP present on Qualcomm platforms.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: qcom,sm8250-camss
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
minItems: 37
|
||||||
|
maxItems: 37
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: cam_ahb_clk
|
||||||
|
- const: cam_hf_axi
|
||||||
|
- const: cam_sf_axi
|
||||||
|
- const: camnoc_axi
|
||||||
|
- const: camnoc_axi_src
|
||||||
|
- const: core_ahb
|
||||||
|
- const: cpas_ahb
|
||||||
|
- const: csiphy0
|
||||||
|
- const: csiphy0_timer
|
||||||
|
- const: csiphy1
|
||||||
|
- const: csiphy1_timer
|
||||||
|
- const: csiphy2
|
||||||
|
- const: csiphy2_timer
|
||||||
|
- const: csiphy3
|
||||||
|
- const: csiphy3_timer
|
||||||
|
- const: csiphy4
|
||||||
|
- const: csiphy4_timer
|
||||||
|
- const: csiphy5
|
||||||
|
- const: csiphy5_timer
|
||||||
|
- const: slow_ahb_src
|
||||||
|
- const: vfe0_ahb
|
||||||
|
- const: vfe0_axi
|
||||||
|
- const: vfe0
|
||||||
|
- const: vfe0_cphy_rx
|
||||||
|
- const: vfe0_csid
|
||||||
|
- const: vfe0_areg
|
||||||
|
- const: vfe1_ahb
|
||||||
|
- const: vfe1_axi
|
||||||
|
- const: vfe1
|
||||||
|
- const: vfe1_cphy_rx
|
||||||
|
- const: vfe1_csid
|
||||||
|
- const: vfe1_areg
|
||||||
|
- const: vfe_lite_ahb
|
||||||
|
- const: vfe_lite_axi
|
||||||
|
- const: vfe_lite
|
||||||
|
- const: vfe_lite_cphy_rx
|
||||||
|
- const: vfe_lite_csid
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
minItems: 14
|
||||||
|
maxItems: 14
|
||||||
|
|
||||||
|
interrupt-names:
|
||||||
|
items:
|
||||||
|
- const: csiphy0
|
||||||
|
- const: csiphy1
|
||||||
|
- const: csiphy2
|
||||||
|
- const: csiphy3
|
||||||
|
- const: csiphy4
|
||||||
|
- const: csiphy5
|
||||||
|
- const: csid0
|
||||||
|
- const: csid1
|
||||||
|
- const: csid2
|
||||||
|
- const: csid3
|
||||||
|
- const: vfe0
|
||||||
|
- const: vfe1
|
||||||
|
- const: vfe_lite0
|
||||||
|
- const: vfe_lite1
|
||||||
|
|
||||||
|
iommus:
|
||||||
|
minItems: 8
|
||||||
|
maxItems: 8
|
||||||
|
|
||||||
|
interconnects:
|
||||||
|
minItems: 4
|
||||||
|
maxItems: 4
|
||||||
|
|
||||||
|
interconnect-names:
|
||||||
|
items:
|
||||||
|
- const: cam_ahb
|
||||||
|
- const: cam_hf_0_mnoc
|
||||||
|
- const: cam_sf_0_mnoc
|
||||||
|
- const: cam_sf_icp_mnoc
|
||||||
|
|
||||||
|
power-domains:
|
||||||
|
items:
|
||||||
|
- description: IFE0 GDSC - Image Front End, Global Distributed Switch Controller.
|
||||||
|
- description: IFE1 GDSC - Image Front End, Global Distributed Switch Controller.
|
||||||
|
- description: Titan GDSC - Titan ISP Block, Global Distributed Switch Controller.
|
||||||
|
|
||||||
|
ports:
|
||||||
|
$ref: /schemas/graph.yaml#/properties/ports
|
||||||
|
|
||||||
|
description:
|
||||||
|
CSI input ports.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
port@0:
|
||||||
|
$ref: /schemas/graph.yaml#/$defs/port-base
|
||||||
|
unevaluatedProperties: false
|
||||||
|
description:
|
||||||
|
Input port for receiving CSI data.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
endpoint:
|
||||||
|
$ref: video-interfaces.yaml#
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
properties:
|
||||||
|
clock-lanes:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
data-lanes:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 4
|
||||||
|
|
||||||
|
required:
|
||||||
|
- clock-lanes
|
||||||
|
- data-lanes
|
||||||
|
|
||||||
|
port@1:
|
||||||
|
$ref: /schemas/graph.yaml#/$defs/port-base
|
||||||
|
unevaluatedProperties: false
|
||||||
|
description:
|
||||||
|
Input port for receiving CSI data.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
endpoint:
|
||||||
|
$ref: video-interfaces.yaml#
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
properties:
|
||||||
|
clock-lanes:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
data-lanes:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 4
|
||||||
|
|
||||||
|
required:
|
||||||
|
- clock-lanes
|
||||||
|
- data-lanes
|
||||||
|
|
||||||
|
port@2:
|
||||||
|
$ref: /schemas/graph.yaml#/$defs/port-base
|
||||||
|
unevaluatedProperties: false
|
||||||
|
description:
|
||||||
|
Input port for receiving CSI data.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
endpoint:
|
||||||
|
$ref: video-interfaces.yaml#
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
properties:
|
||||||
|
clock-lanes:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
data-lanes:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 4
|
||||||
|
|
||||||
|
required:
|
||||||
|
- clock-lanes
|
||||||
|
- data-lanes
|
||||||
|
|
||||||
|
port@3:
|
||||||
|
$ref: /schemas/graph.yaml#/$defs/port-base
|
||||||
|
unevaluatedProperties: false
|
||||||
|
description:
|
||||||
|
Input port for receiving CSI data.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
endpoint:
|
||||||
|
$ref: video-interfaces.yaml#
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
properties:
|
||||||
|
clock-lanes:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
data-lanes:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 4
|
||||||
|
|
||||||
|
required:
|
||||||
|
- clock-lanes
|
||||||
|
- data-lanes
|
||||||
|
|
||||||
|
port@4:
|
||||||
|
$ref: /schemas/graph.yaml#/$defs/port-base
|
||||||
|
unevaluatedProperties: false
|
||||||
|
description:
|
||||||
|
Input port for receiving CSI data.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
endpoint:
|
||||||
|
$ref: video-interfaces.yaml#
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
properties:
|
||||||
|
clock-lanes:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
data-lanes:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 4
|
||||||
|
|
||||||
|
required:
|
||||||
|
- clock-lanes
|
||||||
|
- data-lanes
|
||||||
|
|
||||||
|
port@5:
|
||||||
|
$ref: /schemas/graph.yaml#/$defs/port-base
|
||||||
|
unevaluatedProperties: false
|
||||||
|
description:
|
||||||
|
Input port for receiving CSI data.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
endpoint:
|
||||||
|
$ref: video-interfaces.yaml#
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
properties:
|
||||||
|
clock-lanes:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
data-lanes:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 4
|
||||||
|
|
||||||
|
required:
|
||||||
|
- clock-lanes
|
||||||
|
- data-lanes
|
||||||
|
|
||||||
|
reg:
|
||||||
|
minItems: 10
|
||||||
|
maxItems: 10
|
||||||
|
|
||||||
|
reg-names:
|
||||||
|
items:
|
||||||
|
- const: csiphy0
|
||||||
|
- const: csiphy1
|
||||||
|
- const: csiphy2
|
||||||
|
- const: csiphy3
|
||||||
|
- const: csiphy4
|
||||||
|
- const: csiphy5
|
||||||
|
- const: vfe0
|
||||||
|
- const: vfe1
|
||||||
|
- const: vfe_lite0
|
||||||
|
- const: vfe_lite1
|
||||||
|
|
||||||
|
vdda-phy-supply:
|
||||||
|
description:
|
||||||
|
Phandle to a regulator supply to PHY core block.
|
||||||
|
|
||||||
|
vdda-pll-supply:
|
||||||
|
description:
|
||||||
|
Phandle to 1.8V regulator supply to PHY refclk pll block.
|
||||||
|
|
||||||
|
required:
|
||||||
|
- clock-names
|
||||||
|
- clocks
|
||||||
|
- compatible
|
||||||
|
- interconnects
|
||||||
|
- interconnect-names
|
||||||
|
- interrupts
|
||||||
|
- interrupt-names
|
||||||
|
- iommus
|
||||||
|
- power-domains
|
||||||
|
- reg
|
||||||
|
- reg-names
|
||||||
|
- vdda-phy-supply
|
||||||
|
- vdda-pll-supply
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||||
|
#include <dt-bindings/clock/qcom,camcc-sm8250.h>
|
||||||
|
#include <dt-bindings/interconnect/qcom,sm8250.h>
|
||||||
|
#include <dt-bindings/clock/qcom,gcc-sm8250.h>
|
||||||
|
#include <dt-bindings/power/qcom-rpmpd.h>
|
||||||
|
|
||||||
|
soc {
|
||||||
|
#address-cells = <2>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
|
||||||
|
camss: camss@ac6a000 {
|
||||||
|
compatible = "qcom,sm8250-camss";
|
||||||
|
|
||||||
|
reg = <0 0xac6a000 0 0x2000>,
|
||||||
|
<0 0xac6c000 0 0x2000>,
|
||||||
|
<0 0xac6e000 0 0x1000>,
|
||||||
|
<0 0xac70000 0 0x1000>,
|
||||||
|
<0 0xac72000 0 0x1000>,
|
||||||
|
<0 0xac74000 0 0x1000>,
|
||||||
|
<0 0xacb4000 0 0xd000>,
|
||||||
|
<0 0xacc3000 0 0xd000>,
|
||||||
|
<0 0xacd9000 0 0x2200>,
|
||||||
|
<0 0xacdb200 0 0x2200>;
|
||||||
|
reg-names = "csiphy0",
|
||||||
|
"csiphy1",
|
||||||
|
"csiphy2",
|
||||||
|
"csiphy3",
|
||||||
|
"csiphy4",
|
||||||
|
"csiphy5",
|
||||||
|
"vfe0",
|
||||||
|
"vfe1",
|
||||||
|
"vfe_lite0",
|
||||||
|
"vfe_lite1";
|
||||||
|
|
||||||
|
vdda-phy-supply = <&vreg_l5a_0p88>;
|
||||||
|
vdda-pll-supply = <&vreg_l9a_1p2>;
|
||||||
|
|
||||||
|
interrupts = <GIC_SPI 477 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 478 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 479 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 448 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 464 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 466 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 468 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 359 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 465 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 467 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 469 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 360 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
interrupt-names = "csiphy0",
|
||||||
|
"csiphy1",
|
||||||
|
"csiphy2",
|
||||||
|
"csiphy3",
|
||||||
|
"csiphy4",
|
||||||
|
"csiphy5",
|
||||||
|
"csid0",
|
||||||
|
"csid1",
|
||||||
|
"csid2",
|
||||||
|
"csid3",
|
||||||
|
"vfe0",
|
||||||
|
"vfe1",
|
||||||
|
"vfe_lite0",
|
||||||
|
"vfe_lite1";
|
||||||
|
|
||||||
|
power-domains = <&camcc IFE_0_GDSC>,
|
||||||
|
<&camcc IFE_1_GDSC>,
|
||||||
|
<&camcc TITAN_TOP_GDSC>;
|
||||||
|
|
||||||
|
clocks = <&gcc GCC_CAMERA_AHB_CLK>,
|
||||||
|
<&gcc GCC_CAMERA_HF_AXI_CLK>,
|
||||||
|
<&gcc GCC_CAMERA_SF_AXI_CLK>,
|
||||||
|
<&camcc CAM_CC_CAMNOC_AXI_CLK>,
|
||||||
|
<&camcc CAM_CC_CAMNOC_AXI_CLK_SRC>,
|
||||||
|
<&camcc CAM_CC_CORE_AHB_CLK>,
|
||||||
|
<&camcc CAM_CC_CPAS_AHB_CLK>,
|
||||||
|
<&camcc CAM_CC_CSIPHY0_CLK>,
|
||||||
|
<&camcc CAM_CC_CSI0PHYTIMER_CLK>,
|
||||||
|
<&camcc CAM_CC_CSIPHY1_CLK>,
|
||||||
|
<&camcc CAM_CC_CSI1PHYTIMER_CLK>,
|
||||||
|
<&camcc CAM_CC_CSIPHY2_CLK>,
|
||||||
|
<&camcc CAM_CC_CSI2PHYTIMER_CLK>,
|
||||||
|
<&camcc CAM_CC_CSIPHY3_CLK>,
|
||||||
|
<&camcc CAM_CC_CSI3PHYTIMER_CLK>,
|
||||||
|
<&camcc CAM_CC_CSIPHY4_CLK>,
|
||||||
|
<&camcc CAM_CC_CSI4PHYTIMER_CLK>,
|
||||||
|
<&camcc CAM_CC_CSIPHY5_CLK>,
|
||||||
|
<&camcc CAM_CC_CSI5PHYTIMER_CLK>,
|
||||||
|
<&camcc CAM_CC_SLOW_AHB_CLK_SRC>,
|
||||||
|
<&camcc CAM_CC_IFE_0_AHB_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_0_AXI_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_0_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_0_CPHY_RX_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_0_CSID_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_0_AREG_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_1_AHB_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_1_AXI_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_1_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_1_CPHY_RX_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_1_CSID_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_1_AREG_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_LITE_AHB_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_LITE_AXI_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_LITE_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_LITE_CPHY_RX_CLK>,
|
||||||
|
<&camcc CAM_CC_IFE_LITE_CSID_CLK>;
|
||||||
|
clock-names = "cam_ahb_clk",
|
||||||
|
"cam_hf_axi",
|
||||||
|
"cam_sf_axi",
|
||||||
|
"camnoc_axi",
|
||||||
|
"camnoc_axi_src",
|
||||||
|
"core_ahb",
|
||||||
|
"cpas_ahb",
|
||||||
|
"csiphy0",
|
||||||
|
"csiphy0_timer",
|
||||||
|
"csiphy1",
|
||||||
|
"csiphy1_timer",
|
||||||
|
"csiphy2",
|
||||||
|
"csiphy2_timer",
|
||||||
|
"csiphy3",
|
||||||
|
"csiphy3_timer",
|
||||||
|
"csiphy4",
|
||||||
|
"csiphy4_timer",
|
||||||
|
"csiphy5",
|
||||||
|
"csiphy5_timer",
|
||||||
|
"slow_ahb_src",
|
||||||
|
"vfe0_ahb",
|
||||||
|
"vfe0_axi",
|
||||||
|
"vfe0",
|
||||||
|
"vfe0_cphy_rx",
|
||||||
|
"vfe0_csid",
|
||||||
|
"vfe0_areg",
|
||||||
|
"vfe1_ahb",
|
||||||
|
"vfe1_axi",
|
||||||
|
"vfe1",
|
||||||
|
"vfe1_cphy_rx",
|
||||||
|
"vfe1_csid",
|
||||||
|
"vfe1_areg",
|
||||||
|
"vfe_lite_ahb",
|
||||||
|
"vfe_lite_axi",
|
||||||
|
"vfe_lite",
|
||||||
|
"vfe_lite_cphy_rx",
|
||||||
|
"vfe_lite_csid";
|
||||||
|
|
||||||
|
iommus = <&apps_smmu 0x800 0x400>,
|
||||||
|
<&apps_smmu 0x801 0x400>,
|
||||||
|
<&apps_smmu 0x840 0x400>,
|
||||||
|
<&apps_smmu 0x841 0x400>,
|
||||||
|
<&apps_smmu 0xC00 0x400>,
|
||||||
|
<&apps_smmu 0xC01 0x400>,
|
||||||
|
<&apps_smmu 0xC40 0x400>,
|
||||||
|
<&apps_smmu 0xC41 0x400>;
|
||||||
|
|
||||||
|
interconnects = <&gem_noc MASTER_AMPSS_M0 &config_noc SLAVE_CAMERA_CFG>,
|
||||||
|
<&mmss_noc MASTER_CAMNOC_HF &mc_virt SLAVE_EBI_CH0>,
|
||||||
|
<&mmss_noc MASTER_CAMNOC_SF &mc_virt SLAVE_EBI_CH0>,
|
||||||
|
<&mmss_noc MASTER_CAMNOC_ICP &mc_virt SLAVE_EBI_CH0>;
|
||||||
|
interconnect-names = "cam_ahb",
|
||||||
|
"cam_hf_0_mnoc",
|
||||||
|
"cam_sf_0_mnoc",
|
||||||
|
"cam_sf_icp_mnoc";
|
||||||
|
|
||||||
|
ports {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -67,7 +67,10 @@ properties:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
|
||||||
data-lanes:
|
data-lanes:
|
||||||
maxItems: 1
|
minItems: 1
|
||||||
|
maxItems: 4
|
||||||
|
items:
|
||||||
|
maximum: 4
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- clock-lanes
|
- clock-lanes
|
||||||
|
|
|
@ -7,22 +7,22 @@ File partitioning
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
V4L2 display device driver
|
V4L2 display device driver
|
||||||
drivers/media/platform/davinci/vpbe_display.c
|
drivers/media/platform/ti/davinci/vpbe_display.c
|
||||||
drivers/media/platform/davinci/vpbe_display.h
|
drivers/media/platform/ti/davinci/vpbe_display.h
|
||||||
|
|
||||||
VPBE display controller
|
VPBE display controller
|
||||||
drivers/media/platform/davinci/vpbe.c
|
drivers/media/platform/ti/davinci/vpbe.c
|
||||||
drivers/media/platform/davinci/vpbe.h
|
drivers/media/platform/ti/davinci/vpbe.h
|
||||||
|
|
||||||
VPBE venc sub device driver
|
VPBE venc sub device driver
|
||||||
drivers/media/platform/davinci/vpbe_venc.c
|
drivers/media/platform/ti/davinci/vpbe_venc.c
|
||||||
drivers/media/platform/davinci/vpbe_venc.h
|
drivers/media/platform/ti/davinci/vpbe_venc.h
|
||||||
drivers/media/platform/davinci/vpbe_venc_regs.h
|
drivers/media/platform/ti/davinci/vpbe_venc_regs.h
|
||||||
|
|
||||||
VPBE osd driver
|
VPBE osd driver
|
||||||
drivers/media/platform/davinci/vpbe_osd.c
|
drivers/media/platform/ti/davinci/vpbe_osd.c
|
||||||
drivers/media/platform/davinci/vpbe_osd.h
|
drivers/media/platform/ti/davinci/vpbe_osd.h
|
||||||
drivers/media/platform/davinci/vpbe_osd_regs.h
|
drivers/media/platform/ti/davinci/vpbe_osd_regs.h
|
||||||
|
|
||||||
To be done
|
To be done
|
||||||
----------
|
----------
|
||||||
|
|
|
@ -12,22 +12,22 @@ Files partitioning
|
||||||
|
|
||||||
- media device driver
|
- media device driver
|
||||||
|
|
||||||
drivers/media/platform/exynos4-is/media-dev.[ch]
|
drivers/media/platform/samsung/exynos4-is/media-dev.[ch]
|
||||||
|
|
||||||
- camera capture video device driver
|
- camera capture video device driver
|
||||||
|
|
||||||
drivers/media/platform/exynos4-is/fimc-capture.c
|
drivers/media/platform/samsung/exynos4-is/fimc-capture.c
|
||||||
|
|
||||||
- MIPI-CSI2 receiver subdev
|
- MIPI-CSI2 receiver subdev
|
||||||
|
|
||||||
drivers/media/platform/exynos4-is/mipi-csis.[ch]
|
drivers/media/platform/samsung/exynos4-is/mipi-csis.[ch]
|
||||||
|
|
||||||
- video post-processor (mem-to-mem)
|
- video post-processor (mem-to-mem)
|
||||||
|
|
||||||
drivers/media/platform/exynos4-is/fimc-core.c
|
drivers/media/platform/samsung/exynos4-is/fimc-core.c
|
||||||
|
|
||||||
- common files
|
- common files
|
||||||
|
|
||||||
drivers/media/platform/exynos4-is/fimc-core.h
|
drivers/media/platform/samsung/exynos4-is/fimc-core.h
|
||||||
drivers/media/platform/exynos4-is/fimc-reg.h
|
drivers/media/platform/samsung/exynos4-is/fimc-reg.h
|
||||||
drivers/media/platform/exynos4-is/regs-fimc.h
|
drivers/media/platform/samsung/exynos4-is/regs-fimc.h
|
||||||
|
|
|
@ -167,7 +167,7 @@ The first event type in the class is reserved for future use, so the first
|
||||||
available event type is 'class base + 1'.
|
available event type is 'class base + 1'.
|
||||||
|
|
||||||
An example on how the V4L2 events may be used can be found in the OMAP
|
An example on how the V4L2 events may be used can be found in the OMAP
|
||||||
3 ISP driver (``drivers/media/platform/omap3isp``).
|
3 ISP driver (``drivers/media/platform/ti/omap3isp``).
|
||||||
|
|
||||||
A subdev can directly send an event to the :c:type:`v4l2_device` notify
|
A subdev can directly send an event to the :c:type:`v4l2_device` notify
|
||||||
function with ``V4L2_DEVICE_NOTIFY_EVENT``. This allows the bridge to map
|
function with ``V4L2_DEVICE_NOTIFY_EVENT``. This allows the bridge to map
|
||||||
|
|
|
@ -11,12 +11,14 @@ ignore define LIRC_SPACE
|
||||||
ignore define LIRC_PULSE
|
ignore define LIRC_PULSE
|
||||||
ignore define LIRC_FREQUENCY
|
ignore define LIRC_FREQUENCY
|
||||||
ignore define LIRC_TIMEOUT
|
ignore define LIRC_TIMEOUT
|
||||||
|
ignore define LIRC_OVERFLOW
|
||||||
ignore define LIRC_VALUE
|
ignore define LIRC_VALUE
|
||||||
ignore define LIRC_MODE2
|
ignore define LIRC_MODE2
|
||||||
ignore define LIRC_IS_SPACE
|
ignore define LIRC_IS_SPACE
|
||||||
ignore define LIRC_IS_PULSE
|
ignore define LIRC_IS_PULSE
|
||||||
ignore define LIRC_IS_FREQUENCY
|
ignore define LIRC_IS_FREQUENCY
|
||||||
ignore define LIRC_IS_TIMEOUT
|
ignore define LIRC_IS_TIMEOUT
|
||||||
|
ignore define LIRC_IS_OVERFLOW
|
||||||
|
|
||||||
ignore define LIRC_MODE2SEND
|
ignore define LIRC_MODE2SEND
|
||||||
ignore define LIRC_SEND2MODE
|
ignore define LIRC_SEND2MODE
|
||||||
|
@ -28,7 +30,6 @@ ignore define LIRC_CAN_REC
|
||||||
|
|
||||||
ignore define LIRC_CAN_SEND_MASK
|
ignore define LIRC_CAN_SEND_MASK
|
||||||
ignore define LIRC_CAN_REC_MASK
|
ignore define LIRC_CAN_REC_MASK
|
||||||
ignore define LIRC_CAN_SET_REC_DUTY_CYCLE
|
|
||||||
|
|
||||||
# Obsolete ioctls
|
# Obsolete ioctls
|
||||||
|
|
||||||
|
@ -75,6 +76,7 @@ ignore define PULSE_MASK
|
||||||
ignore define LIRC_MODE2_SPACE
|
ignore define LIRC_MODE2_SPACE
|
||||||
ignore define LIRC_MODE2_PULSE
|
ignore define LIRC_MODE2_PULSE
|
||||||
ignore define LIRC_MODE2_TIMEOUT
|
ignore define LIRC_MODE2_TIMEOUT
|
||||||
|
ignore define LIRC_MODE2_OVERFLOW
|
||||||
|
|
||||||
ignore define LIRC_VALUE_MASK
|
ignore define LIRC_VALUE_MASK
|
||||||
ignore define LIRC_MODE2_MASK
|
ignore define LIRC_MODE2_MASK
|
||||||
|
|
|
@ -103,11 +103,11 @@ on the following table.
|
||||||
|
|
||||||
``LIRC_MODE2_PULSE``
|
``LIRC_MODE2_PULSE``
|
||||||
|
|
||||||
Signifies the presence of IR in microseconds.
|
Signifies the presence of IR in microseconds, also known as *flash*.
|
||||||
|
|
||||||
``LIRC_MODE2_SPACE``
|
``LIRC_MODE2_SPACE``
|
||||||
|
|
||||||
Signifies absence of IR in microseconds.
|
Signifies absence of IR in microseconds, also known as *gap*.
|
||||||
|
|
||||||
``LIRC_MODE2_FREQUENCY``
|
``LIRC_MODE2_FREQUENCY``
|
||||||
|
|
||||||
|
@ -121,6 +121,13 @@ on the following table.
|
||||||
to no IR being detected, this packet will be sent, with the number
|
to no IR being detected, this packet will be sent, with the number
|
||||||
of microseconds with no IR.
|
of microseconds with no IR.
|
||||||
|
|
||||||
|
``LIRC_MODE2_OVERFLOW``
|
||||||
|
|
||||||
|
Signifies that the IR receiver encounter an overflow, and some IR
|
||||||
|
is missing. The IR data after this should be correct again. The
|
||||||
|
actual value is not important, but this is set to 0xffffff by the
|
||||||
|
kernel for compatibility with lircd.
|
||||||
|
|
||||||
.. _lirc-mode-pulse:
|
.. _lirc-mode-pulse:
|
||||||
|
|
||||||
``LIRC_MODE_PULSE``
|
``LIRC_MODE_PULSE``
|
||||||
|
|
|
@ -102,12 +102,6 @@ LIRC features
|
||||||
The driver supports setting the receive carrier frequency using
|
The driver supports setting the receive carrier frequency using
|
||||||
:ref:`ioctl LIRC_SET_REC_CARRIER <LIRC_SET_REC_CARRIER>`.
|
:ref:`ioctl LIRC_SET_REC_CARRIER <LIRC_SET_REC_CARRIER>`.
|
||||||
|
|
||||||
.. _LIRC-CAN-SET-REC-DUTY-CYCLE-RANGE:
|
|
||||||
|
|
||||||
``LIRC_CAN_SET_REC_DUTY_CYCLE_RANGE``
|
|
||||||
|
|
||||||
Unused. Kept just to avoid breaking uAPI.
|
|
||||||
|
|
||||||
.. _LIRC-CAN-SET-REC-CARRIER-RANGE:
|
.. _LIRC-CAN-SET-REC-CARRIER-RANGE:
|
||||||
|
|
||||||
``LIRC_CAN_SET_REC_CARRIER_RANGE``
|
``LIRC_CAN_SET_REC_CARRIER_RANGE``
|
||||||
|
@ -129,12 +123,6 @@ LIRC features
|
||||||
The driver supports
|
The driver supports
|
||||||
:ref:`ioctl LIRC_SET_REC_TIMEOUT <LIRC_SET_REC_TIMEOUT>`.
|
:ref:`ioctl LIRC_SET_REC_TIMEOUT <LIRC_SET_REC_TIMEOUT>`.
|
||||||
|
|
||||||
.. _LIRC-CAN-SET-REC-FILTER:
|
|
||||||
|
|
||||||
``LIRC_CAN_SET_REC_FILTER``
|
|
||||||
|
|
||||||
Unused. Kept just to avoid breaking uAPI.
|
|
||||||
|
|
||||||
.. _LIRC-CAN-MEASURE-CARRIER:
|
.. _LIRC-CAN-MEASURE-CARRIER:
|
||||||
|
|
||||||
``LIRC_CAN_MEASURE_CARRIER``
|
``LIRC_CAN_MEASURE_CARRIER``
|
||||||
|
@ -149,12 +137,6 @@ LIRC features
|
||||||
The driver supports learning mode using
|
The driver supports learning mode using
|
||||||
:ref:`ioctl LIRC_SET_WIDEBAND_RECEIVER <LIRC_SET_WIDEBAND_RECEIVER>`.
|
:ref:`ioctl LIRC_SET_WIDEBAND_RECEIVER <LIRC_SET_WIDEBAND_RECEIVER>`.
|
||||||
|
|
||||||
.. _LIRC-CAN-NOTIFY-DECODE:
|
|
||||||
|
|
||||||
``LIRC_CAN_NOTIFY_DECODE``
|
|
||||||
|
|
||||||
Unused. Kept just to avoid breaking uAPI.
|
|
||||||
|
|
||||||
.. _LIRC-CAN-SEND-RAW:
|
.. _LIRC-CAN-SEND-RAW:
|
||||||
|
|
||||||
``LIRC_CAN_SEND_RAW``
|
``LIRC_CAN_SEND_RAW``
|
||||||
|
|
|
@ -616,6 +616,12 @@ Stateless Codec Control ID
|
||||||
* - ``V4L2_H264_DECODE_PARAM_FLAG_BOTTOM_FIELD``
|
* - ``V4L2_H264_DECODE_PARAM_FLAG_BOTTOM_FIELD``
|
||||||
- 0x00000004
|
- 0x00000004
|
||||||
-
|
-
|
||||||
|
* - ``V4L2_H264_DECODE_PARAM_FLAG_PFRAME``
|
||||||
|
- 0x00000008
|
||||||
|
-
|
||||||
|
* - ``V4L2_H264_DECODE_PARAM_FLAG_BFRAME``
|
||||||
|
- 0x00000010
|
||||||
|
-
|
||||||
|
|
||||||
.. raw:: latex
|
.. raw:: latex
|
||||||
|
|
||||||
|
@ -1692,7 +1698,12 @@ See section '7.3.1 Tx mode semantics' of the :ref:`vp9` specification for more d
|
||||||
* - __u8
|
* - __u8
|
||||||
- ``reference_mode``
|
- ``reference_mode``
|
||||||
- Specifies the type of inter prediction to be used. See
|
- Specifies the type of inter prediction to be used. See
|
||||||
:ref:`Reference Mode<vp9_reference_mode>` for more details.
|
:ref:`Reference Mode<vp9_reference_mode>` for more details. Note that
|
||||||
|
this is derived as part of the compressed header parsing process and
|
||||||
|
for this reason should have been part of
|
||||||
|
:c:type: `v4l2_ctrl_vp9_compressed_hdr` optional control. It is safe to
|
||||||
|
set this value to zero if the driver does not require compressed
|
||||||
|
headers.
|
||||||
* - __u8
|
* - __u8
|
||||||
- ``reserved[7]``
|
- ``reserved[7]``
|
||||||
- Applications and drivers must set this to zero.
|
- Applications and drivers must set this to zero.
|
||||||
|
|
|
@ -3166,11 +3166,11 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
|
||||||
:c:func:`v4l2_timeval_to_ns()` function to convert the struct
|
:c:func:`v4l2_timeval_to_ns()` function to convert the struct
|
||||||
:c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64.
|
:c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64.
|
||||||
* - __u8
|
* - __u8
|
||||||
- ``rps``
|
- ``flags``
|
||||||
- The reference set for the reference frame
|
- Long term flag for the reference frame
|
||||||
(V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_BEFORE,
|
(V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE). The flag is set as
|
||||||
V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_AFTER or
|
described in the ITU HEVC specification chapter "8.3.2 Decoding
|
||||||
V4L2_HEVC_DPB_ENTRY_RPS_LT_CURR)
|
process for reference picture set".
|
||||||
* - __u8
|
* - __u8
|
||||||
- ``field_pic``
|
- ``field_pic``
|
||||||
- Whether the reference is a field picture or a frame.
|
- Whether the reference is a field picture or a frame.
|
||||||
|
@ -3383,15 +3383,15 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
|
||||||
* - __u8
|
* - __u8
|
||||||
- ``poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
|
- ``poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
|
||||||
- PocStCurrBefore as described in section 8.3.2 "Decoding process for reference
|
- PocStCurrBefore as described in section 8.3.2 "Decoding process for reference
|
||||||
picture set.
|
picture set": provides the index of the short term before references in DPB array.
|
||||||
* - __u8
|
* - __u8
|
||||||
- ``poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
|
- ``poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
|
||||||
- PocStCurrAfter as described in section 8.3.2 "Decoding process for reference
|
- PocStCurrAfter as described in section 8.3.2 "Decoding process for reference
|
||||||
picture set.
|
picture set": provides the index of the short term after references in DPB array.
|
||||||
* - __u8
|
* - __u8
|
||||||
- ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
|
- ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
|
||||||
- PocLtCurr as described in section 8.3.2 "Decoding process for reference
|
- PocLtCurr as described in section 8.3.2 "Decoding process for reference
|
||||||
picture set.
|
picture set": provides the index of the long term references in DPB array.
|
||||||
* - __u64
|
* - __u64
|
||||||
- ``flags``
|
- ``flags``
|
||||||
- See :ref:`Decode Parameters Flags <hevc_decode_params_flags>`
|
- See :ref:`Decode Parameters Flags <hevc_decode_params_flags>`
|
||||||
|
|
|
@ -233,19 +233,12 @@ please make a proposal on the linux-media mailing list.
|
||||||
|
|
||||||
- ``V4L2_PIX_FMT_MT21C``
|
- ``V4L2_PIX_FMT_MT21C``
|
||||||
- 'MT21'
|
- 'MT21'
|
||||||
- Compressed two-planar YVU420 format used by Mediatek MT8173.
|
- Compressed two-planar YVU420 format used by Mediatek MT8173, MT8192,
|
||||||
The compression is lossless.
|
MT8195 and more. The compression is lossless. This format have
|
||||||
It is an opaque intermediate format and the MDP hardware must be
|
similitude with ``V4L2_PIX_FMT_MM21`` in term of alignment and tiling.
|
||||||
|
It remains an opaque intermediate format and the MDP hardware must be
|
||||||
used to convert ``V4L2_PIX_FMT_MT21C`` to ``V4L2_PIX_FMT_NV12M``,
|
used to convert ``V4L2_PIX_FMT_MT21C`` to ``V4L2_PIX_FMT_NV12M``,
|
||||||
``V4L2_PIX_FMT_YUV420M`` or ``V4L2_PIX_FMT_YVU420``.
|
``V4L2_PIX_FMT_YUV420M`` or ``V4L2_PIX_FMT_YVU420``.
|
||||||
* .. _V4L2-PIX-FMT-MM21:
|
|
||||||
|
|
||||||
- ``V4L2_PIX_FMT_MM21``
|
|
||||||
- 'MM21'
|
|
||||||
- Non-compressed, tiled two-planar format used by Mediatek MT8183.
|
|
||||||
This is an opaque intermediate format and the MDP3 hardware can be
|
|
||||||
used to convert it to other formats.
|
|
||||||
|
|
||||||
.. raw:: latex
|
.. raw:: latex
|
||||||
|
|
||||||
\normalsize
|
\normalsize
|
||||||
|
|
|
@ -672,8 +672,8 @@ nomenclature that instead use the order of components as seen in a 24- or
|
||||||
- ``V4L2_PIX_FMT_BGR24``
|
- ``V4L2_PIX_FMT_BGR24``
|
||||||
- 'BGR3'
|
- 'BGR3'
|
||||||
|
|
||||||
- G\ :sub:`7-0`
|
|
||||||
- B\ :sub:`7-0`
|
- B\ :sub:`7-0`
|
||||||
|
- G\ :sub:`7-0`
|
||||||
- R\ :sub:`7-0`
|
- R\ :sub:`7-0`
|
||||||
-
|
-
|
||||||
* .. _V4L2-PIX-FMT-RGB24:
|
* .. _V4L2-PIX-FMT-RGB24:
|
||||||
|
|
|
@ -75,8 +75,8 @@ are often referred to as greyscale formats.
|
||||||
- ``V4L2_PIX_FMT_Y10P``
|
- ``V4L2_PIX_FMT_Y10P``
|
||||||
- 'Y10P'
|
- 'Y10P'
|
||||||
|
|
||||||
- Y'\ :sub:`0`\ [7:0]
|
- Y'\ :sub:`0`\ [9:2]
|
||||||
- Y'\ :sub:`1`\ [9:8]
|
- Y'\ :sub:`1`\ [9:2]
|
||||||
- Y'\ :sub:`2`\ [9:2]
|
- Y'\ :sub:`2`\ [9:2]
|
||||||
- Y'\ :sub:`3`\ [9:2]
|
- Y'\ :sub:`3`\ [9:2]
|
||||||
- Y'\ :sub:`3`\ [1:0] Y'\ :sub:`2`\ [1:0] Y'\ :sub:`1`\ [1:0] Y'\ :sub:`0`\ [1:0]
|
- Y'\ :sub:`3`\ [1:0] Y'\ :sub:`2`\ [1:0] Y'\ :sub:`1`\ [1:0] Y'\ :sub:`0`\ [1:0]
|
||||||
|
|
|
@ -76,7 +76,7 @@ All components are stored with the same number of bits per component.
|
||||||
- 'NV21'
|
- 'NV21'
|
||||||
- 8
|
- 8
|
||||||
- 4:2:0
|
- 4:2:0
|
||||||
- Cr, Cr
|
- Cr, Cb
|
||||||
- Yes
|
- Yes
|
||||||
- Linear
|
- Linear
|
||||||
* - V4L2_PIX_FMT_NV12M
|
* - V4L2_PIX_FMT_NV12M
|
||||||
|
@ -90,7 +90,7 @@ All components are stored with the same number of bits per component.
|
||||||
- 'NM21'
|
- 'NM21'
|
||||||
- 8
|
- 8
|
||||||
- 4:2:0
|
- 4:2:0
|
||||||
- Cr, Cr
|
- Cr, Cb
|
||||||
- No
|
- No
|
||||||
- Linear
|
- Linear
|
||||||
* - V4L2_PIX_FMT_NV12MT
|
* - V4L2_PIX_FMT_NV12MT
|
||||||
|
@ -120,7 +120,7 @@ All components are stored with the same number of bits per component.
|
||||||
- 'NV61'
|
- 'NV61'
|
||||||
- 8
|
- 8
|
||||||
- 4:2:2
|
- 4:2:2
|
||||||
- Cr, Cr
|
- Cr, Cb
|
||||||
- Yes
|
- Yes
|
||||||
- Linear
|
- Linear
|
||||||
* - V4L2_PIX_FMT_NV16M
|
* - V4L2_PIX_FMT_NV16M
|
||||||
|
@ -134,7 +134,7 @@ All components are stored with the same number of bits per component.
|
||||||
- 'NM61'
|
- 'NM61'
|
||||||
- 8
|
- 8
|
||||||
- 4:2:2
|
- 4:2:2
|
||||||
- Cr, Cr
|
- Cr, Cb
|
||||||
- No
|
- No
|
||||||
- Linear
|
- Linear
|
||||||
* - V4L2_PIX_FMT_NV24
|
* - V4L2_PIX_FMT_NV24
|
||||||
|
@ -148,7 +148,7 @@ All components are stored with the same number of bits per component.
|
||||||
- 'NV42'
|
- 'NV42'
|
||||||
- 8
|
- 8
|
||||||
- 4:4:4
|
- 4:4:4
|
||||||
- Cr, Cr
|
- Cr, Cb
|
||||||
- Yes
|
- Yes
|
||||||
- Linear
|
- Linear
|
||||||
|
|
||||||
|
@ -257,6 +257,9 @@ of the luma plane.
|
||||||
.. _V4L2-PIX-FMT-NV12-4L4:
|
.. _V4L2-PIX-FMT-NV12-4L4:
|
||||||
.. _V4L2-PIX-FMT-NV12-16L16:
|
.. _V4L2-PIX-FMT-NV12-16L16:
|
||||||
.. _V4L2-PIX-FMT-NV12-32L32:
|
.. _V4L2-PIX-FMT-NV12-32L32:
|
||||||
|
.. _V4L2-PIX-FMT-NV12M-8L128:
|
||||||
|
.. _V4L2-PIX-FMT-NV12M-10BE-8L128:
|
||||||
|
.. _V4L2-PIX-FMT-MM21:
|
||||||
|
|
||||||
Tiled NV12
|
Tiled NV12
|
||||||
----------
|
----------
|
||||||
|
@ -281,21 +284,47 @@ If the vertical resolution is an odd number of tiles, the last row of
|
||||||
tiles is stored in linear order. The layouts of the luma and chroma
|
tiles is stored in linear order. The layouts of the luma and chroma
|
||||||
planes are identical.
|
planes are identical.
|
||||||
|
|
||||||
``V4L2_PIX_FMT_NV12_4L4`` stores pixel in 4x4 tiles, and stores
|
``V4L2_PIX_FMT_NV12_4L4`` stores pixels in 4x4 tiles, and stores
|
||||||
tiles linearly in memory. The line stride and image height must be
|
tiles linearly in memory. The line stride and image height must be
|
||||||
aligned to a multiple of 4. The layouts of the luma and chroma planes are
|
aligned to a multiple of 4. The layouts of the luma and chroma planes are
|
||||||
identical.
|
identical.
|
||||||
|
|
||||||
``V4L2_PIX_FMT_NV12_16L16`` stores pixel in 16x16 tiles, and stores
|
``V4L2_PIX_FMT_NV12_16L16`` stores pixels in 16x16 tiles, and stores
|
||||||
tiles linearly in memory. The line stride and image height must be
|
tiles linearly in memory. The line stride and image height must be
|
||||||
aligned to a multiple of 16. The layouts of the luma and chroma planes are
|
aligned to a multiple of 16. The layouts of the luma and chroma planes are
|
||||||
identical.
|
identical.
|
||||||
|
|
||||||
``V4L2_PIX_FMT_NV12_32L32`` stores pixel in 32x32 tiles, and stores
|
``V4L2_PIX_FMT_NV12_32L32`` stores pixels in 32x32 tiles, and stores
|
||||||
tiles linearly in memory. The line stride and image height must be
|
tiles linearly in memory. The line stride and image height must be
|
||||||
aligned to a multiple of 32. The layouts of the luma and chroma planes are
|
aligned to a multiple of 32. The layouts of the luma and chroma planes are
|
||||||
identical.
|
identical.
|
||||||
|
|
||||||
|
``V4L2_PIX_FMT_NV12M_8L128`` is similar to ``V4L2_PIX_FMT_NV12M`` but stores
|
||||||
|
pixels in 2D 8x128 tiles, and stores tiles linearly in memory.
|
||||||
|
The image height must be aligned to a multiple of 128.
|
||||||
|
The layouts of the luma and chroma planes are identical.
|
||||||
|
|
||||||
|
``V4L2_PIX_FMT_NV12M_10BE_8L128`` is similar to ``V4L2_PIX_FMT_NV12M`` but stores
|
||||||
|
10 bits pixels in 2D 8x128 tiles, and stores tiles linearly in memory.
|
||||||
|
the data is arranged in big endian order.
|
||||||
|
The image height must be aligned to a multiple of 128.
|
||||||
|
The layouts of the luma and chroma planes are identical.
|
||||||
|
Note the tile size is 8bytes multiplied by 128 bytes,
|
||||||
|
it means that the low bits and high bits of one pixel may be in different tiles.
|
||||||
|
The 10 bit pixels are packed, so 5 bytes contain 4 10-bit pixels layout like
|
||||||
|
this (for luma):
|
||||||
|
byte 0: Y0(bits 9-2)
|
||||||
|
byte 1: Y0(bits 1-0) Y1(bits 9-4)
|
||||||
|
byte 2: Y1(bits 3-0) Y2(bits 9-6)
|
||||||
|
byte 3: Y2(bits 5-0) Y3(bits 9-8)
|
||||||
|
byte 4: Y3(bits 7-0)
|
||||||
|
|
||||||
|
``V4L2_PIX_FMT_MM21`` store luma pixel in 16x32 tiles, and chroma pixels
|
||||||
|
in 16x16 tiles. The line stride must be aligned to a multiple of 16 and the
|
||||||
|
image height must be aligned to a multiple of 32. The number of luma and chroma
|
||||||
|
tiles are identical, even though the tile size differ. The image is formed of
|
||||||
|
two non-contiguous planes.
|
||||||
|
|
||||||
.. _nv12mt:
|
.. _nv12mt:
|
||||||
|
|
||||||
.. kernel-figure:: nv12mt.svg
|
.. kernel-figure:: nv12mt.svg
|
||||||
|
|
|
@ -134,7 +134,7 @@ file: media/v4l/v4l2grab.c
|
||||||
tv.tv_usec = 0;
|
tv.tv_usec = 0;
|
||||||
|
|
||||||
r = select(fd + 1, &fds, NULL, NULL, &tv);
|
r = select(fd + 1, &fds, NULL, NULL, &tv);
|
||||||
} while ((r == -1 && (errno = EINTR)));
|
} while ((r == -1 && (errno == EINTR)));
|
||||||
if (r == -1) {
|
if (r == -1) {
|
||||||
perror("select");
|
perror("select");
|
||||||
return errno;
|
return errno;
|
||||||
|
|
|
@ -125,7 +125,7 @@ Applications call the ``VIDIOC_DQBUF`` ioctl to dequeue a filled
|
||||||
queue. They just set the ``type``, ``memory`` and ``reserved`` fields of
|
queue. They just set the ``type``, ``memory`` and ``reserved`` fields of
|
||||||
a struct :c:type:`v4l2_buffer` as above, when
|
a struct :c:type:`v4l2_buffer` as above, when
|
||||||
``VIDIOC_DQBUF`` is called with a pointer to this structure the driver
|
``VIDIOC_DQBUF`` is called with a pointer to this structure the driver
|
||||||
fills the remaining fields or returns an error code. The driver may also
|
fills all remaining fields or returns an error code. The driver may also
|
||||||
set ``V4L2_BUF_FLAG_ERROR`` in the ``flags`` field. It indicates a
|
set ``V4L2_BUF_FLAG_ERROR`` in the ``flags`` field. It indicates a
|
||||||
non-critical (recoverable) streaming error. In such case the application
|
non-critical (recoverable) streaming error. In such case the application
|
||||||
may continue as normal, but should be aware that data in the dequeued
|
may continue as normal, but should be aware that data in the dequeued
|
||||||
|
|
135
MAINTAINERS
135
MAINTAINERS
|
@ -1032,6 +1032,15 @@ S: Maintained
|
||||||
F: Documentation/hid/amd-sfh*
|
F: Documentation/hid/amd-sfh*
|
||||||
F: drivers/hid/amd-sfh-hid/
|
F: drivers/hid/amd-sfh-hid/
|
||||||
|
|
||||||
|
AMPHION VPU CODEC V4L2 DRIVER
|
||||||
|
M: Ming Qian <ming.qian@nxp.com>
|
||||||
|
M: Shijie Qin <shijie.qin@nxp.com>
|
||||||
|
M: Zhou Peng <eagle.zhou@nxp.com>
|
||||||
|
L: linux-media@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/media/amphion,vpu.yaml
|
||||||
|
F: drivers/media/platform/amphion/
|
||||||
|
|
||||||
AMS AS73211 DRIVER
|
AMS AS73211 DRIVER
|
||||||
M: Christian Eggers <ceggers@arri.de>
|
M: Christian Eggers <ceggers@arri.de>
|
||||||
L: linux-iio@vger.kernel.org
|
L: linux-iio@vger.kernel.org
|
||||||
|
@ -2615,7 +2624,7 @@ M: Łukasz Stelmach <l.stelmach@samsung.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/media/platform/s5p-g2d/
|
F: drivers/media/platform/samsung/s5p-g2d/
|
||||||
|
|
||||||
ARM/SAMSUNG S5P SERIES HDMI CEC SUBSYSTEM SUPPORT
|
ARM/SAMSUNG S5P SERIES HDMI CEC SUBSYSTEM SUPPORT
|
||||||
M: Marek Szyprowski <m.szyprowski@samsung.com>
|
M: Marek Szyprowski <m.szyprowski@samsung.com>
|
||||||
|
@ -2632,7 +2641,7 @@ M: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/media/platform/s5p-jpeg/
|
F: drivers/media/platform/samsung/s5p-jpeg/
|
||||||
|
|
||||||
ARM/SAMSUNG S5P SERIES Multi Format Codec (MFC) SUPPORT
|
ARM/SAMSUNG S5P SERIES Multi Format Codec (MFC) SUPPORT
|
||||||
M: Marek Szyprowski <m.szyprowski@samsung.com>
|
M: Marek Szyprowski <m.szyprowski@samsung.com>
|
||||||
|
@ -2640,7 +2649,7 @@ M: Andrzej Hajda <andrzej.hajda@intel.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/media/platform/s5p-mfc/
|
F: drivers/media/platform/samsung/s5p-mfc/
|
||||||
|
|
||||||
ARM/SHMOBILE ARM ARCHITECTURE
|
ARM/SHMOBILE ARM ARCHITECTURE
|
||||||
M: Geert Uytterhoeven <geert+renesas@glider.be>
|
M: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||||
|
@ -2709,7 +2718,7 @@ F: drivers/clocksource/clksrc_st_lpc.c
|
||||||
F: drivers/cpufreq/sti-cpufreq.c
|
F: drivers/cpufreq/sti-cpufreq.c
|
||||||
F: drivers/dma/st_fdma*
|
F: drivers/dma/st_fdma*
|
||||||
F: drivers/i2c/busses/i2c-st.c
|
F: drivers/i2c/busses/i2c-st.c
|
||||||
F: drivers/media/platform/sti/c8sectpfe/
|
F: drivers/media/platform/st/sti/c8sectpfe/
|
||||||
F: drivers/media/rc/st_rc.c
|
F: drivers/media/rc/st_rc.c
|
||||||
F: drivers/mmc/host/sdhci-st.c
|
F: drivers/mmc/host/sdhci-st.c
|
||||||
F: drivers/phy/st/phy-miphy28lp.c
|
F: drivers/phy/st/phy-miphy28lp.c
|
||||||
|
@ -3025,7 +3034,7 @@ L: linux-media@vger.kernel.org
|
||||||
L: openbmc@lists.ozlabs.org (moderated for non-subscribers)
|
L: openbmc@lists.ozlabs.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/devicetree/bindings/media/aspeed-video.txt
|
F: Documentation/devicetree/bindings/media/aspeed-video.txt
|
||||||
F: drivers/media/platform/aspeed-video.c
|
F: drivers/media/platform/aspeed/
|
||||||
|
|
||||||
ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
|
ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
|
||||||
M: Corentin Chary <corentin.chary@gmail.com>
|
M: Corentin Chary <corentin.chary@gmail.com>
|
||||||
|
@ -3387,7 +3396,7 @@ L: linux-media@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
W: https://linuxtv.org
|
W: https://linuxtv.org
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: drivers/media/platform/sti/bdisp
|
F: drivers/media/platform/st/sti/bdisp
|
||||||
|
|
||||||
BECKHOFF CX5020 ETHERCAT MASTER DRIVER
|
BECKHOFF CX5020 ETHERCAT MASTER DRIVER
|
||||||
M: Dariusz Marcinkiewicz <reksio@newterm.pl>
|
M: Dariusz Marcinkiewicz <reksio@newterm.pl>
|
||||||
|
@ -4252,7 +4261,7 @@ L: linux-media@vger.kernel.org
|
||||||
S: Orphan
|
S: Orphan
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: Documentation/admin-guide/media/cafe_ccic*
|
F: Documentation/admin-guide/media/cafe_ccic*
|
||||||
F: drivers/media/platform/marvell-ccic/
|
F: drivers/media/platform/marvell/
|
||||||
|
|
||||||
CAIF NETWORK LAYER
|
CAIF NETWORK LAYER
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
|
@ -4776,7 +4785,7 @@ M: Philipp Zabel <p.zabel@pengutronix.de>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/devicetree/bindings/media/coda.yaml
|
F: Documentation/devicetree/bindings/media/coda.yaml
|
||||||
F: drivers/media/platform/coda/
|
F: drivers/media/platform/chips-media/
|
||||||
|
|
||||||
CODE OF CONDUCT
|
CODE OF CONDUCT
|
||||||
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
@ -5490,7 +5499,7 @@ L: linux-media@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
W: https://linuxtv.org
|
W: https://linuxtv.org
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: drivers/media/platform/sti/delta
|
F: drivers/media/platform/st/sti/delta
|
||||||
|
|
||||||
DELTA AHE-50DC FAN CONTROL MODULE DRIVER
|
DELTA AHE-50DC FAN CONTROL MODULE DRIVER
|
||||||
M: Zev Weiss <zev@bewilderbeest.net>
|
M: Zev Weiss <zev@bewilderbeest.net>
|
||||||
|
@ -8886,7 +8895,7 @@ L: linux-media@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
W: https://linuxtv.org
|
W: https://linuxtv.org
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: drivers/media/platform/sti/hva
|
F: drivers/media/platform/st/sti/hva
|
||||||
|
|
||||||
HWPOISON MEMORY FAILURE HANDLING
|
HWPOISON MEMORY FAILURE HANDLING
|
||||||
M: Naoya Horiguchi <naoya.horiguchi@nec.com>
|
M: Naoya Horiguchi <naoya.horiguchi@nec.com>
|
||||||
|
@ -8921,6 +8930,12 @@ L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/media/i2c/hi846.c
|
F: drivers/media/i2c/hi846.c
|
||||||
|
|
||||||
|
HYNIX HI847 SENSOR DRIVER
|
||||||
|
M: Shawn Tu <shawnx.tu@intel.com>
|
||||||
|
L: linux-media@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/media/i2c/hi847.c
|
||||||
|
|
||||||
Hyper-V/Azure CORE AND DRIVERS
|
Hyper-V/Azure CORE AND DRIVERS
|
||||||
M: "K. Y. Srinivasan" <kys@microsoft.com>
|
M: "K. Y. Srinivasan" <kys@microsoft.com>
|
||||||
M: Haiyang Zhang <haiyangz@microsoft.com>
|
M: Haiyang Zhang <haiyangz@microsoft.com>
|
||||||
|
@ -10035,6 +10050,14 @@ L: linux-iio@vger.kernel.org
|
||||||
F: Documentation/devicetree/bindings/counter/interrupt-counter.yaml
|
F: Documentation/devicetree/bindings/counter/interrupt-counter.yaml
|
||||||
F: drivers/counter/interrupt-cnt.c
|
F: drivers/counter/interrupt-cnt.c
|
||||||
|
|
||||||
|
INTERSIL ISL7998X VIDEO DECODER DRIVER
|
||||||
|
M: Michael Tretter <m.tretter@pengutronix.de>
|
||||||
|
R: Pengutronix Kernel Team <kernel@pengutronix.de>
|
||||||
|
L: linux-media@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/media/i2c/isil,isl79987.yaml
|
||||||
|
F: drivers/media/i2c/isl7998x.c
|
||||||
|
|
||||||
INVENSENSE ICM-426xx IMU DRIVER
|
INVENSENSE ICM-426xx IMU DRIVER
|
||||||
M: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
|
M: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
|
||||||
L: linux-iio@vger.kernel.org
|
L: linux-iio@vger.kernel.org
|
||||||
|
@ -10334,7 +10357,7 @@ M: Mikhail Ulyanov <mikhail.ulyanov@cogentembedded.com>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
L: linux-renesas-soc@vger.kernel.org
|
L: linux-renesas-soc@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/media/platform/rcar_jpu.c
|
F: drivers/media/platform/renesas/rcar_jpu.c
|
||||||
|
|
||||||
JSM Neo PCI based serial card
|
JSM Neo PCI based serial card
|
||||||
L: linux-serial@vger.kernel.org
|
L: linux-serial@vger.kernel.org
|
||||||
|
@ -11878,7 +11901,7 @@ M: Philipp Zabel <p.zabel@pengutronix.de>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: drivers/media/platform/imx-pxp.[ch]
|
F: drivers/media/platform/nxp/imx-pxp.[ch]
|
||||||
|
|
||||||
MEDIA DRIVERS FOR ASCOT2E
|
MEDIA DRIVERS FOR ASCOT2E
|
||||||
M: Sergey Kozlov <serjk@netup.ru>
|
M: Sergey Kozlov <serjk@netup.ru>
|
||||||
|
@ -11943,10 +11966,10 @@ L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: Documentation/admin-guide/media/imx7.rst
|
F: Documentation/admin-guide/media/imx7.rst
|
||||||
|
F: Documentation/devicetree/bindings/media/nxp,imx-mipi-csi2.yaml
|
||||||
F: Documentation/devicetree/bindings/media/nxp,imx7-csi.yaml
|
F: Documentation/devicetree/bindings/media/nxp,imx7-csi.yaml
|
||||||
F: Documentation/devicetree/bindings/media/nxp,imx7-mipi-csi2.yaml
|
F: drivers/media/platform/imx/imx-mipi-csis.c
|
||||||
F: drivers/staging/media/imx/imx7-media-csi.c
|
F: drivers/staging/media/imx/imx7-media-csi.c
|
||||||
F: drivers/staging/media/imx/imx7-mipi-csis.c
|
|
||||||
|
|
||||||
MEDIA DRIVERS FOR HELENE
|
MEDIA DRIVERS FOR HELENE
|
||||||
M: Abylay Ospan <aospan@netup.ru>
|
M: Abylay Ospan <aospan@netup.ru>
|
||||||
|
@ -12001,7 +12024,7 @@ L: linux-tegra@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: Documentation/devicetree/bindings/media/nvidia,tegra-vde.txt
|
F: Documentation/devicetree/bindings/media/nvidia,tegra-vde.txt
|
||||||
F: drivers/staging/media/tegra-vde/
|
F: drivers/media/platform/nvidia/tegra-vde/
|
||||||
|
|
||||||
MEDIA DRIVERS FOR RENESAS - CEU
|
MEDIA DRIVERS FOR RENESAS - CEU
|
||||||
M: Jacopo Mondi <jacopo@jmondi.org>
|
M: Jacopo Mondi <jacopo@jmondi.org>
|
||||||
|
@ -12010,7 +12033,7 @@ L: linux-renesas-soc@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: Documentation/devicetree/bindings/media/renesas,ceu.yaml
|
F: Documentation/devicetree/bindings/media/renesas,ceu.yaml
|
||||||
F: drivers/media/platform/renesas-ceu.c
|
F: drivers/media/platform/renesas/renesas-ceu.c
|
||||||
F: include/media/drv-intf/renesas-ceu.h
|
F: include/media/drv-intf/renesas-ceu.h
|
||||||
|
|
||||||
MEDIA DRIVERS FOR RENESAS - DRIF
|
MEDIA DRIVERS FOR RENESAS - DRIF
|
||||||
|
@ -12020,7 +12043,7 @@ L: linux-renesas-soc@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: Documentation/devicetree/bindings/media/renesas,drif.yaml
|
F: Documentation/devicetree/bindings/media/renesas,drif.yaml
|
||||||
F: drivers/media/platform/rcar_drif.c
|
F: drivers/media/platform/renesas/rcar_drif.c
|
||||||
|
|
||||||
MEDIA DRIVERS FOR RENESAS - FCP
|
MEDIA DRIVERS FOR RENESAS - FCP
|
||||||
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||||
|
@ -12029,7 +12052,7 @@ L: linux-renesas-soc@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: Documentation/devicetree/bindings/media/renesas,fcp.yaml
|
F: Documentation/devicetree/bindings/media/renesas,fcp.yaml
|
||||||
F: drivers/media/platform/rcar-fcp.c
|
F: drivers/media/platform/renesas/rcar-fcp.c
|
||||||
F: include/media/rcar-fcp.h
|
F: include/media/rcar-fcp.h
|
||||||
|
|
||||||
MEDIA DRIVERS FOR RENESAS - FDP1
|
MEDIA DRIVERS FOR RENESAS - FDP1
|
||||||
|
@ -12039,7 +12062,7 @@ L: linux-renesas-soc@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: Documentation/devicetree/bindings/media/renesas,fdp1.yaml
|
F: Documentation/devicetree/bindings/media/renesas,fdp1.yaml
|
||||||
F: drivers/media/platform/rcar_fdp1.c
|
F: drivers/media/platform/renesas/rcar_fdp1.c
|
||||||
|
|
||||||
MEDIA DRIVERS FOR RENESAS - VIN
|
MEDIA DRIVERS FOR RENESAS - VIN
|
||||||
M: Niklas Söderlund <niklas.soderlund@ragnatech.se>
|
M: Niklas Söderlund <niklas.soderlund@ragnatech.se>
|
||||||
|
@ -12050,8 +12073,8 @@ T: git git://linuxtv.org/media_tree.git
|
||||||
F: Documentation/devicetree/bindings/media/renesas,csi2.yaml
|
F: Documentation/devicetree/bindings/media/renesas,csi2.yaml
|
||||||
F: Documentation/devicetree/bindings/media/renesas,isp.yaml
|
F: Documentation/devicetree/bindings/media/renesas,isp.yaml
|
||||||
F: Documentation/devicetree/bindings/media/renesas,vin.yaml
|
F: Documentation/devicetree/bindings/media/renesas,vin.yaml
|
||||||
F: drivers/media/platform/rcar-isp.c
|
F: drivers/media/platform/renesas/rcar-isp.c
|
||||||
F: drivers/media/platform/rcar-vin/
|
F: drivers/media/platform/renesas/rcar-vin/
|
||||||
|
|
||||||
MEDIA DRIVERS FOR RENESAS - VSP1
|
MEDIA DRIVERS FOR RENESAS - VSP1
|
||||||
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||||
|
@ -12061,7 +12084,7 @@ L: linux-renesas-soc@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: Documentation/devicetree/bindings/media/renesas,vsp1.yaml
|
F: Documentation/devicetree/bindings/media/renesas,vsp1.yaml
|
||||||
F: drivers/media/platform/vsp1/
|
F: drivers/media/platform/renesas/vsp1/
|
||||||
|
|
||||||
MEDIA DRIVERS FOR ST STV0910 DEMODULATOR ICs
|
MEDIA DRIVERS FOR ST STV0910 DEMODULATOR ICs
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
|
@ -12083,7 +12106,7 @@ L: linux-media@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: Documentation/devicetree/bindings/media/st,stm32-dcmi.yaml
|
F: Documentation/devicetree/bindings/media/st,stm32-dcmi.yaml
|
||||||
F: drivers/media/platform/stm32/stm32-dcmi.c
|
F: drivers/media/platform/st/stm32/stm32-dcmi.c
|
||||||
|
|
||||||
MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
|
MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
|
||||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||||
|
@ -12167,7 +12190,7 @@ M: Rick Chang <rick.chang@mediatek.com>
|
||||||
M: Bin Liu <bin.liu@mediatek.com>
|
M: Bin Liu <bin.liu@mediatek.com>
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/devicetree/bindings/media/mediatek-jpeg-decoder.txt
|
F: Documentation/devicetree/bindings/media/mediatek-jpeg-decoder.txt
|
||||||
F: drivers/media/platform/mtk-jpeg/
|
F: drivers/media/platform/mediatek/jpeg/
|
||||||
|
|
||||||
MEDIATEK MDP DRIVER
|
MEDIATEK MDP DRIVER
|
||||||
M: Minghsiu Tsai <minghsiu.tsai@mediatek.com>
|
M: Minghsiu Tsai <minghsiu.tsai@mediatek.com>
|
||||||
|
@ -12175,8 +12198,8 @@ M: Houlong Wei <houlong.wei@mediatek.com>
|
||||||
M: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
|
M: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/devicetree/bindings/media/mediatek-mdp.txt
|
F: Documentation/devicetree/bindings/media/mediatek-mdp.txt
|
||||||
F: drivers/media/platform/mtk-mdp/
|
F: drivers/media/platform/mediatek/mdp/
|
||||||
F: drivers/media/platform/mtk-vpu/
|
F: drivers/media/platform/mediatek/vpu/
|
||||||
|
|
||||||
MEDIATEK MEDIA DRIVER
|
MEDIATEK MEDIA DRIVER
|
||||||
M: Tiffany Lin <tiffany.lin@mediatek.com>
|
M: Tiffany Lin <tiffany.lin@mediatek.com>
|
||||||
|
@ -12184,8 +12207,8 @@ M: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/devicetree/bindings/media/mediatek-vcodec.txt
|
F: Documentation/devicetree/bindings/media/mediatek-vcodec.txt
|
||||||
F: Documentation/devicetree/bindings/media/mediatek-vpu.txt
|
F: Documentation/devicetree/bindings/media/mediatek-vpu.txt
|
||||||
F: drivers/media/platform/mtk-vcodec/
|
F: drivers/media/platform/mediatek/vcodec/
|
||||||
F: drivers/media/platform/mtk-vpu/
|
F: drivers/media/platform/mediatek/vpu/
|
||||||
|
|
||||||
MEDIATEK MMC/SD/SDIO DRIVER
|
MEDIATEK MMC/SD/SDIO DRIVER
|
||||||
M: Chaotian Jing <chaotian.jing@mediatek.com>
|
M: Chaotian Jing <chaotian.jing@mediatek.com>
|
||||||
|
@ -12560,7 +12583,7 @@ L: linux-amlogic@lists.infradead.org
|
||||||
S: Supported
|
S: Supported
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: Documentation/devicetree/bindings/media/amlogic,axg-ge2d.yaml
|
F: Documentation/devicetree/bindings/media/amlogic,axg-ge2d.yaml
|
||||||
F: drivers/media/platform/meson/ge2d/
|
F: drivers/media/platform/amlogic/meson-ge2d/
|
||||||
|
|
||||||
MESON NAND CONTROLLER DRIVER FOR AMLOGIC SOCS
|
MESON NAND CONTROLLER DRIVER FOR AMLOGIC SOCS
|
||||||
M: Liang Yang <liang.yang@amlogic.com>
|
M: Liang Yang <liang.yang@amlogic.com>
|
||||||
|
@ -12642,6 +12665,13 @@ L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
S: Supported
|
S: Supported
|
||||||
F: sound/soc/atmel
|
F: sound/soc/atmel
|
||||||
|
|
||||||
|
MICROCHIP CSI2DC DRIVER
|
||||||
|
M: Eugen Hristev <eugen.hristev@microchip.com>
|
||||||
|
L: linux-media@vger.kernel.org
|
||||||
|
S: Supported
|
||||||
|
F: Documentation/devicetree/bindings/media/microchip,csi2dc.yaml
|
||||||
|
F: drivers/media/platform/atmel/microchip-csi2dc.c
|
||||||
|
|
||||||
MICROCHIP ECC DRIVER
|
MICROCHIP ECC DRIVER
|
||||||
M: Tudor Ambarus <tudor.ambarus@microchip.com>
|
M: Tudor Ambarus <tudor.ambarus@microchip.com>
|
||||||
L: linux-crypto@vger.kernel.org
|
L: linux-crypto@vger.kernel.org
|
||||||
|
@ -12667,11 +12697,8 @@ L: linux-media@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/devicetree/bindings/media/atmel,isc.yaml
|
F: Documentation/devicetree/bindings/media/atmel,isc.yaml
|
||||||
F: Documentation/devicetree/bindings/media/microchip,xisc.yaml
|
F: Documentation/devicetree/bindings/media/microchip,xisc.yaml
|
||||||
F: drivers/media/platform/atmel/atmel-isc-base.c
|
F: drivers/media/platform/atmel/atmel-isc*
|
||||||
F: drivers/media/platform/atmel/atmel-isc-regs.h
|
F: drivers/media/platform/atmel/atmel-sama*-isc*
|
||||||
F: drivers/media/platform/atmel/atmel-isc.h
|
|
||||||
F: drivers/media/platform/atmel/atmel-sama5d2-isc.c
|
|
||||||
F: drivers/media/platform/atmel/atmel-sama7g5-isc.c
|
|
||||||
F: include/linux/atmel-isc-media.h
|
F: include/linux/atmel-isc-media.h
|
||||||
|
|
||||||
MICROCHIP ISI DRIVER
|
MICROCHIP ISI DRIVER
|
||||||
|
@ -14130,7 +14157,7 @@ M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/devicetree/bindings/media/ti,omap3isp.txt
|
F: Documentation/devicetree/bindings/media/ti,omap3isp.txt
|
||||||
F: drivers/media/platform/omap3isp/
|
F: drivers/media/platform/ti/omap3isp/
|
||||||
F: drivers/staging/media/omap4iss/
|
F: drivers/staging/media/omap4iss/
|
||||||
|
|
||||||
OMAP MMC SUPPORT
|
OMAP MMC SUPPORT
|
||||||
|
@ -14238,6 +14265,12 @@ M: Harald Welte <laforge@gnumonks.org>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/char/pcmcia/cm4040_cs.*
|
F: drivers/char/pcmcia/cm4040_cs.*
|
||||||
|
|
||||||
|
OMNIVISION OG01A1B SENSOR DRIVER
|
||||||
|
M: Shawn Tu <shawnx.tu@intel.com>
|
||||||
|
L: linux-media@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/media/i2c/og01a1b.c
|
||||||
|
|
||||||
OMNIVISION OV02A10 SENSOR DRIVER
|
OMNIVISION OV02A10 SENSOR DRIVER
|
||||||
M: Dongchun Zhu <dongchun.zhu@mediatek.com>
|
M: Dongchun Zhu <dongchun.zhu@mediatek.com>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
|
@ -14246,6 +14279,13 @@ T: git git://linuxtv.org/media_tree.git
|
||||||
F: Documentation/devicetree/bindings/media/i2c/ovti,ov02a10.yaml
|
F: Documentation/devicetree/bindings/media/i2c/ovti,ov02a10.yaml
|
||||||
F: drivers/media/i2c/ov02a10.c
|
F: drivers/media/i2c/ov02a10.c
|
||||||
|
|
||||||
|
OMNIVISION OV08D10 SENSOR DRIVER
|
||||||
|
M: Jimmy Su <jimmy.su@intel.com>
|
||||||
|
L: linux-media@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
T: git git://linuxtv.org/media_tree.git
|
||||||
|
F: drivers/media/i2c/ov08d10.c
|
||||||
|
|
||||||
OMNIVISION OV13858 SENSOR DRIVER
|
OMNIVISION OV13858 SENSOR DRIVER
|
||||||
M: Sakari Ailus <sakari.ailus@linux.intel.com>
|
M: Sakari Ailus <sakari.ailus@linux.intel.com>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
|
@ -16680,8 +16720,7 @@ F: Documentation/devicetree/bindings/sound/rockchip,i2s-tdm.yaml
|
||||||
F: sound/soc/rockchip/rockchip_i2s_tdm.*
|
F: sound/soc/rockchip/rockchip_i2s_tdm.*
|
||||||
|
|
||||||
ROCKCHIP ISP V1 DRIVER
|
ROCKCHIP ISP V1 DRIVER
|
||||||
M: Helen Koike <helen.koike@collabora.com>
|
M: Dafna Hirschfeld <dafna@fastmail.com>
|
||||||
M: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
|
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
L: linux-rockchip@lists.infradead.org
|
L: linux-rockchip@lists.infradead.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -17100,7 +17139,7 @@ M: Sylwester Nawrocki <sylvester.nawrocki@gmail.com>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
L: linux-samsung-soc@vger.kernel.org
|
L: linux-samsung-soc@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/media/platform/s3c-camif/
|
F: drivers/media/platform/samsung/s3c-camif/
|
||||||
F: include/media/drv-intf/s3c_camif.h
|
F: include/media/drv-intf/s3c_camif.h
|
||||||
|
|
||||||
SAMSUNG S3FWRN5 NFC DRIVER
|
SAMSUNG S3FWRN5 NFC DRIVER
|
||||||
|
@ -17140,7 +17179,7 @@ M: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
Q: https://patchwork.linuxtv.org/project/linux-media/list/
|
Q: https://patchwork.linuxtv.org/project/linux-media/list/
|
||||||
F: drivers/media/platform/exynos4-is/
|
F: drivers/media/platform/samsung/exynos4-is/
|
||||||
|
|
||||||
SAMSUNG SOC CLOCK DRIVERS
|
SAMSUNG SOC CLOCK DRIVERS
|
||||||
M: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
M: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
||||||
|
@ -17575,7 +17614,7 @@ F: include/media/i2c/rj54n1cb0c.h
|
||||||
SH_VOU V4L2 OUTPUT DRIVER
|
SH_VOU V4L2 OUTPUT DRIVER
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
S: Orphan
|
S: Orphan
|
||||||
F: drivers/media/platform/sh_vou.c
|
F: drivers/media/platform/renesas/sh_vou.c
|
||||||
F: include/media/drv-intf/sh_vou.h
|
F: include/media/drv-intf/sh_vou.h
|
||||||
|
|
||||||
SI2157 MEDIA DRIVER
|
SI2157 MEDIA DRIVER
|
||||||
|
@ -18347,7 +18386,8 @@ F: Documentation/devicetree/bindings/iio/imu/st,lsm6dsx.yaml
|
||||||
F: drivers/iio/imu/st_lsm6dsx/
|
F: drivers/iio/imu/st_lsm6dsx/
|
||||||
|
|
||||||
ST MIPID02 CSI-2 TO PARALLEL BRIDGE DRIVER
|
ST MIPID02 CSI-2 TO PARALLEL BRIDGE DRIVER
|
||||||
M: Mickael Guene <mickael.guene@st.com>
|
M: Benjamin Mugnier <benjamin.mugnier@foss.st.com>
|
||||||
|
M: Sylvain Petinot <sylvain.petinot@foss.st.com>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
|
@ -19324,7 +19364,7 @@ S: Maintained
|
||||||
W: https://linuxtv.org
|
W: https://linuxtv.org
|
||||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||||
T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
|
T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
|
||||||
F: drivers/media/platform/am437x/
|
F: drivers/media/platform/ti/am437x/
|
||||||
|
|
||||||
TI BANDGAP AND THERMAL DRIVER
|
TI BANDGAP AND THERMAL DRIVER
|
||||||
M: Eduardo Valentin <edubezval@gmail.com>
|
M: Eduardo Valentin <edubezval@gmail.com>
|
||||||
|
@ -19383,7 +19423,7 @@ S: Maintained
|
||||||
W: https://linuxtv.org
|
W: https://linuxtv.org
|
||||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||||
T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
|
T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
|
||||||
F: drivers/media/platform/davinci/
|
F: drivers/media/platform/ti/davinci/
|
||||||
F: include/media/davinci/
|
F: include/media/davinci/
|
||||||
|
|
||||||
TI ENHANCED QUADRATURE ENCODER PULSE (eQEP) DRIVER
|
TI ENHANCED QUADRATURE ENCODER PULSE (eQEP) DRIVER
|
||||||
|
@ -19469,7 +19509,8 @@ W: http://linuxtv.org/
|
||||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||||
F: Documentation/devicetree/bindings/media/ti,cal.yaml
|
F: Documentation/devicetree/bindings/media/ti,cal.yaml
|
||||||
F: Documentation/devicetree/bindings/media/ti,vpe.yaml
|
F: Documentation/devicetree/bindings/media/ti,vpe.yaml
|
||||||
F: drivers/media/platform/ti-vpe/
|
F: drivers/media/platform/ti/cal/
|
||||||
|
F: drivers/media/platform/ti/vpe/
|
||||||
|
|
||||||
TI WILINK WIRELESS DRIVERS
|
TI WILINK WIRELESS DRIVERS
|
||||||
L: linux-wireless@vger.kernel.org
|
L: linux-wireless@vger.kernel.org
|
||||||
|
@ -20442,8 +20483,8 @@ F: drivers/media/common/videobuf2/*
|
||||||
F: include/media/videobuf2-*
|
F: include/media/videobuf2-*
|
||||||
|
|
||||||
VIMC VIRTUAL MEDIA CONTROLLER DRIVER
|
VIMC VIRTUAL MEDIA CONTROLLER DRIVER
|
||||||
M: Helen Koike <helen.koike@collabora.com>
|
M: Shuah Khan <skhan@linuxfoundation.org>
|
||||||
R: Shuah Khan <skhan@linuxfoundation.org>
|
R: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
W: https://linuxtv.org
|
W: https://linuxtv.org
|
||||||
|
@ -21132,7 +21173,7 @@ L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
W: https://linuxtv.org
|
W: https://linuxtv.org
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
F: drivers/media/tuners/tuner-xc2028.*
|
F: drivers/media/tuners/xc2028.*
|
||||||
|
|
||||||
XDP (eXpress Data Path)
|
XDP (eXpress Data Path)
|
||||||
M: Alexei Starovoitov <ast@kernel.org>
|
M: Alexei Starovoitov <ast@kernel.org>
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <linux/of_device.h>
|
#include <linux/of_device.h>
|
||||||
#include <linux/of_irq.h>
|
#include <linux/of_irq.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/pm_runtime.h>
|
||||||
#include <linux/soc/mediatek/mtk-cmdq.h>
|
#include <linux/soc/mediatek/mtk-cmdq.h>
|
||||||
|
|
||||||
#include "mtk_disp_drv.h"
|
#include "mtk_disp_drv.h"
|
||||||
|
@ -414,9 +415,13 @@ static int mtk_disp_ovl_probe(struct platform_device *pdev)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pm_runtime_enable(dev);
|
||||||
|
|
||||||
ret = component_add(dev, &mtk_disp_ovl_component_ops);
|
ret = component_add(dev, &mtk_disp_ovl_component_ops);
|
||||||
if (ret)
|
if (ret) {
|
||||||
|
pm_runtime_disable(dev);
|
||||||
dev_err(dev, "Failed to add component: %d\n", ret);
|
dev_err(dev, "Failed to add component: %d\n", ret);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -424,6 +429,7 @@ static int mtk_disp_ovl_probe(struct platform_device *pdev)
|
||||||
static int mtk_disp_ovl_remove(struct platform_device *pdev)
|
static int mtk_disp_ovl_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
component_del(&pdev->dev, &mtk_disp_ovl_component_ops);
|
component_del(&pdev->dev, &mtk_disp_ovl_component_ops);
|
||||||
|
pm_runtime_disable(&pdev->dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <linux/of_device.h>
|
#include <linux/of_device.h>
|
||||||
#include <linux/of_irq.h>
|
#include <linux/of_irq.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/pm_runtime.h>
|
||||||
#include <linux/soc/mediatek/mtk-cmdq.h>
|
#include <linux/soc/mediatek/mtk-cmdq.h>
|
||||||
|
|
||||||
#include "mtk_disp_drv.h"
|
#include "mtk_disp_drv.h"
|
||||||
|
@ -327,9 +328,13 @@ static int mtk_disp_rdma_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
platform_set_drvdata(pdev, priv);
|
platform_set_drvdata(pdev, priv);
|
||||||
|
|
||||||
|
pm_runtime_enable(dev);
|
||||||
|
|
||||||
ret = component_add(dev, &mtk_disp_rdma_component_ops);
|
ret = component_add(dev, &mtk_disp_rdma_component_ops);
|
||||||
if (ret)
|
if (ret) {
|
||||||
|
pm_runtime_disable(dev);
|
||||||
dev_err(dev, "Failed to add component: %d\n", ret);
|
dev_err(dev, "Failed to add component: %d\n", ret);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -338,6 +343,8 @@ static int mtk_disp_rdma_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
component_del(&pdev->dev, &mtk_disp_rdma_component_ops);
|
component_del(&pdev->dev, &mtk_disp_rdma_component_ops);
|
||||||
|
|
||||||
|
pm_runtime_disable(&pdev->dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#include <linux/soc/mediatek/mtk-mutex.h>
|
#include <linux/soc/mediatek/mtk-mutex.h>
|
||||||
|
|
||||||
#include <asm/barrier.h>
|
#include <asm/barrier.h>
|
||||||
#include <soc/mediatek/smi.h>
|
|
||||||
|
|
||||||
#include <drm/drm_atomic.h>
|
#include <drm/drm_atomic.h>
|
||||||
#include <drm/drm_atomic_helper.h>
|
#include <drm/drm_atomic_helper.h>
|
||||||
|
@ -661,15 +660,15 @@ static void mtk_drm_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||||
|
|
||||||
DRM_DEBUG_DRIVER("%s %d\n", __func__, crtc->base.id);
|
DRM_DEBUG_DRIVER("%s %d\n", __func__, crtc->base.id);
|
||||||
|
|
||||||
ret = mtk_smi_larb_get(comp->larb_dev);
|
ret = pm_runtime_resume_and_get(comp->dev);
|
||||||
if (ret) {
|
if (ret < 0) {
|
||||||
DRM_ERROR("Failed to get larb: %d\n", ret);
|
DRM_DEV_ERROR(comp->dev, "Failed to enable power domain: %d\n", ret);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = mtk_crtc_ddp_hw_init(mtk_crtc);
|
ret = mtk_crtc_ddp_hw_init(mtk_crtc);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
mtk_smi_larb_put(comp->larb_dev);
|
pm_runtime_put(comp->dev);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -682,7 +681,7 @@ static void mtk_drm_crtc_atomic_disable(struct drm_crtc *crtc,
|
||||||
{
|
{
|
||||||
struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);
|
struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);
|
||||||
struct mtk_ddp_comp *comp = mtk_crtc->ddp_comp[0];
|
struct mtk_ddp_comp *comp = mtk_crtc->ddp_comp[0];
|
||||||
int i;
|
int i, ret;
|
||||||
|
|
||||||
DRM_DEBUG_DRIVER("%s %d\n", __func__, crtc->base.id);
|
DRM_DEBUG_DRIVER("%s %d\n", __func__, crtc->base.id);
|
||||||
if (!mtk_crtc->enabled)
|
if (!mtk_crtc->enabled)
|
||||||
|
@ -705,7 +704,9 @@ static void mtk_drm_crtc_atomic_disable(struct drm_crtc *crtc,
|
||||||
|
|
||||||
drm_crtc_vblank_off(crtc);
|
drm_crtc_vblank_off(crtc);
|
||||||
mtk_crtc_ddp_hw_fini(mtk_crtc);
|
mtk_crtc_ddp_hw_fini(mtk_crtc);
|
||||||
mtk_smi_larb_put(comp->larb_dev);
|
ret = pm_runtime_put(comp->dev);
|
||||||
|
if (ret < 0)
|
||||||
|
DRM_DEV_ERROR(comp->dev, "Failed to disable power domain: %d\n", ret);
|
||||||
|
|
||||||
mtk_crtc->enabled = false;
|
mtk_crtc->enabled = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -447,37 +447,15 @@ unsigned int mtk_drm_find_possible_crtc_by_comp(struct drm_device *drm,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mtk_ddp_get_larb_dev(struct device_node *node, struct mtk_ddp_comp *comp,
|
|
||||||
struct device *dev)
|
|
||||||
{
|
|
||||||
struct device_node *larb_node;
|
|
||||||
struct platform_device *larb_pdev;
|
|
||||||
|
|
||||||
larb_node = of_parse_phandle(node, "mediatek,larb", 0);
|
|
||||||
if (!larb_node) {
|
|
||||||
dev_err(dev, "Missing mediadek,larb phandle in %pOF node\n", node);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
larb_pdev = of_find_device_by_node(larb_node);
|
|
||||||
if (!larb_pdev) {
|
|
||||||
dev_warn(dev, "Waiting for larb device %pOF\n", larb_node);
|
|
||||||
of_node_put(larb_node);
|
|
||||||
return -EPROBE_DEFER;
|
|
||||||
}
|
|
||||||
of_node_put(larb_node);
|
|
||||||
comp->larb_dev = &larb_pdev->dev;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int mtk_ddp_comp_init(struct device_node *node, struct mtk_ddp_comp *comp,
|
int mtk_ddp_comp_init(struct device_node *node, struct mtk_ddp_comp *comp,
|
||||||
enum mtk_ddp_comp_id comp_id)
|
enum mtk_ddp_comp_id comp_id)
|
||||||
{
|
{
|
||||||
struct platform_device *comp_pdev;
|
struct platform_device *comp_pdev;
|
||||||
enum mtk_ddp_comp_type type;
|
enum mtk_ddp_comp_type type;
|
||||||
struct mtk_ddp_comp_dev *priv;
|
struct mtk_ddp_comp_dev *priv;
|
||||||
|
#if IS_REACHABLE(CONFIG_MTK_CMDQ)
|
||||||
int ret;
|
int ret;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (comp_id < 0 || comp_id >= DDP_COMPONENT_ID_MAX)
|
if (comp_id < 0 || comp_id >= DDP_COMPONENT_ID_MAX)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -493,16 +471,6 @@ int mtk_ddp_comp_init(struct device_node *node, struct mtk_ddp_comp *comp,
|
||||||
}
|
}
|
||||||
comp->dev = &comp_pdev->dev;
|
comp->dev = &comp_pdev->dev;
|
||||||
|
|
||||||
/* Only DMA capable components need the LARB property */
|
|
||||||
if (type == MTK_DISP_OVL ||
|
|
||||||
type == MTK_DISP_OVL_2L ||
|
|
||||||
type == MTK_DISP_RDMA ||
|
|
||||||
type == MTK_DISP_WDMA) {
|
|
||||||
ret = mtk_ddp_get_larb_dev(node, comp, comp->dev);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type == MTK_DISP_AAL ||
|
if (type == MTK_DISP_AAL ||
|
||||||
type == MTK_DISP_BLS ||
|
type == MTK_DISP_BLS ||
|
||||||
type == MTK_DISP_CCORR ||
|
type == MTK_DISP_CCORR ||
|
||||||
|
|
|
@ -71,7 +71,6 @@ struct mtk_ddp_comp_funcs {
|
||||||
struct mtk_ddp_comp {
|
struct mtk_ddp_comp {
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
int irq;
|
int irq;
|
||||||
struct device *larb_dev;
|
|
||||||
enum mtk_ddp_comp_id id;
|
enum mtk_ddp_comp_id id;
|
||||||
const struct mtk_ddp_comp_funcs *funcs;
|
const struct mtk_ddp_comp_funcs *funcs;
|
||||||
};
|
};
|
||||||
|
|
|
@ -645,11 +645,8 @@ err_pm:
|
||||||
pm_runtime_disable(dev);
|
pm_runtime_disable(dev);
|
||||||
err_node:
|
err_node:
|
||||||
of_node_put(private->mutex_node);
|
of_node_put(private->mutex_node);
|
||||||
for (i = 0; i < DDP_COMPONENT_ID_MAX; i++) {
|
for (i = 0; i < DDP_COMPONENT_ID_MAX; i++)
|
||||||
of_node_put(private->comp_node[i]);
|
of_node_put(private->comp_node[i]);
|
||||||
if (private->ddp_comp[i].larb_dev)
|
|
||||||
put_device(private->ddp_comp[i].larb_dev);
|
|
||||||
}
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -357,11 +357,11 @@ static int fill_csi_bus_cfg(struct ipu_csi_bus_config *csicfg,
|
||||||
switch (mbus_cfg->type) {
|
switch (mbus_cfg->type) {
|
||||||
case V4L2_MBUS_PARALLEL:
|
case V4L2_MBUS_PARALLEL:
|
||||||
csicfg->ext_vsync = 1;
|
csicfg->ext_vsync = 1;
|
||||||
csicfg->vsync_pol = (mbus_cfg->flags &
|
csicfg->vsync_pol = (mbus_cfg->bus.parallel.flags &
|
||||||
V4L2_MBUS_VSYNC_ACTIVE_LOW) ? 1 : 0;
|
V4L2_MBUS_VSYNC_ACTIVE_LOW) ? 1 : 0;
|
||||||
csicfg->hsync_pol = (mbus_cfg->flags &
|
csicfg->hsync_pol = (mbus_cfg->bus.parallel.flags &
|
||||||
V4L2_MBUS_HSYNC_ACTIVE_LOW) ? 1 : 0;
|
V4L2_MBUS_HSYNC_ACTIVE_LOW) ? 1 : 0;
|
||||||
csicfg->pixclk_pol = (mbus_cfg->flags &
|
csicfg->pixclk_pol = (mbus_cfg->bus.parallel.flags &
|
||||||
V4L2_MBUS_PCLK_SAMPLE_FALLING) ? 1 : 0;
|
V4L2_MBUS_PCLK_SAMPLE_FALLING) ? 1 : 0;
|
||||||
csicfg->clk_mode = IPU_CSI_CLK_MODE_GATED_CLK;
|
csicfg->clk_mode = IPU_CSI_CLK_MODE_GATED_CLK;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -110,7 +110,7 @@ config RMI4_F3A
|
||||||
|
|
||||||
config RMI4_F54
|
config RMI4_F54
|
||||||
bool "RMI4 Function 54 (Analog diagnostics)"
|
bool "RMI4 Function 54 (Analog diagnostics)"
|
||||||
depends on VIDEO_V4L2=y || (RMI4_CORE=m && VIDEO_V4L2=m)
|
depends on VIDEO_DEV=y || (RMI4_CORE=m && VIDEO_DEV=m)
|
||||||
select VIDEOBUF2_VMALLOC
|
select VIDEOBUF2_VMALLOC
|
||||||
select RMI4_F55
|
select RMI4_F55
|
||||||
help
|
help
|
||||||
|
|
|
@ -131,7 +131,7 @@ config TOUCHSCREEN_ATMEL_MXT
|
||||||
config TOUCHSCREEN_ATMEL_MXT_T37
|
config TOUCHSCREEN_ATMEL_MXT_T37
|
||||||
bool "Support T37 Diagnostic Data"
|
bool "Support T37 Diagnostic Data"
|
||||||
depends on TOUCHSCREEN_ATMEL_MXT
|
depends on TOUCHSCREEN_ATMEL_MXT
|
||||||
depends on VIDEO_V4L2=y || (TOUCHSCREEN_ATMEL_MXT=m && VIDEO_V4L2=m)
|
depends on VIDEO_DEV=y || (TOUCHSCREEN_ATMEL_MXT=m && VIDEO_DEV=m)
|
||||||
select VIDEOBUF2_VMALLOC
|
select VIDEOBUF2_VMALLOC
|
||||||
help
|
help
|
||||||
Say Y here if you want support to output data from the T37
|
Say Y here if you want support to output data from the T37
|
||||||
|
@ -1252,7 +1252,7 @@ config TOUCHSCREEN_SUN4I
|
||||||
config TOUCHSCREEN_SUR40
|
config TOUCHSCREEN_SUR40
|
||||||
tristate "Samsung SUR40 (Surface 2.0/PixelSense) touchscreen"
|
tristate "Samsung SUR40 (Surface 2.0/PixelSense) touchscreen"
|
||||||
depends on USB && MEDIA_USB_SUPPORT && HAS_DMA
|
depends on USB && MEDIA_USB_SUPPORT && HAS_DMA
|
||||||
depends on VIDEO_V4L2
|
depends on VIDEO_DEV
|
||||||
select VIDEOBUF2_DMA_SG
|
select VIDEOBUF2_DMA_SG
|
||||||
help
|
help
|
||||||
Say Y here if you want support for the Samsung SUR40 touchscreen
|
Say Y here if you want support for the Samsung SUR40 touchscreen
|
||||||
|
|
|
@ -562,22 +562,52 @@ static struct iommu_device *mtk_iommu_probe_device(struct device *dev)
|
||||||
{
|
{
|
||||||
struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
|
struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
|
||||||
struct mtk_iommu_data *data;
|
struct mtk_iommu_data *data;
|
||||||
|
struct device_link *link;
|
||||||
|
struct device *larbdev;
|
||||||
|
unsigned int larbid, larbidx, i;
|
||||||
|
|
||||||
if (!fwspec || fwspec->ops != &mtk_iommu_ops)
|
if (!fwspec || fwspec->ops != &mtk_iommu_ops)
|
||||||
return ERR_PTR(-ENODEV); /* Not a iommu client device */
|
return ERR_PTR(-ENODEV); /* Not a iommu client device */
|
||||||
|
|
||||||
data = dev_iommu_priv_get(dev);
|
data = dev_iommu_priv_get(dev);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Link the consumer device with the smi-larb device(supplier).
|
||||||
|
* The device that connects with each a larb is a independent HW.
|
||||||
|
* All the ports in each a device should be in the same larbs.
|
||||||
|
*/
|
||||||
|
larbid = MTK_M4U_TO_LARB(fwspec->ids[0]);
|
||||||
|
for (i = 1; i < fwspec->num_ids; i++) {
|
||||||
|
larbidx = MTK_M4U_TO_LARB(fwspec->ids[i]);
|
||||||
|
if (larbid != larbidx) {
|
||||||
|
dev_err(dev, "Can only use one larb. Fail@larb%d-%d.\n",
|
||||||
|
larbid, larbidx);
|
||||||
|
return ERR_PTR(-EINVAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
larbdev = data->larb_imu[larbid].dev;
|
||||||
|
link = device_link_add(dev, larbdev,
|
||||||
|
DL_FLAG_PM_RUNTIME | DL_FLAG_STATELESS);
|
||||||
|
if (!link)
|
||||||
|
dev_err(dev, "Unable to link %s\n", dev_name(larbdev));
|
||||||
return &data->iommu;
|
return &data->iommu;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mtk_iommu_release_device(struct device *dev)
|
static void mtk_iommu_release_device(struct device *dev)
|
||||||
{
|
{
|
||||||
struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
|
struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
|
||||||
|
struct mtk_iommu_data *data;
|
||||||
|
struct device *larbdev;
|
||||||
|
unsigned int larbid;
|
||||||
|
|
||||||
if (!fwspec || fwspec->ops != &mtk_iommu_ops)
|
if (!fwspec || fwspec->ops != &mtk_iommu_ops)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
data = dev_iommu_priv_get(dev);
|
||||||
|
larbid = MTK_M4U_TO_LARB(fwspec->ids[0]);
|
||||||
|
larbdev = data->larb_imu[larbid].dev;
|
||||||
|
device_link_remove(dev, larbdev);
|
||||||
|
|
||||||
iommu_fwspec_free(dev);
|
iommu_fwspec_free(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -847,6 +877,10 @@ static int mtk_iommu_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
plarbdev = of_find_device_by_node(larbnode);
|
plarbdev = of_find_device_by_node(larbnode);
|
||||||
if (!plarbdev) {
|
if (!plarbdev) {
|
||||||
|
of_node_put(larbnode);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
if (!plarbdev->dev.driver) {
|
||||||
of_node_put(larbnode);
|
of_node_put(larbnode);
|
||||||
return -EPROBE_DEFER;
|
return -EPROBE_DEFER;
|
||||||
}
|
}
|
||||||
|
|
|
@ -423,7 +423,18 @@ static struct iommu_device *mtk_iommu_probe_device(struct device *dev)
|
||||||
struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
|
struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
|
||||||
struct of_phandle_args iommu_spec;
|
struct of_phandle_args iommu_spec;
|
||||||
struct mtk_iommu_data *data;
|
struct mtk_iommu_data *data;
|
||||||
int err, idx = 0;
|
int err, idx = 0, larbid, larbidx;
|
||||||
|
struct device_link *link;
|
||||||
|
struct device *larbdev;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* In the deferred case, free the existed fwspec.
|
||||||
|
* Always initialize the fwspec internally.
|
||||||
|
*/
|
||||||
|
if (fwspec) {
|
||||||
|
iommu_fwspec_free(dev);
|
||||||
|
fwspec = dev_iommu_fwspec_get(dev);
|
||||||
|
}
|
||||||
|
|
||||||
while (!of_parse_phandle_with_args(dev->of_node, "iommus",
|
while (!of_parse_phandle_with_args(dev->of_node, "iommus",
|
||||||
"#iommu-cells",
|
"#iommu-cells",
|
||||||
|
@ -444,6 +455,23 @@ static struct iommu_device *mtk_iommu_probe_device(struct device *dev)
|
||||||
|
|
||||||
data = dev_iommu_priv_get(dev);
|
data = dev_iommu_priv_get(dev);
|
||||||
|
|
||||||
|
/* Link the consumer device with the smi-larb device(supplier) */
|
||||||
|
larbid = mt2701_m4u_to_larb(fwspec->ids[0]);
|
||||||
|
for (idx = 1; idx < fwspec->num_ids; idx++) {
|
||||||
|
larbidx = mt2701_m4u_to_larb(fwspec->ids[idx]);
|
||||||
|
if (larbid != larbidx) {
|
||||||
|
dev_err(dev, "Can only use one larb. Fail@larb%d-%d.\n",
|
||||||
|
larbid, larbidx);
|
||||||
|
return ERR_PTR(-EINVAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
larbdev = data->larb_imu[larbid].dev;
|
||||||
|
link = device_link_add(dev, larbdev,
|
||||||
|
DL_FLAG_PM_RUNTIME | DL_FLAG_STATELESS);
|
||||||
|
if (!link)
|
||||||
|
dev_err(dev, "Unable to link %s\n", dev_name(larbdev));
|
||||||
|
|
||||||
return &data->iommu;
|
return &data->iommu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -464,10 +492,18 @@ static void mtk_iommu_probe_finalize(struct device *dev)
|
||||||
static void mtk_iommu_release_device(struct device *dev)
|
static void mtk_iommu_release_device(struct device *dev)
|
||||||
{
|
{
|
||||||
struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
|
struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
|
||||||
|
struct mtk_iommu_data *data;
|
||||||
|
struct device *larbdev;
|
||||||
|
unsigned int larbid;
|
||||||
|
|
||||||
if (!fwspec || fwspec->ops != &mtk_iommu_ops)
|
if (!fwspec || fwspec->ops != &mtk_iommu_ops)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
data = dev_iommu_priv_get(dev);
|
||||||
|
larbid = mt2701_m4u_to_larb(fwspec->ids[0]);
|
||||||
|
larbdev = data->larb_imu[larbid].dev;
|
||||||
|
device_link_remove(dev, larbdev);
|
||||||
|
|
||||||
iommu_fwspec_free(dev);
|
iommu_fwspec_free(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -594,6 +630,10 @@ static int mtk_iommu_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
plarbdev = of_find_device_by_node(larbnode);
|
plarbdev = of_find_device_by_node(larbnode);
|
||||||
if (!plarbdev) {
|
if (!plarbdev) {
|
||||||
|
of_node_put(larbnode);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
if (!plarbdev->dev.driver) {
|
||||||
of_node_put(larbnode);
|
of_node_put(larbnode);
|
||||||
return -EPROBE_DEFER;
|
return -EPROBE_DEFER;
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,6 +160,9 @@ menu "Media core support"
|
||||||
config VIDEO_DEV
|
config VIDEO_DEV
|
||||||
tristate "Video4Linux core"
|
tristate "Video4Linux core"
|
||||||
default MEDIA_CAMERA_SUPPORT || MEDIA_ANALOG_TV_SUPPORT || MEDIA_RADIO_SUPPORT || MEDIA_SDR_SUPPORT || MEDIA_PLATFORM_SUPPORT || MEDIA_TEST_SUPPORT
|
default MEDIA_CAMERA_SUPPORT || MEDIA_ANALOG_TV_SUPPORT || MEDIA_RADIO_SUPPORT || MEDIA_SDR_SUPPORT || MEDIA_PLATFORM_SUPPORT || MEDIA_TEST_SUPPORT
|
||||||
|
depends on (I2C || I2C=n)
|
||||||
|
select RATIONAL
|
||||||
|
select VIDEOBUF2_V4L2 if VIDEOBUF2_CORE
|
||||||
help
|
help
|
||||||
Enables the V4L2 API, used by cameras, analog TV, video grabbers,
|
Enables the V4L2 API, used by cameras, analog TV, video grabbers,
|
||||||
radio devices and by some input devices.
|
radio devices and by some input devices.
|
||||||
|
@ -216,13 +219,12 @@ menu "Media drivers"
|
||||||
comment "Drivers filtered as selected at 'Filter media drivers'"
|
comment "Drivers filtered as selected at 'Filter media drivers'"
|
||||||
depends on MEDIA_SUPPORT_FILTER
|
depends on MEDIA_SUPPORT_FILTER
|
||||||
|
|
||||||
|
comment "Media drivers"
|
||||||
|
|
||||||
source "drivers/media/usb/Kconfig"
|
source "drivers/media/usb/Kconfig"
|
||||||
source "drivers/media/pci/Kconfig"
|
source "drivers/media/pci/Kconfig"
|
||||||
source "drivers/media/radio/Kconfig"
|
source "drivers/media/radio/Kconfig"
|
||||||
|
|
||||||
# Common driver options
|
|
||||||
source "drivers/media/common/Kconfig"
|
|
||||||
|
|
||||||
if MEDIA_PLATFORM_SUPPORT
|
if MEDIA_PLATFORM_SUPPORT
|
||||||
source "drivers/media/platform/Kconfig"
|
source "drivers/media/platform/Kconfig"
|
||||||
source "drivers/media/mmc/Kconfig"
|
source "drivers/media/mmc/Kconfig"
|
||||||
|
@ -234,6 +236,9 @@ endif
|
||||||
|
|
||||||
source "drivers/media/firewire/Kconfig"
|
source "drivers/media/firewire/Kconfig"
|
||||||
|
|
||||||
|
# Common driver options
|
||||||
|
source "drivers/media/common/Kconfig"
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
# when compiled as builtin drivers
|
# when compiled as builtin drivers
|
||||||
#
|
#
|
||||||
obj-y += i2c/ tuners/
|
obj-y += i2c/ tuners/
|
||||||
obj-$(CONFIG_DVB_CORE) += dvb-frontends/
|
obj-$(CONFIG_DVB_CORE) += dvb-frontends/
|
||||||
|
|
||||||
#
|
#
|
||||||
# Now, let's link-in the media controller core
|
# Now, let's link-in the media controller core
|
||||||
|
@ -18,7 +18,7 @@ ifeq ($(CONFIG_MEDIA_CONTROLLER),y)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
obj-$(CONFIG_VIDEO_DEV) += v4l2-core/
|
obj-$(CONFIG_VIDEO_DEV) += v4l2-core/
|
||||||
obj-$(CONFIG_DVB_CORE) += dvb-core/
|
obj-$(CONFIG_DVB_CORE) += dvb-core/
|
||||||
|
|
||||||
# There are both core and drivers at RC subtree - merge before drivers
|
# There are both core and drivers at RC subtree - merge before drivers
|
||||||
obj-y += rc/
|
obj-y += rc/
|
||||||
|
|
|
@ -4,12 +4,12 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
# Please keep it in alphabetic order
|
# Please keep it in alphabetic order
|
||||||
obj-$(CONFIG_CEC_CROS_EC) += cros-ec/
|
obj-$(CONFIG_CEC_CROS_EC) += cros-ec/
|
||||||
obj-$(CONFIG_CEC_GPIO) += cec-gpio/
|
obj-$(CONFIG_CEC_GPIO) += cec-gpio/
|
||||||
obj-$(CONFIG_CEC_MESON_AO) += meson/
|
obj-$(CONFIG_CEC_MESON_AO) += meson/
|
||||||
obj-$(CONFIG_CEC_SAMSUNG_S5P) += s5p/
|
obj-$(CONFIG_CEC_SAMSUNG_S5P) += s5p/
|
||||||
obj-$(CONFIG_CEC_SECO) += seco/
|
obj-$(CONFIG_CEC_SECO) += seco/
|
||||||
obj-$(CONFIG_CEC_STI) += sti/
|
obj-$(CONFIG_CEC_STI) += sti/
|
||||||
obj-$(CONFIG_CEC_STM32) += stm32/
|
obj-$(CONFIG_CEC_STM32) += stm32/
|
||||||
obj-$(CONFIG_CEC_TEGRA) += tegra/
|
obj-$(CONFIG_CEC_TEGRA) += tegra/
|
||||||
|
|
||||||
|
|
|
@ -215,6 +215,8 @@ struct cec_dmi_match {
|
||||||
static const struct cec_dmi_match cec_dmi_match_table[] = {
|
static const struct cec_dmi_match cec_dmi_match_table[] = {
|
||||||
/* Google Fizz */
|
/* Google Fizz */
|
||||||
{ "Google", "Fizz", "0000:00:02.0", "Port B" },
|
{ "Google", "Fizz", "0000:00:02.0", "Port B" },
|
||||||
|
/* Google Brask */
|
||||||
|
{ "Google", "Brask", "0000:00:02.0", "Port B" },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct device *cros_ec_cec_find_hdmi_dev(struct device *dev,
|
static struct device *cros_ec_cec_find_hdmi_dev(struct device *dev,
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/dmi.h>
|
#include <linux/dmi.h>
|
||||||
#include <linux/gpio/consumer.h>
|
#include <linux/gpio/consumer.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
@ -129,7 +128,7 @@ static int secocec_adap_enable(struct cec_adapter *adap, bool enable)
|
||||||
if (status)
|
if (status)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
dev_dbg(dev, "Device enabled");
|
dev_dbg(dev, "Device enabled\n");
|
||||||
} else {
|
} else {
|
||||||
/* Clear the status register */
|
/* Clear the status register */
|
||||||
status = smb_rd16(SECOCEC_STATUS_REG_1, &val);
|
status = smb_rd16(SECOCEC_STATUS_REG_1, &val);
|
||||||
|
@ -141,7 +140,7 @@ static int secocec_adap_enable(struct cec_adapter *adap, bool enable)
|
||||||
~SECOCEC_ENABLE_REG_1_CEC &
|
~SECOCEC_ENABLE_REG_1_CEC &
|
||||||
~SECOCEC_ENABLE_REG_1_IR);
|
~SECOCEC_ENABLE_REG_1_IR);
|
||||||
|
|
||||||
dev_dbg(dev, "Device disabled");
|
dev_dbg(dev, "Device disabled\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -264,12 +263,12 @@ static void secocec_rx_done(struct cec_adapter *adap, u16 status_val)
|
||||||
|
|
||||||
if (status_val & SECOCEC_STATUS_RX_OVERFLOW_MASK) {
|
if (status_val & SECOCEC_STATUS_RX_OVERFLOW_MASK) {
|
||||||
/* NOTE: Untested, it also might not be necessary */
|
/* NOTE: Untested, it also might not be necessary */
|
||||||
dev_warn(dev, "Received more than 16 bytes. Discarding");
|
dev_warn(dev, "Received more than 16 bytes. Discarding\n");
|
||||||
flag_overflow = true;
|
flag_overflow = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status_val & SECOCEC_STATUS_RX_ERROR_MASK) {
|
if (status_val & SECOCEC_STATUS_RX_ERROR_MASK) {
|
||||||
dev_warn(dev, "Message received with errors. Discarding");
|
dev_warn(dev, "Message received with errors. Discarding\n");
|
||||||
status = -EIO;
|
status = -EIO;
|
||||||
goto rxerr;
|
goto rxerr;
|
||||||
}
|
}
|
||||||
|
@ -390,12 +389,12 @@ static int secocec_ir_probe(void *priv)
|
||||||
if (status != 0)
|
if (status != 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
dev_dbg(dev, "IR enabled");
|
dev_dbg(dev, "IR enabled\n");
|
||||||
|
|
||||||
status = devm_rc_register_device(dev, cec->ir);
|
status = devm_rc_register_device(dev, cec->ir);
|
||||||
|
|
||||||
if (status) {
|
if (status) {
|
||||||
dev_err(dev, "Failed to prepare input device");
|
dev_err(dev, "Failed to prepare input device\n");
|
||||||
cec->ir = NULL;
|
cec->ir = NULL;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
@ -408,7 +407,7 @@ err:
|
||||||
smb_wr16(SECOCEC_ENABLE_REG_1,
|
smb_wr16(SECOCEC_ENABLE_REG_1,
|
||||||
val & ~SECOCEC_ENABLE_REG_1_IR);
|
val & ~SECOCEC_ENABLE_REG_1_IR);
|
||||||
|
|
||||||
dev_dbg(dev, "IR disabled");
|
dev_dbg(dev, "IR disabled\n");
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -431,13 +430,13 @@ static int secocec_ir_rx(struct secocec_data *priv)
|
||||||
|
|
||||||
rc_keydown(cec->ir, RC_PROTO_RC5, RC_SCANCODE_RC5(addr, key), toggle);
|
rc_keydown(cec->ir, RC_PROTO_RC5, RC_SCANCODE_RC5(addr, key), toggle);
|
||||||
|
|
||||||
dev_dbg(dev, "IR key pressed: 0x%02x addr 0x%02x toggle 0x%02x", key,
|
dev_dbg(dev, "IR key pressed: 0x%02x addr 0x%02x toggle 0x%02x\n", key,
|
||||||
addr, toggle);
|
addr, toggle);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
dev_err(dev, "IR Receive message failed (%d)", status);
|
dev_err(dev, "IR Receive message failed (%d)\n", status);
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -497,7 +496,7 @@ static irqreturn_t secocec_irq_handler(int irq, void *priv)
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
dev_err_once(dev, "IRQ: R/W SMBus operation failed (%d)", status);
|
dev_err_once(dev, "IRQ: R/W SMBus operation failed %d\n", status);
|
||||||
|
|
||||||
/* Reset status register */
|
/* Reset status register */
|
||||||
val = SECOCEC_STATUS_REG_1_CEC | SECOCEC_STATUS_REG_1_IR;
|
val = SECOCEC_STATUS_REG_1_CEC | SECOCEC_STATUS_REG_1_IR;
|
||||||
|
@ -551,18 +550,18 @@ static int secocec_acpi_probe(struct secocec_data *sdev)
|
||||||
struct gpio_desc *gpio;
|
struct gpio_desc *gpio;
|
||||||
int irq = 0;
|
int irq = 0;
|
||||||
|
|
||||||
gpio = devm_gpiod_get(dev, NULL, GPIOF_IN);
|
gpio = devm_gpiod_get(dev, NULL, GPIOD_IN);
|
||||||
if (IS_ERR(gpio)) {
|
if (IS_ERR(gpio)) {
|
||||||
dev_err(dev, "Cannot request interrupt gpio");
|
dev_err(dev, "Cannot request interrupt gpio\n");
|
||||||
return PTR_ERR(gpio);
|
return PTR_ERR(gpio);
|
||||||
}
|
}
|
||||||
|
|
||||||
irq = gpiod_to_irq(gpio);
|
irq = gpiod_to_irq(gpio);
|
||||||
if (irq < 0) {
|
if (irq < 0) {
|
||||||
dev_err(dev, "Cannot find valid irq");
|
dev_err(dev, "Cannot find valid irq\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
dev_dbg(dev, "irq-gpio is bound to IRQ %d", irq);
|
dev_dbg(dev, "irq-gpio is bound to IRQ %d\n", irq);
|
||||||
|
|
||||||
sdev->irq = irq;
|
sdev->irq = irq;
|
||||||
|
|
||||||
|
@ -590,7 +589,7 @@ static int secocec_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
/* Request SMBus regions */
|
/* Request SMBus regions */
|
||||||
if (!request_muxed_region(BRA_SMB_BASE_ADDR, 7, "CEC00001")) {
|
if (!request_muxed_region(BRA_SMB_BASE_ADDR, 7, "CEC00001")) {
|
||||||
dev_err(dev, "Request memory region failed");
|
dev_err(dev, "Request memory region failed\n");
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -598,14 +597,14 @@ static int secocec_probe(struct platform_device *pdev)
|
||||||
secocec->dev = dev;
|
secocec->dev = dev;
|
||||||
|
|
||||||
if (!has_acpi_companion(dev)) {
|
if (!has_acpi_companion(dev)) {
|
||||||
dev_dbg(dev, "Cannot find any ACPI companion");
|
dev_dbg(dev, "Cannot find any ACPI companion\n");
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = secocec_acpi_probe(secocec);
|
ret = secocec_acpi_probe(secocec);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "Cannot assign gpio to IRQ");
|
dev_err(dev, "Cannot assign gpio to IRQ\n");
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
@ -613,11 +612,11 @@ static int secocec_probe(struct platform_device *pdev)
|
||||||
/* Firmware version check */
|
/* Firmware version check */
|
||||||
ret = smb_rd16(SECOCEC_VERSION, &val);
|
ret = smb_rd16(SECOCEC_VERSION, &val);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "Cannot check fw version");
|
dev_err(dev, "Cannot check fw version\n");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
if (val < SECOCEC_LATEST_FW) {
|
if (val < SECOCEC_LATEST_FW) {
|
||||||
dev_err(dev, "CEC Firmware not supported (v.%04x). Use ver > v.%04x",
|
dev_err(dev, "CEC Firmware not supported (v.%04x). Use ver > v.%04x\n",
|
||||||
val, SECOCEC_LATEST_FW);
|
val, SECOCEC_LATEST_FW);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -631,7 +630,7 @@ static int secocec_probe(struct platform_device *pdev)
|
||||||
dev_name(&pdev->dev), secocec);
|
dev_name(&pdev->dev), secocec);
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "Cannot request IRQ %d", secocec->irq);
|
dev_err(dev, "Cannot request IRQ %d\n", secocec->irq);
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
@ -666,7 +665,7 @@ static int secocec_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
platform_set_drvdata(pdev, secocec);
|
platform_set_drvdata(pdev, secocec);
|
||||||
|
|
||||||
dev_dbg(dev, "Device registered");
|
dev_dbg(dev, "Device registered\n");
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -691,14 +690,14 @@ static int secocec_remove(struct platform_device *pdev)
|
||||||
|
|
||||||
smb_wr16(SECOCEC_ENABLE_REG_1, val & ~SECOCEC_ENABLE_REG_1_IR);
|
smb_wr16(SECOCEC_ENABLE_REG_1, val & ~SECOCEC_ENABLE_REG_1_IR);
|
||||||
|
|
||||||
dev_dbg(&pdev->dev, "IR disabled");
|
dev_dbg(&pdev->dev, "IR disabled\n");
|
||||||
}
|
}
|
||||||
cec_notifier_cec_adap_unregister(secocec->notifier, secocec->cec_adap);
|
cec_notifier_cec_adap_unregister(secocec->notifier, secocec->cec_adap);
|
||||||
cec_unregister_adapter(secocec->cec_adap);
|
cec_unregister_adapter(secocec->cec_adap);
|
||||||
|
|
||||||
release_region(BRA_SMB_BASE_ADDR, 7);
|
release_region(BRA_SMB_BASE_ADDR, 7);
|
||||||
|
|
||||||
dev_dbg(&pdev->dev, "CEC device removed");
|
dev_dbg(&pdev->dev, "CEC device removed\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -709,7 +708,7 @@ static int secocec_suspend(struct device *dev)
|
||||||
int status;
|
int status;
|
||||||
u16 val;
|
u16 val;
|
||||||
|
|
||||||
dev_dbg(dev, "Device going to suspend, disabling");
|
dev_dbg(dev, "Device going to suspend, disabling\n");
|
||||||
|
|
||||||
/* Clear the status register */
|
/* Clear the status register */
|
||||||
status = smb_rd16(SECOCEC_STATUS_REG_1, &val);
|
status = smb_rd16(SECOCEC_STATUS_REG_1, &val);
|
||||||
|
@ -733,7 +732,7 @@ static int secocec_suspend(struct device *dev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
dev_err(dev, "Suspend failed (err: %d)", status);
|
dev_err(dev, "Suspend failed: %d\n", status);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -742,7 +741,7 @@ static int secocec_resume(struct device *dev)
|
||||||
int status;
|
int status;
|
||||||
u16 val;
|
u16 val;
|
||||||
|
|
||||||
dev_dbg(dev, "Resuming device from suspend");
|
dev_dbg(dev, "Resuming device from suspend\n");
|
||||||
|
|
||||||
/* Clear the status register */
|
/* Clear the status register */
|
||||||
status = smb_rd16(SECOCEC_STATUS_REG_1, &val);
|
status = smb_rd16(SECOCEC_STATUS_REG_1, &val);
|
||||||
|
@ -762,12 +761,12 @@ static int secocec_resume(struct device *dev)
|
||||||
if (status)
|
if (status)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
dev_dbg(dev, "Device resumed from suspend");
|
dev_dbg(dev, "Device resumed from suspend\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
dev_err(dev, "Resume failed (err: %d)", status);
|
dev_err(dev, "Resume failed: %d\n", status);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,14 @@ config MEDIA_COMMON_OPTIONS
|
||||||
comment "common driver options"
|
comment "common driver options"
|
||||||
depends on MEDIA_COMMON_OPTIONS
|
depends on MEDIA_COMMON_OPTIONS
|
||||||
|
|
||||||
|
config CYPRESS_FIRMWARE
|
||||||
|
tristate
|
||||||
|
depends on USB
|
||||||
|
|
||||||
|
config TTPCI_EEPROM
|
||||||
|
tristate
|
||||||
|
depends on I2C
|
||||||
|
|
||||||
config VIDEO_CX2341X
|
config VIDEO_CX2341X
|
||||||
tristate
|
tristate
|
||||||
|
|
||||||
|
@ -13,16 +21,8 @@ config VIDEO_TVEEPROM
|
||||||
tristate
|
tristate
|
||||||
depends on I2C
|
depends on I2C
|
||||||
|
|
||||||
config TTPCI_EEPROM
|
|
||||||
tristate
|
|
||||||
depends on I2C
|
|
||||||
|
|
||||||
config CYPRESS_FIRMWARE
|
|
||||||
tristate
|
|
||||||
depends on USB
|
|
||||||
|
|
||||||
source "drivers/media/common/videobuf2/Kconfig"
|
|
||||||
source "drivers/media/common/b2c2/Kconfig"
|
source "drivers/media/common/b2c2/Kconfig"
|
||||||
source "drivers/media/common/saa7146/Kconfig"
|
source "drivers/media/common/saa7146/Kconfig"
|
||||||
source "drivers/media/common/siano/Kconfig"
|
source "drivers/media/common/siano/Kconfig"
|
||||||
source "drivers/media/common/v4l2-tpg/Kconfig"
|
source "drivers/media/common/v4l2-tpg/Kconfig"
|
||||||
|
source "drivers/media/common/videobuf2/Kconfig"
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
obj-y += b2c2/ saa7146/ siano/ v4l2-tpg/ videobuf2/
|
obj-y += b2c2/ saa7146/ siano/ v4l2-tpg/ videobuf2/
|
||||||
obj-$(CONFIG_VIDEO_CX2341X) += cx2341x.o
|
|
||||||
obj-$(CONFIG_VIDEO_TVEEPROM) += tveeprom.o
|
# Please keep it alphabetically sorted by Kconfig name
|
||||||
|
# (e. g. LC_ALL=C sort Makefile)
|
||||||
obj-$(CONFIG_CYPRESS_FIRMWARE) += cypress_firmware.o
|
obj-$(CONFIG_CYPRESS_FIRMWARE) += cypress_firmware.o
|
||||||
obj-$(CONFIG_TTPCI_EEPROM) += ttpci-eeprom.o
|
obj-$(CONFIG_TTPCI_EEPROM) += ttpci-eeprom.o
|
||||||
|
obj-$(CONFIG_VIDEO_CX2341X) += cx2341x.o
|
||||||
|
obj-$(CONFIG_VIDEO_TVEEPROM) += tveeprom.o
|
||||||
|
|
|
@ -5,6 +5,6 @@ config VIDEO_SAA7146
|
||||||
|
|
||||||
config VIDEO_SAA7146_VV
|
config VIDEO_SAA7146_VV
|
||||||
tristate
|
tristate
|
||||||
depends on VIDEO_V4L2
|
depends on VIDEO_DEV
|
||||||
select VIDEOBUF_DMA_SG
|
select VIDEOBUF_DMA_SG
|
||||||
select VIDEO_SAA7146
|
select VIDEO_SAA7146
|
||||||
|
|
|
@ -6,10 +6,12 @@ ifeq ($(CONFIG_TRACEPOINTS),y)
|
||||||
videobuf2-common-objs += vb2-trace.o
|
videobuf2-common-objs += vb2-trace.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Please keep it alphabetically sorted by Kconfig name
|
||||||
|
# (e. g. LC_ALL=C sort Makefile)
|
||||||
obj-$(CONFIG_VIDEOBUF2_CORE) += videobuf2-common.o
|
obj-$(CONFIG_VIDEOBUF2_CORE) += videobuf2-common.o
|
||||||
obj-$(CONFIG_VIDEOBUF2_V4L2) += videobuf2-v4l2.o
|
|
||||||
obj-$(CONFIG_VIDEOBUF2_MEMOPS) += videobuf2-memops.o
|
|
||||||
obj-$(CONFIG_VIDEOBUF2_VMALLOC) += videobuf2-vmalloc.o
|
|
||||||
obj-$(CONFIG_VIDEOBUF2_DMA_CONTIG) += videobuf2-dma-contig.o
|
obj-$(CONFIG_VIDEOBUF2_DMA_CONTIG) += videobuf2-dma-contig.o
|
||||||
obj-$(CONFIG_VIDEOBUF2_DMA_SG) += videobuf2-dma-sg.o
|
obj-$(CONFIG_VIDEOBUF2_DMA_SG) += videobuf2-dma-sg.o
|
||||||
obj-$(CONFIG_VIDEOBUF2_DVB) += videobuf2-dvb.o
|
obj-$(CONFIG_VIDEOBUF2_DVB) += videobuf2-dvb.o
|
||||||
|
obj-$(CONFIG_VIDEOBUF2_MEMOPS) += videobuf2-memops.o
|
||||||
|
obj-$(CONFIG_VIDEOBUF2_V4L2) += videobuf2-v4l2.o
|
||||||
|
obj-$(CONFIG_VIDEOBUF2_VMALLOC) += videobuf2-vmalloc.o
|
||||||
|
|
|
@ -132,12 +132,12 @@ static void vb2_dc_prepare(void *buf_priv)
|
||||||
if (!buf->non_coherent_mem)
|
if (!buf->non_coherent_mem)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* For both USERPTR and non-coherent MMAP */
|
|
||||||
dma_sync_sgtable_for_device(buf->dev, sgt, buf->dma_dir);
|
|
||||||
|
|
||||||
/* Non-coherent MMAP only */
|
/* Non-coherent MMAP only */
|
||||||
if (buf->vaddr)
|
if (buf->vaddr)
|
||||||
flush_kernel_vmap_range(buf->vaddr, buf->size);
|
flush_kernel_vmap_range(buf->vaddr, buf->size);
|
||||||
|
|
||||||
|
/* For both USERPTR and non-coherent MMAP */
|
||||||
|
dma_sync_sgtable_for_device(buf->dev, sgt, buf->dma_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vb2_dc_finish(void *buf_priv)
|
static void vb2_dc_finish(void *buf_priv)
|
||||||
|
@ -152,12 +152,12 @@ static void vb2_dc_finish(void *buf_priv)
|
||||||
if (!buf->non_coherent_mem)
|
if (!buf->non_coherent_mem)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* For both USERPTR and non-coherent MMAP */
|
|
||||||
dma_sync_sgtable_for_cpu(buf->dev, sgt, buf->dma_dir);
|
|
||||||
|
|
||||||
/* Non-coherent MMAP only */
|
/* Non-coherent MMAP only */
|
||||||
if (buf->vaddr)
|
if (buf->vaddr)
|
||||||
invalidate_kernel_vmap_range(buf->vaddr, buf->size);
|
invalidate_kernel_vmap_range(buf->vaddr, buf->size);
|
||||||
|
|
||||||
|
/* For both USERPTR and non-coherent MMAP */
|
||||||
|
dma_sync_sgtable_for_cpu(buf->dev, sgt, buf->dma_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************/
|
/*********************************************/
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
config DVB_MMAP
|
config DVB_MMAP
|
||||||
bool "Enable DVB memory-mapped API (EXPERIMENTAL)"
|
bool "Enable DVB memory-mapped API (EXPERIMENTAL)"
|
||||||
depends on DVB_CORE
|
depends on DVB_CORE
|
||||||
depends on VIDEO_V4L2=y || VIDEO_V4L2=DVB_CORE
|
depends on VIDEO_DEV=y || VIDEO_DEV=DVB_CORE
|
||||||
select VIDEOBUF2_VMALLOC
|
select VIDEOBUF2_VMALLOC
|
||||||
help
|
help
|
||||||
This option enables DVB experimental memory-mapped API, which
|
This option enables DVB experimental memory-mapped API, which
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -10,126 +10,129 @@ ifdef CONFIG_DVB_RTL2832_SDR
|
||||||
ccflags-y += -I$(srctree)/drivers/media/usb/dvb-usb-v2
|
ccflags-y += -I$(srctree)/drivers/media/usb/dvb-usb-v2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
cxd2820r-objs := cxd2820r_core.o cxd2820r_c.o cxd2820r_t.o cxd2820r_t2.o
|
||||||
|
drxd-objs := drxd_firm.o drxd_hard.o
|
||||||
|
drxk-objs := drxk_hard.o
|
||||||
stb0899-objs := stb0899_drv.o stb0899_algo.o
|
stb0899-objs := stb0899_drv.o stb0899_algo.o
|
||||||
stv0900-objs := stv0900_core.o stv0900_sw.o
|
stv0900-objs := stv0900_core.o stv0900_sw.o
|
||||||
drxd-objs := drxd_firm.o drxd_hard.o
|
|
||||||
cxd2820r-objs := cxd2820r_core.o cxd2820r_c.o cxd2820r_t.o cxd2820r_t2.o
|
|
||||||
drxk-objs := drxk_hard.o
|
|
||||||
|
|
||||||
obj-$(CONFIG_DVB_PLL) += dvb-pll.o
|
# Please keep it alphabetically sorted by Kconfig name
|
||||||
obj-$(CONFIG_DVB_STV0299) += stv0299.o
|
# (e. g. LC_ALL=C sort Makefile)
|
||||||
obj-$(CONFIG_DVB_STB0899) += stb0899.o
|
|
||||||
obj-$(CONFIG_DVB_STB6100) += stb6100.o
|
obj-$(CONFIG_DVB_A8293) += a8293.o
|
||||||
|
obj-$(CONFIG_DVB_AF9013) += af9013.o
|
||||||
|
obj-$(CONFIG_DVB_AF9033) += af9033.o
|
||||||
|
obj-$(CONFIG_DVB_AS102_FE) += as102_fe.o
|
||||||
|
obj-$(CONFIG_DVB_ASCOT2E) += ascot2e.o
|
||||||
|
obj-$(CONFIG_DVB_ATBM8830) += atbm8830.o
|
||||||
|
obj-$(CONFIG_DVB_AU8522) += au8522_common.o
|
||||||
|
obj-$(CONFIG_DVB_AU8522_DTV) += au8522_dig.o
|
||||||
|
obj-$(CONFIG_DVB_AU8522_V4L) += au8522_decoder.o
|
||||||
|
obj-$(CONFIG_DVB_BCM3510) += bcm3510.o
|
||||||
obj-$(CONFIG_DVB_CX22700) += cx22700.o
|
obj-$(CONFIG_DVB_CX22700) += cx22700.o
|
||||||
obj-$(CONFIG_DVB_S5H1432) += s5h1432.o
|
obj-$(CONFIG_DVB_CX22702) += cx22702.o
|
||||||
obj-$(CONFIG_DVB_CX24110) += cx24110.o
|
obj-$(CONFIG_DVB_CX24110) += cx24110.o
|
||||||
obj-$(CONFIG_DVB_TDA8083) += tda8083.o
|
obj-$(CONFIG_DVB_CX24116) += cx24116.o
|
||||||
obj-$(CONFIG_DVB_L64781) += l64781.o
|
obj-$(CONFIG_DVB_CX24117) += cx24117.o
|
||||||
|
obj-$(CONFIG_DVB_CX24120) += cx24120.o
|
||||||
|
obj-$(CONFIG_DVB_CX24123) += cx24123.o
|
||||||
|
obj-$(CONFIG_DVB_CXD2099) += cxd2099.o
|
||||||
|
obj-$(CONFIG_DVB_CXD2820R) += cxd2820r.o
|
||||||
|
obj-$(CONFIG_DVB_CXD2841ER) += cxd2841er.o
|
||||||
|
obj-$(CONFIG_DVB_CXD2880) += cxd2880/
|
||||||
obj-$(CONFIG_DVB_DIB3000MB) += dib3000mb.o
|
obj-$(CONFIG_DVB_DIB3000MB) += dib3000mb.o
|
||||||
obj-$(CONFIG_DVB_DIB3000MC) += dib3000mc.o dibx000_common.o
|
obj-$(CONFIG_DVB_DIB3000MC) += dib3000mc.o dibx000_common.o
|
||||||
obj-$(CONFIG_DVB_DIB7000M) += dib7000m.o dibx000_common.o
|
obj-$(CONFIG_DVB_DIB7000M) += dib7000m.o dibx000_common.o
|
||||||
obj-$(CONFIG_DVB_DIB7000P) += dib7000p.o dibx000_common.o
|
obj-$(CONFIG_DVB_DIB7000P) += dib7000p.o dibx000_common.o
|
||||||
obj-$(CONFIG_DVB_DIB8000) += dib8000.o dibx000_common.o
|
obj-$(CONFIG_DVB_DIB8000) += dib8000.o dibx000_common.o
|
||||||
obj-$(CONFIG_DVB_DIB9000) += dib9000.o dibx000_common.o
|
obj-$(CONFIG_DVB_DIB9000) += dib9000.o dibx000_common.o
|
||||||
obj-$(CONFIG_DVB_MT312) += mt312.o
|
obj-$(CONFIG_DVB_DRX39XYJ) += drx39xyj/
|
||||||
obj-$(CONFIG_DVB_VES1820) += ves1820.o
|
|
||||||
obj-$(CONFIG_DVB_VES1X93) += ves1x93.o
|
|
||||||
obj-$(CONFIG_DVB_TDA1004X) += tda1004x.o
|
|
||||||
obj-$(CONFIG_DVB_SP887X) += sp887x.o
|
|
||||||
obj-$(CONFIG_DVB_NXT6000) += nxt6000.o
|
|
||||||
obj-$(CONFIG_DVB_MT352) += mt352.o
|
|
||||||
obj-$(CONFIG_DVB_ZL10036) += zl10036.o
|
|
||||||
obj-$(CONFIG_DVB_ZL10039) += zl10039.o
|
|
||||||
obj-$(CONFIG_DVB_ZL10353) += zl10353.o
|
|
||||||
obj-$(CONFIG_DVB_CX22702) += cx22702.o
|
|
||||||
obj-$(CONFIG_DVB_DRXD) += drxd.o
|
obj-$(CONFIG_DVB_DRXD) += drxd.o
|
||||||
obj-$(CONFIG_DVB_TDA10021) += tda10021.o
|
obj-$(CONFIG_DVB_DRXK) += drxk.o
|
||||||
obj-$(CONFIG_DVB_TDA10023) += tda10023.o
|
obj-$(CONFIG_DVB_DS3000) += ds3000.o
|
||||||
obj-$(CONFIG_DVB_STV0297) += stv0297.o
|
obj-$(CONFIG_DVB_DUMMY_FE) += dvb_dummy_fe.o
|
||||||
obj-$(CONFIG_DVB_NXT200X) += nxt200x.o
|
obj-$(CONFIG_DVB_EC100) += ec100.o
|
||||||
obj-$(CONFIG_DVB_OR51211) += or51211.o
|
obj-$(CONFIG_DVB_GP8PSK_FE) += gp8psk-fe.o
|
||||||
obj-$(CONFIG_DVB_OR51132) += or51132.o
|
obj-$(CONFIG_DVB_HELENE) += helene.o
|
||||||
obj-$(CONFIG_DVB_BCM3510) += bcm3510.o
|
obj-$(CONFIG_DVB_HORUS3A) += horus3a.o
|
||||||
obj-$(CONFIG_DVB_S5H1420) += s5h1420.o
|
obj-$(CONFIG_DVB_ISL6405) += isl6405.o
|
||||||
obj-$(CONFIG_DVB_LGDT330X) += lgdt330x.o
|
obj-$(CONFIG_DVB_ISL6421) += isl6421.o
|
||||||
|
obj-$(CONFIG_DVB_ISL6423) += isl6423.o
|
||||||
|
obj-$(CONFIG_DVB_IX2505V) += ix2505v.o
|
||||||
|
obj-$(CONFIG_DVB_L64781) += l64781.o
|
||||||
|
obj-$(CONFIG_DVB_LG2160) += lg2160.o
|
||||||
obj-$(CONFIG_DVB_LGDT3305) += lgdt3305.o
|
obj-$(CONFIG_DVB_LGDT3305) += lgdt3305.o
|
||||||
obj-$(CONFIG_DVB_LGDT3306A) += lgdt3306a.o
|
obj-$(CONFIG_DVB_LGDT3306A) += lgdt3306a.o
|
||||||
obj-$(CONFIG_DVB_MXL692) += mxl692.o
|
obj-$(CONFIG_DVB_LGDT330X) += lgdt330x.o
|
||||||
obj-$(CONFIG_DVB_LG2160) += lg2160.o
|
obj-$(CONFIG_DVB_LGS8GL5) += lgs8gl5.o
|
||||||
obj-$(CONFIG_DVB_CX24123) += cx24123.o
|
obj-$(CONFIG_DVB_LGS8GXX) += lgs8gxx.o
|
||||||
obj-$(CONFIG_DVB_LNBH25) += lnbh25.o
|
obj-$(CONFIG_DVB_LNBH25) += lnbh25.o
|
||||||
obj-$(CONFIG_DVB_LNBH29) += lnbh29.o
|
obj-$(CONFIG_DVB_LNBH29) += lnbh29.o
|
||||||
obj-$(CONFIG_DVB_LNBP21) += lnbp21.o
|
obj-$(CONFIG_DVB_LNBP21) += lnbp21.o
|
||||||
obj-$(CONFIG_DVB_LNBP22) += lnbp22.o
|
obj-$(CONFIG_DVB_LNBP22) += lnbp22.o
|
||||||
obj-$(CONFIG_DVB_ISL6405) += isl6405.o
|
|
||||||
obj-$(CONFIG_DVB_ISL6421) += isl6421.o
|
|
||||||
obj-$(CONFIG_DVB_TDA10086) += tda10086.o
|
|
||||||
obj-$(CONFIG_DVB_TDA826X) += tda826x.o
|
|
||||||
obj-$(CONFIG_DVB_TDA8261) += tda8261.o
|
|
||||||
obj-$(CONFIG_DVB_TUNER_DIB0070) += dib0070.o
|
|
||||||
obj-$(CONFIG_DVB_TUNER_DIB0090) += dib0090.o
|
|
||||||
obj-$(CONFIG_DVB_TUA6100) += tua6100.o
|
|
||||||
obj-$(CONFIG_DVB_S5H1409) += s5h1409.o
|
|
||||||
obj-$(CONFIG_DVB_TUNER_ITD1000) += itd1000.o
|
|
||||||
obj-$(CONFIG_DVB_AU8522) += au8522_common.o
|
|
||||||
obj-$(CONFIG_DVB_AU8522_DTV) += au8522_dig.o
|
|
||||||
obj-$(CONFIG_DVB_AU8522_V4L) += au8522_decoder.o
|
|
||||||
obj-$(CONFIG_DVB_TDA10048) += tda10048.o
|
|
||||||
obj-$(CONFIG_DVB_TUNER_CX24113) += cx24113.o
|
|
||||||
obj-$(CONFIG_DVB_S5H1411) += s5h1411.o
|
|
||||||
obj-$(CONFIG_DVB_LGS8GL5) += lgs8gl5.o
|
|
||||||
obj-$(CONFIG_DVB_TDA665x) += tda665x.o
|
|
||||||
obj-$(CONFIG_DVB_LGS8GXX) += lgs8gxx.o
|
|
||||||
obj-$(CONFIG_DVB_ATBM8830) += atbm8830.o
|
|
||||||
obj-$(CONFIG_DVB_DUMMY_FE) += dvb_dummy_fe.o
|
|
||||||
obj-$(CONFIG_DVB_AF9013) += af9013.o
|
|
||||||
obj-$(CONFIG_DVB_CX24116) += cx24116.o
|
|
||||||
obj-$(CONFIG_DVB_CX24117) += cx24117.o
|
|
||||||
obj-$(CONFIG_DVB_CX24120) += cx24120.o
|
|
||||||
obj-$(CONFIG_DVB_SI21XX) += si21xx.o
|
|
||||||
obj-$(CONFIG_DVB_SI2168) += si2168.o
|
|
||||||
obj-$(CONFIG_DVB_STV0288) += stv0288.o
|
|
||||||
obj-$(CONFIG_DVB_STB6000) += stb6000.o
|
|
||||||
obj-$(CONFIG_DVB_S921) += s921.o
|
|
||||||
obj-$(CONFIG_DVB_STV6110) += stv6110.o
|
|
||||||
obj-$(CONFIG_DVB_STV0900) += stv0900.o
|
|
||||||
obj-$(CONFIG_DVB_STV090x) += stv090x.o
|
|
||||||
obj-$(CONFIG_DVB_STV6110x) += stv6110x.o
|
|
||||||
obj-$(CONFIG_DVB_M88DS3103) += m88ds3103.o
|
obj-$(CONFIG_DVB_M88DS3103) += m88ds3103.o
|
||||||
|
obj-$(CONFIG_DVB_M88RS2000) += m88rs2000.o
|
||||||
|
obj-$(CONFIG_DVB_MB86A16) += mb86a16.o
|
||||||
|
obj-$(CONFIG_DVB_MB86A20S) += mb86a20s.o
|
||||||
|
obj-$(CONFIG_DVB_MN88443X) += mn88443x.o
|
||||||
obj-$(CONFIG_DVB_MN88472) += mn88472.o
|
obj-$(CONFIG_DVB_MN88472) += mn88472.o
|
||||||
obj-$(CONFIG_DVB_MN88473) += mn88473.o
|
obj-$(CONFIG_DVB_MN88473) += mn88473.o
|
||||||
obj-$(CONFIG_DVB_ISL6423) += isl6423.o
|
obj-$(CONFIG_DVB_MT312) += mt312.o
|
||||||
obj-$(CONFIG_DVB_EC100) += ec100.o
|
obj-$(CONFIG_DVB_MT352) += mt352.o
|
||||||
obj-$(CONFIG_DVB_DS3000) += ds3000.o
|
|
||||||
obj-$(CONFIG_DVB_TS2020) += ts2020.o
|
|
||||||
obj-$(CONFIG_DVB_MB86A16) += mb86a16.o
|
|
||||||
obj-$(CONFIG_DVB_DRX39XYJ) += drx39xyj/
|
|
||||||
obj-$(CONFIG_DVB_MB86A20S) += mb86a20s.o
|
|
||||||
obj-$(CONFIG_DVB_IX2505V) += ix2505v.o
|
|
||||||
obj-$(CONFIG_DVB_STV0367) += stv0367.o
|
|
||||||
obj-$(CONFIG_DVB_CXD2820R) += cxd2820r.o
|
|
||||||
obj-$(CONFIG_DVB_CXD2841ER) += cxd2841er.o
|
|
||||||
obj-$(CONFIG_DVB_DRXK) += drxk.o
|
|
||||||
obj-$(CONFIG_DVB_TDA18271C2DD) += tda18271c2dd.o
|
|
||||||
obj-$(CONFIG_DVB_STV0910) += stv0910.o
|
|
||||||
obj-$(CONFIG_DVB_STV6111) += stv6111.o
|
|
||||||
obj-$(CONFIG_DVB_MXL5XX) += mxl5xx.o
|
obj-$(CONFIG_DVB_MXL5XX) += mxl5xx.o
|
||||||
obj-$(CONFIG_DVB_SI2165) += si2165.o
|
obj-$(CONFIG_DVB_MXL692) += mxl692.o
|
||||||
obj-$(CONFIG_DVB_A8293) += a8293.o
|
obj-$(CONFIG_DVB_NXT200X) += nxt200x.o
|
||||||
obj-$(CONFIG_DVB_SP2) += sp2.o
|
obj-$(CONFIG_DVB_NXT6000) += nxt6000.o
|
||||||
obj-$(CONFIG_DVB_TDA10071) += tda10071.o
|
obj-$(CONFIG_DVB_OR51132) += or51132.o
|
||||||
|
obj-$(CONFIG_DVB_OR51211) += or51211.o
|
||||||
|
obj-$(CONFIG_DVB_PLL) += dvb-pll.o
|
||||||
obj-$(CONFIG_DVB_RTL2830) += rtl2830.o
|
obj-$(CONFIG_DVB_RTL2830) += rtl2830.o
|
||||||
obj-$(CONFIG_DVB_RTL2832) += rtl2832.o
|
obj-$(CONFIG_DVB_RTL2832) += rtl2832.o
|
||||||
obj-$(CONFIG_DVB_RTL2832_SDR) += rtl2832_sdr.o
|
obj-$(CONFIG_DVB_RTL2832_SDR) += rtl2832_sdr.o
|
||||||
obj-$(CONFIG_DVB_M88RS2000) += m88rs2000.o
|
obj-$(CONFIG_DVB_S5H1409) += s5h1409.o
|
||||||
obj-$(CONFIG_DVB_AF9033) += af9033.o
|
obj-$(CONFIG_DVB_S5H1411) += s5h1411.o
|
||||||
obj-$(CONFIG_DVB_AS102_FE) += as102_fe.o
|
obj-$(CONFIG_DVB_S5H1420) += s5h1420.o
|
||||||
obj-$(CONFIG_DVB_GP8PSK_FE) += gp8psk-fe.o
|
obj-$(CONFIG_DVB_S5H1432) += s5h1432.o
|
||||||
|
obj-$(CONFIG_DVB_S921) += s921.o
|
||||||
|
obj-$(CONFIG_DVB_SI2165) += si2165.o
|
||||||
|
obj-$(CONFIG_DVB_SI2168) += si2168.o
|
||||||
|
obj-$(CONFIG_DVB_SI21XX) += si21xx.o
|
||||||
|
obj-$(CONFIG_DVB_SP2) += sp2.o
|
||||||
|
obj-$(CONFIG_DVB_SP887X) += sp887x.o
|
||||||
|
obj-$(CONFIG_DVB_STB0899) += stb0899.o
|
||||||
|
obj-$(CONFIG_DVB_STB6000) += stb6000.o
|
||||||
|
obj-$(CONFIG_DVB_STB6100) += stb6100.o
|
||||||
|
obj-$(CONFIG_DVB_STV0288) += stv0288.o
|
||||||
|
obj-$(CONFIG_DVB_STV0297) += stv0297.o
|
||||||
|
obj-$(CONFIG_DVB_STV0299) += stv0299.o
|
||||||
|
obj-$(CONFIG_DVB_STV0367) += stv0367.o
|
||||||
|
obj-$(CONFIG_DVB_STV0900) += stv0900.o
|
||||||
|
obj-$(CONFIG_DVB_STV090x) += stv090x.o
|
||||||
|
obj-$(CONFIG_DVB_STV0910) += stv0910.o
|
||||||
|
obj-$(CONFIG_DVB_STV6110) += stv6110.o
|
||||||
|
obj-$(CONFIG_DVB_STV6110x) += stv6110x.o
|
||||||
|
obj-$(CONFIG_DVB_STV6111) += stv6111.o
|
||||||
obj-$(CONFIG_DVB_TC90522) += tc90522.o
|
obj-$(CONFIG_DVB_TC90522) += tc90522.o
|
||||||
obj-$(CONFIG_DVB_MN88443X) += mn88443x.o
|
obj-$(CONFIG_DVB_TDA10021) += tda10021.o
|
||||||
obj-$(CONFIG_DVB_HORUS3A) += horus3a.o
|
obj-$(CONFIG_DVB_TDA10023) += tda10023.o
|
||||||
obj-$(CONFIG_DVB_ASCOT2E) += ascot2e.o
|
obj-$(CONFIG_DVB_TDA10048) += tda10048.o
|
||||||
obj-$(CONFIG_DVB_HELENE) += helene.o
|
obj-$(CONFIG_DVB_TDA1004X) += tda1004x.o
|
||||||
|
obj-$(CONFIG_DVB_TDA10071) += tda10071.o
|
||||||
|
obj-$(CONFIG_DVB_TDA10086) += tda10086.o
|
||||||
|
obj-$(CONFIG_DVB_TDA18271C2DD) += tda18271c2dd.o
|
||||||
|
obj-$(CONFIG_DVB_TDA665x) += tda665x.o
|
||||||
|
obj-$(CONFIG_DVB_TDA8083) += tda8083.o
|
||||||
|
obj-$(CONFIG_DVB_TDA8261) += tda8261.o
|
||||||
|
obj-$(CONFIG_DVB_TDA826X) += tda826x.o
|
||||||
|
obj-$(CONFIG_DVB_TS2020) += ts2020.o
|
||||||
|
obj-$(CONFIG_DVB_TUA6100) += tua6100.o
|
||||||
|
obj-$(CONFIG_DVB_TUNER_CX24113) += cx24113.o
|
||||||
|
obj-$(CONFIG_DVB_TUNER_DIB0070) += dib0070.o
|
||||||
|
obj-$(CONFIG_DVB_TUNER_DIB0090) += dib0090.o
|
||||||
|
obj-$(CONFIG_DVB_TUNER_ITD1000) += itd1000.o
|
||||||
|
obj-$(CONFIG_DVB_VES1820) += ves1820.o
|
||||||
|
obj-$(CONFIG_DVB_VES1X93) += ves1x93.o
|
||||||
obj-$(CONFIG_DVB_ZD1301_DEMOD) += zd1301_demod.o
|
obj-$(CONFIG_DVB_ZD1301_DEMOD) += zd1301_demod.o
|
||||||
obj-$(CONFIG_DVB_CXD2099) += cxd2099.o
|
obj-$(CONFIG_DVB_ZL10036) += zl10036.o
|
||||||
obj-$(CONFIG_DVB_CXD2880) += cxd2880/
|
obj-$(CONFIG_DVB_ZL10039) += zl10039.o
|
||||||
|
obj-$(CONFIG_DVB_ZL10353) += zl10353.o
|
||||||
|
|
|
@ -859,7 +859,7 @@ int dib3000mc_i2c_enumeration(struct i2c_adapter *i2c, int no_of_demods, u8 defa
|
||||||
int k;
|
int k;
|
||||||
u8 new_addr;
|
u8 new_addr;
|
||||||
|
|
||||||
static u8 DIB3000MC_I2C_ADDRESS[] = {20,22,24,26};
|
static const u8 DIB3000MC_I2C_ADDRESS[] = { 20, 22, 24, 26 };
|
||||||
|
|
||||||
dmcst = kzalloc(sizeof(struct dib3000mc_state), GFP_KERNEL);
|
dmcst = kzalloc(sizeof(struct dib3000mc_state), GFP_KERNEL);
|
||||||
if (dmcst == NULL)
|
if (dmcst == NULL)
|
||||||
|
|
|
@ -1188,8 +1188,8 @@ static int dib7000p_autosearch_is_irq(struct dvb_frontend *demod)
|
||||||
|
|
||||||
static void dib7000p_spur_protect(struct dib7000p_state *state, u32 rf_khz, u32 bw)
|
static void dib7000p_spur_protect(struct dib7000p_state *state, u32 rf_khz, u32 bw)
|
||||||
{
|
{
|
||||||
static s16 notch[] = { 16143, 14402, 12238, 9713, 6902, 3888, 759, -2392 };
|
static const s16 notch[] = { 16143, 14402, 12238, 9713, 6902, 3888, 759, -2392 };
|
||||||
static u8 sine[] = { 0, 2, 3, 5, 6, 8, 9, 11, 13, 14, 16, 17, 19, 20, 22,
|
static const u8 sine[] = { 0, 2, 3, 5, 6, 8, 9, 11, 13, 14, 16, 17, 19, 20, 22,
|
||||||
24, 25, 27, 28, 30, 31, 33, 34, 36, 38, 39, 41, 42, 44, 45, 47, 48, 50, 51,
|
24, 25, 27, 28, 30, 31, 33, 34, 36, 38, 39, 41, 42, 44, 45, 47, 48, 50, 51,
|
||||||
53, 55, 56, 58, 59, 61, 62, 64, 65, 67, 68, 70, 71, 73, 74, 76, 77, 79, 80,
|
53, 55, 56, 58, 59, 61, 62, 64, 65, 67, 68, 70, 71, 73, 74, 76, 77, 79, 80,
|
||||||
82, 83, 85, 86, 88, 89, 91, 92, 94, 95, 97, 98, 99, 101, 102, 104, 105,
|
82, 83, 85, 86, 88, 89, 91, 92, 94, 95, 97, 98, 99, 101, 102, 104, 105,
|
||||||
|
|
|
@ -336,7 +336,7 @@ static int si21xx_wait_diseqc_idle(struct si21xx_state *state, int timeout)
|
||||||
dprintk("%s\n", __func__);
|
dprintk("%s\n", __func__);
|
||||||
|
|
||||||
while ((si21_readreg(state, LNB_CTRL_REG_1) & 0x8) == 8) {
|
while ((si21_readreg(state, LNB_CTRL_REG_1) & 0x8) == 8) {
|
||||||
if (jiffies - start > timeout) {
|
if (time_is_before_jiffies(start + timeout)) {
|
||||||
dprintk("%s: timeout!!\n", __func__);
|
dprintk("%s: timeout!!\n", __func__);
|
||||||
return -ETIMEDOUT;
|
return -ETIMEDOUT;
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,8 +161,9 @@ static int stv0299_set_FEC(struct stv0299_state *state, enum fe_code_rate fec)
|
||||||
|
|
||||||
static enum fe_code_rate stv0299_get_fec(struct stv0299_state *state)
|
static enum fe_code_rate stv0299_get_fec(struct stv0299_state *state)
|
||||||
{
|
{
|
||||||
static enum fe_code_rate fec_tab[] = { FEC_2_3, FEC_3_4, FEC_5_6,
|
static const enum fe_code_rate fec_tab[] = {
|
||||||
FEC_7_8, FEC_1_2 };
|
FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_1_2
|
||||||
|
};
|
||||||
u8 index;
|
u8 index;
|
||||||
|
|
||||||
dprintk ("%s\n", __func__);
|
dprintk ("%s\n", __func__);
|
||||||
|
@ -183,7 +184,7 @@ static int stv0299_wait_diseqc_fifo (struct stv0299_state* state, int timeout)
|
||||||
dprintk ("%s\n", __func__);
|
dprintk ("%s\n", __func__);
|
||||||
|
|
||||||
while (stv0299_readreg(state, 0x0a) & 1) {
|
while (stv0299_readreg(state, 0x0a) & 1) {
|
||||||
if (jiffies - start > timeout) {
|
if (time_is_before_jiffies(start + timeout)) {
|
||||||
dprintk ("%s: timeout!!\n", __func__);
|
dprintk ("%s: timeout!!\n", __func__);
|
||||||
return -ETIMEDOUT;
|
return -ETIMEDOUT;
|
||||||
}
|
}
|
||||||
|
@ -200,7 +201,7 @@ static int stv0299_wait_diseqc_idle (struct stv0299_state* state, int timeout)
|
||||||
dprintk ("%s\n", __func__);
|
dprintk ("%s\n", __func__);
|
||||||
|
|
||||||
while ((stv0299_readreg(state, 0x0a) & 3) != 2 ) {
|
while ((stv0299_readreg(state, 0x0a) & 3) != 2 ) {
|
||||||
if (jiffies - start > timeout) {
|
if (time_is_before_jiffies(start + timeout)) {
|
||||||
dprintk ("%s: timeout!!\n", __func__);
|
dprintk ("%s: timeout!!\n", __func__);
|
||||||
return -ETIMEDOUT;
|
return -ETIMEDOUT;
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,7 +162,7 @@ static void tda8083_wait_diseqc_fifo (struct tda8083_state* state, int timeout)
|
||||||
{
|
{
|
||||||
unsigned long start = jiffies;
|
unsigned long start = jiffies;
|
||||||
|
|
||||||
while (jiffies - start < timeout &&
|
while (time_is_after_jiffies(start + timeout) &&
|
||||||
!(tda8083_readreg(state, 0x02) & 0x80))
|
!(tda8083_readreg(state, 0x02) & 0x80))
|
||||||
{
|
{
|
||||||
msleep(50);
|
msleep(50);
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
obj-$(CONFIG_DVB_FIREDTV) += firedtv.o
|
obj-$(CONFIG_DVB_FIREDTV) += firedtv.o
|
||||||
|
|
||||||
firedtv-y += firedtv-avc.o firedtv-ci.o firedtv-dvb.o firedtv-fe.o firedtv-fw.o
|
firedtv-y += firedtv-avc.o firedtv-ci.o firedtv-dvb.o firedtv-fe.o firedtv-fw.o
|
||||||
firedtv-$(CONFIG_DVB_FIREDTV_INPUT) += firedtv-rc.o
|
firedtv-$(CONFIG_DVB_FIREDTV_INPUT) += firedtv-rc.o
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,31 +1,11 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
msp3400-objs := msp3400-driver.o msp3400-kthreads.o
|
msp3400-objs := msp3400-driver.o msp3400-kthreads.o
|
||||||
obj-$(CONFIG_VIDEO_MSP3400) += msp3400.o
|
|
||||||
|
|
||||||
obj-$(CONFIG_VIDEO_CCS) += ccs/
|
obj-$(CONFIG_SDR_MAX2175) += max2175.o
|
||||||
obj-$(CONFIG_VIDEO_ET8EK8) += et8ek8/
|
obj-$(CONFIG_VIDEO_AD5820) += ad5820.o
|
||||||
obj-$(CONFIG_VIDEO_CX25840) += cx25840/
|
obj-$(CONFIG_VIDEO_AD9389B) += ad9389b.o
|
||||||
obj-$(CONFIG_VIDEO_M5MOLS) += m5mols/
|
obj-$(CONFIG_VIDEO_ADP1653) += adp1653.o
|
||||||
|
|
||||||
obj-$(CONFIG_VIDEO_APTINA_PLL) += aptina-pll.o
|
|
||||||
obj-$(CONFIG_VIDEO_TVAUDIO) += tvaudio.o
|
|
||||||
obj-$(CONFIG_VIDEO_TDA7432) += tda7432.o
|
|
||||||
obj-$(CONFIG_VIDEO_SAA6588) += saa6588.o
|
|
||||||
obj-$(CONFIG_VIDEO_TDA9840) += tda9840.o
|
|
||||||
obj-$(CONFIG_VIDEO_TDA1997X) += tda1997x.o
|
|
||||||
obj-$(CONFIG_VIDEO_TEA6415C) += tea6415c.o
|
|
||||||
obj-$(CONFIG_VIDEO_TEA6420) += tea6420.o
|
|
||||||
obj-$(CONFIG_VIDEO_SAA7110) += saa7110.o
|
|
||||||
obj-$(CONFIG_VIDEO_SAA711X) += saa7115.o
|
|
||||||
obj-$(CONFIG_VIDEO_SAA717X) += saa717x.o
|
|
||||||
obj-$(CONFIG_VIDEO_SAA7127) += saa7127.o
|
|
||||||
obj-$(CONFIG_VIDEO_SAA7185) += saa7185.o
|
|
||||||
obj-$(CONFIG_VIDEO_SAA6752HS) += saa6752hs.o
|
|
||||||
obj-$(CONFIG_VIDEO_AD5820) += ad5820.o
|
|
||||||
obj-$(CONFIG_VIDEO_AK7375) += ak7375.o
|
|
||||||
obj-$(CONFIG_VIDEO_DW9714) += dw9714.o
|
|
||||||
obj-$(CONFIG_VIDEO_DW9768) += dw9768.o
|
|
||||||
obj-$(CONFIG_VIDEO_DW9807_VCM) += dw9807-vcm.o
|
|
||||||
obj-$(CONFIG_VIDEO_ADV7170) += adv7170.o
|
obj-$(CONFIG_VIDEO_ADV7170) += adv7170.o
|
||||||
obj-$(CONFIG_VIDEO_ADV7175) += adv7175.o
|
obj-$(CONFIG_VIDEO_ADV7175) += adv7175.o
|
||||||
obj-$(CONFIG_VIDEO_ADV7180) += adv7180.o
|
obj-$(CONFIG_VIDEO_ADV7180) += adv7180.o
|
||||||
|
@ -33,39 +13,68 @@ obj-$(CONFIG_VIDEO_ADV7183) += adv7183.o
|
||||||
obj-$(CONFIG_VIDEO_ADV7343) += adv7343.o
|
obj-$(CONFIG_VIDEO_ADV7343) += adv7343.o
|
||||||
obj-$(CONFIG_VIDEO_ADV7393) += adv7393.o
|
obj-$(CONFIG_VIDEO_ADV7393) += adv7393.o
|
||||||
obj-$(CONFIG_VIDEO_ADV748X) += adv748x/
|
obj-$(CONFIG_VIDEO_ADV748X) += adv748x/
|
||||||
|
obj-$(CONFIG_VIDEO_ADV7511) += adv7511-v4l2.o
|
||||||
obj-$(CONFIG_VIDEO_ADV7604) += adv7604.o
|
obj-$(CONFIG_VIDEO_ADV7604) += adv7604.o
|
||||||
obj-$(CONFIG_VIDEO_ADV7842) += adv7842.o
|
obj-$(CONFIG_VIDEO_ADV7842) += adv7842.o
|
||||||
obj-$(CONFIG_VIDEO_AD9389B) += ad9389b.o
|
obj-$(CONFIG_VIDEO_AK7375) += ak7375.o
|
||||||
obj-$(CONFIG_VIDEO_ADV7511) += adv7511-v4l2.o
|
obj-$(CONFIG_VIDEO_AK881X) += ak881x.o
|
||||||
obj-$(CONFIG_VIDEO_VPX3220) += vpx3220.o
|
obj-$(CONFIG_VIDEO_APTINA_PLL) += aptina-pll.o
|
||||||
obj-$(CONFIG_VIDEO_VS6624) += vs6624.o
|
|
||||||
obj-$(CONFIG_VIDEO_BT819) += bt819.o
|
obj-$(CONFIG_VIDEO_BT819) += bt819.o
|
||||||
obj-$(CONFIG_VIDEO_BT856) += bt856.o
|
obj-$(CONFIG_VIDEO_BT856) += bt856.o
|
||||||
obj-$(CONFIG_VIDEO_BT866) += bt866.o
|
obj-$(CONFIG_VIDEO_BT866) += bt866.o
|
||||||
obj-$(CONFIG_VIDEO_KS0127) += ks0127.o
|
obj-$(CONFIG_VIDEO_CCS) += ccs/
|
||||||
obj-$(CONFIG_VIDEO_THS7303) += ths7303.o
|
obj-$(CONFIG_VIDEO_CCS_PLL) += ccs-pll.o
|
||||||
obj-$(CONFIG_VIDEO_THS8200) += ths8200.o
|
|
||||||
obj-$(CONFIG_VIDEO_TVP5150) += tvp5150.o
|
|
||||||
obj-$(CONFIG_VIDEO_TVP514X) += tvp514x.o
|
|
||||||
obj-$(CONFIG_VIDEO_TVP7002) += tvp7002.o
|
|
||||||
obj-$(CONFIG_VIDEO_TW2804) += tw2804.o
|
|
||||||
obj-$(CONFIG_VIDEO_TW9903) += tw9903.o
|
|
||||||
obj-$(CONFIG_VIDEO_TW9906) += tw9906.o
|
|
||||||
obj-$(CONFIG_VIDEO_TW9910) += tw9910.o
|
|
||||||
obj-$(CONFIG_VIDEO_CS3308) += cs3308.o
|
obj-$(CONFIG_VIDEO_CS3308) += cs3308.o
|
||||||
obj-$(CONFIG_VIDEO_CS5345) += cs5345.o
|
obj-$(CONFIG_VIDEO_CS5345) += cs5345.o
|
||||||
obj-$(CONFIG_VIDEO_CS53L32A) += cs53l32a.o
|
obj-$(CONFIG_VIDEO_CS53L32A) += cs53l32a.o
|
||||||
|
obj-$(CONFIG_VIDEO_CX25840) += cx25840/
|
||||||
|
obj-$(CONFIG_VIDEO_DW9714) += dw9714.o
|
||||||
|
obj-$(CONFIG_VIDEO_DW9768) += dw9768.o
|
||||||
|
obj-$(CONFIG_VIDEO_DW9807_VCM) += dw9807-vcm.o
|
||||||
|
obj-$(CONFIG_VIDEO_ET8EK8) += et8ek8/
|
||||||
|
obj-$(CONFIG_VIDEO_HI556) += hi556.o
|
||||||
|
obj-$(CONFIG_VIDEO_HI846) += hi846.o
|
||||||
|
obj-$(CONFIG_VIDEO_HI847) += hi847.o
|
||||||
|
obj-$(CONFIG_VIDEO_I2C) += video-i2c.o
|
||||||
|
obj-$(CONFIG_VIDEO_IMX208) += imx208.o
|
||||||
|
obj-$(CONFIG_VIDEO_IMX214) += imx214.o
|
||||||
|
obj-$(CONFIG_VIDEO_IMX219) += imx219.o
|
||||||
|
obj-$(CONFIG_VIDEO_IMX258) += imx258.o
|
||||||
|
obj-$(CONFIG_VIDEO_IMX274) += imx274.o
|
||||||
|
obj-$(CONFIG_VIDEO_IMX290) += imx290.o
|
||||||
|
obj-$(CONFIG_VIDEO_IMX319) += imx319.o
|
||||||
|
obj-$(CONFIG_VIDEO_IMX334) += imx334.o
|
||||||
|
obj-$(CONFIG_VIDEO_IMX335) += imx335.o
|
||||||
|
obj-$(CONFIG_VIDEO_IMX355) += imx355.o
|
||||||
|
obj-$(CONFIG_VIDEO_IMX412) += imx412.o
|
||||||
|
obj-$(CONFIG_VIDEO_IR_I2C) += ir-kbd-i2c.o
|
||||||
|
obj-$(CONFIG_VIDEO_ISL7998X) += isl7998x.o
|
||||||
|
obj-$(CONFIG_VIDEO_KS0127) += ks0127.o
|
||||||
|
obj-$(CONFIG_VIDEO_LM3560) += lm3560.o
|
||||||
|
obj-$(CONFIG_VIDEO_LM3646) += lm3646.o
|
||||||
obj-$(CONFIG_VIDEO_M52790) += m52790.o
|
obj-$(CONFIG_VIDEO_M52790) += m52790.o
|
||||||
obj-$(CONFIG_VIDEO_TLV320AIC23B) += tlv320aic23b.o
|
obj-$(CONFIG_VIDEO_M5MOLS) += m5mols/
|
||||||
obj-$(CONFIG_VIDEO_UDA1342) += uda1342.o
|
obj-$(CONFIG_VIDEO_MAX9271_LIB) += max9271.o
|
||||||
obj-$(CONFIG_VIDEO_WM8775) += wm8775.o
|
obj-$(CONFIG_VIDEO_MAX9286) += max9286.o
|
||||||
obj-$(CONFIG_VIDEO_WM8739) += wm8739.o
|
obj-$(CONFIG_VIDEO_ML86V7667) += ml86v7667.o
|
||||||
obj-$(CONFIG_VIDEO_VP27SMPX) += vp27smpx.o
|
obj-$(CONFIG_VIDEO_MSP3400) += msp3400.o
|
||||||
obj-$(CONFIG_VIDEO_SONY_BTF_MPX) += sony-btf-mpx.o
|
obj-$(CONFIG_VIDEO_MT9M001) += mt9m001.o
|
||||||
obj-$(CONFIG_VIDEO_UPD64031A) += upd64031a.o
|
obj-$(CONFIG_VIDEO_MT9M032) += mt9m032.o
|
||||||
obj-$(CONFIG_VIDEO_UPD64083) += upd64083.o
|
obj-$(CONFIG_VIDEO_MT9M111) += mt9m111.o
|
||||||
|
obj-$(CONFIG_VIDEO_MT9P031) += mt9p031.o
|
||||||
|
obj-$(CONFIG_VIDEO_MT9T001) += mt9t001.o
|
||||||
|
obj-$(CONFIG_VIDEO_MT9T112) += mt9t112.o
|
||||||
|
obj-$(CONFIG_VIDEO_MT9V011) += mt9v011.o
|
||||||
|
obj-$(CONFIG_VIDEO_MT9V032) += mt9v032.o
|
||||||
|
obj-$(CONFIG_VIDEO_MT9V111) += mt9v111.o
|
||||||
|
obj-$(CONFIG_VIDEO_NOON010PC30) += noon010pc30.o
|
||||||
|
obj-$(CONFIG_VIDEO_OG01A1B) += og01a1b.o
|
||||||
obj-$(CONFIG_VIDEO_OV02A10) += ov02a10.o
|
obj-$(CONFIG_VIDEO_OV02A10) += ov02a10.o
|
||||||
|
obj-$(CONFIG_VIDEO_OV08D10) += ov08d10.o
|
||||||
|
obj-$(CONFIG_VIDEO_OV13858) += ov13858.o
|
||||||
|
obj-$(CONFIG_VIDEO_OV13B10) += ov13b10.o
|
||||||
obj-$(CONFIG_VIDEO_OV2640) += ov2640.o
|
obj-$(CONFIG_VIDEO_OV2640) += ov2640.o
|
||||||
|
obj-$(CONFIG_VIDEO_OV2659) += ov2659.o
|
||||||
obj-$(CONFIG_VIDEO_OV2680) += ov2680.o
|
obj-$(CONFIG_VIDEO_OV2680) += ov2680.o
|
||||||
obj-$(CONFIG_VIDEO_OV2685) += ov2685.o
|
obj-$(CONFIG_VIDEO_OV2685) += ov2685.o
|
||||||
obj-$(CONFIG_VIDEO_OV2740) += ov2740.o
|
obj-$(CONFIG_VIDEO_OV2740) += ov2740.o
|
||||||
|
@ -89,51 +98,46 @@ obj-$(CONFIG_VIDEO_OV9282) += ov9282.o
|
||||||
obj-$(CONFIG_VIDEO_OV9640) += ov9640.o
|
obj-$(CONFIG_VIDEO_OV9640) += ov9640.o
|
||||||
obj-$(CONFIG_VIDEO_OV9650) += ov9650.o
|
obj-$(CONFIG_VIDEO_OV9650) += ov9650.o
|
||||||
obj-$(CONFIG_VIDEO_OV9734) += ov9734.o
|
obj-$(CONFIG_VIDEO_OV9734) += ov9734.o
|
||||||
obj-$(CONFIG_VIDEO_OV13858) += ov13858.o
|
obj-$(CONFIG_VIDEO_RDACM20) += rdacm20.o
|
||||||
obj-$(CONFIG_VIDEO_OV13B10) += ov13b10.o
|
obj-$(CONFIG_VIDEO_RDACM21) += rdacm21.o
|
||||||
obj-$(CONFIG_VIDEO_MT9M001) += mt9m001.o
|
obj-$(CONFIG_VIDEO_RJ54N1) += rj54n1cb0c.o
|
||||||
obj-$(CONFIG_VIDEO_MT9M032) += mt9m032.o
|
obj-$(CONFIG_VIDEO_S5C73M3) += s5c73m3/
|
||||||
obj-$(CONFIG_VIDEO_MT9M111) += mt9m111.o
|
obj-$(CONFIG_VIDEO_S5K4ECGX) += s5k4ecgx.o
|
||||||
obj-$(CONFIG_VIDEO_MT9P031) += mt9p031.o
|
obj-$(CONFIG_VIDEO_S5K5BAF) += s5k5baf.o
|
||||||
obj-$(CONFIG_VIDEO_MT9T001) += mt9t001.o
|
obj-$(CONFIG_VIDEO_S5K6A3) += s5k6a3.o
|
||||||
obj-$(CONFIG_VIDEO_MT9T112) += mt9t112.o
|
obj-$(CONFIG_VIDEO_S5K6AA) += s5k6aa.o
|
||||||
obj-$(CONFIG_VIDEO_MT9V011) += mt9v011.o
|
obj-$(CONFIG_VIDEO_SAA6588) += saa6588.o
|
||||||
obj-$(CONFIG_VIDEO_MT9V032) += mt9v032.o
|
obj-$(CONFIG_VIDEO_SAA6752HS) += saa6752hs.o
|
||||||
obj-$(CONFIG_VIDEO_MT9V111) += mt9v111.o
|
obj-$(CONFIG_VIDEO_SAA7110) += saa7110.o
|
||||||
obj-$(CONFIG_VIDEO_SR030PC30) += sr030pc30.o
|
obj-$(CONFIG_VIDEO_SAA711X) += saa7115.o
|
||||||
obj-$(CONFIG_VIDEO_NOON010PC30) += noon010pc30.o
|
obj-$(CONFIG_VIDEO_SAA7127) += saa7127.o
|
||||||
obj-$(CONFIG_VIDEO_RJ54N1) += rj54n1cb0c.o
|
obj-$(CONFIG_VIDEO_SAA717X) += saa717x.o
|
||||||
obj-$(CONFIG_VIDEO_S5K6AA) += s5k6aa.o
|
obj-$(CONFIG_VIDEO_SAA7185) += saa7185.o
|
||||||
obj-$(CONFIG_VIDEO_S5K6A3) += s5k6a3.o
|
obj-$(CONFIG_VIDEO_SONY_BTF_MPX) += sony-btf-mpx.o
|
||||||
obj-$(CONFIG_VIDEO_S5K4ECGX) += s5k4ecgx.o
|
obj-$(CONFIG_VIDEO_SR030PC30) += sr030pc30.o
|
||||||
obj-$(CONFIG_VIDEO_S5K5BAF) += s5k5baf.o
|
|
||||||
obj-$(CONFIG_VIDEO_S5C73M3) += s5c73m3/
|
|
||||||
obj-$(CONFIG_VIDEO_ADP1653) += adp1653.o
|
|
||||||
obj-$(CONFIG_VIDEO_LM3560) += lm3560.o
|
|
||||||
obj-$(CONFIG_VIDEO_LM3646) += lm3646.o
|
|
||||||
obj-$(CONFIG_VIDEO_CCS_PLL) += ccs-pll.o
|
|
||||||
obj-$(CONFIG_VIDEO_AK881X) += ak881x.o
|
|
||||||
obj-$(CONFIG_VIDEO_IR_I2C) += ir-kbd-i2c.o
|
|
||||||
obj-$(CONFIG_VIDEO_I2C) += video-i2c.o
|
|
||||||
obj-$(CONFIG_VIDEO_ML86V7667) += ml86v7667.o
|
|
||||||
obj-$(CONFIG_VIDEO_OV2659) += ov2659.o
|
|
||||||
obj-$(CONFIG_VIDEO_TC358743) += tc358743.o
|
|
||||||
obj-$(CONFIG_VIDEO_HI556) += hi556.o
|
|
||||||
obj-$(CONFIG_VIDEO_HI846) += hi846.o
|
|
||||||
obj-$(CONFIG_VIDEO_IMX208) += imx208.o
|
|
||||||
obj-$(CONFIG_VIDEO_IMX214) += imx214.o
|
|
||||||
obj-$(CONFIG_VIDEO_IMX219) += imx219.o
|
|
||||||
obj-$(CONFIG_VIDEO_IMX258) += imx258.o
|
|
||||||
obj-$(CONFIG_VIDEO_IMX274) += imx274.o
|
|
||||||
obj-$(CONFIG_VIDEO_IMX290) += imx290.o
|
|
||||||
obj-$(CONFIG_VIDEO_IMX319) += imx319.o
|
|
||||||
obj-$(CONFIG_VIDEO_IMX334) += imx334.o
|
|
||||||
obj-$(CONFIG_VIDEO_IMX335) += imx335.o
|
|
||||||
obj-$(CONFIG_VIDEO_IMX355) += imx355.o
|
|
||||||
obj-$(CONFIG_VIDEO_IMX412) += imx412.o
|
|
||||||
obj-$(CONFIG_VIDEO_MAX9286) += max9286.o
|
|
||||||
obj-$(CONFIG_VIDEO_MAX9271_LIB) += max9271.o
|
|
||||||
obj-$(CONFIG_VIDEO_RDACM20) += rdacm20.o
|
|
||||||
obj-$(CONFIG_VIDEO_RDACM21) += rdacm21.o
|
|
||||||
obj-$(CONFIG_VIDEO_ST_MIPID02) += st-mipid02.o
|
obj-$(CONFIG_VIDEO_ST_MIPID02) += st-mipid02.o
|
||||||
obj-$(CONFIG_SDR_MAX2175) += max2175.o
|
obj-$(CONFIG_VIDEO_TC358743) += tc358743.o
|
||||||
|
obj-$(CONFIG_VIDEO_TDA1997X) += tda1997x.o
|
||||||
|
obj-$(CONFIG_VIDEO_TDA7432) += tda7432.o
|
||||||
|
obj-$(CONFIG_VIDEO_TDA9840) += tda9840.o
|
||||||
|
obj-$(CONFIG_VIDEO_TEA6415C) += tea6415c.o
|
||||||
|
obj-$(CONFIG_VIDEO_TEA6420) += tea6420.o
|
||||||
|
obj-$(CONFIG_VIDEO_THS7303) += ths7303.o
|
||||||
|
obj-$(CONFIG_VIDEO_THS8200) += ths8200.o
|
||||||
|
obj-$(CONFIG_VIDEO_TLV320AIC23B) += tlv320aic23b.o
|
||||||
|
obj-$(CONFIG_VIDEO_TVAUDIO) += tvaudio.o
|
||||||
|
obj-$(CONFIG_VIDEO_TVP514X) += tvp514x.o
|
||||||
|
obj-$(CONFIG_VIDEO_TVP5150) += tvp5150.o
|
||||||
|
obj-$(CONFIG_VIDEO_TVP7002) += tvp7002.o
|
||||||
|
obj-$(CONFIG_VIDEO_TW2804) += tw2804.o
|
||||||
|
obj-$(CONFIG_VIDEO_TW9903) += tw9903.o
|
||||||
|
obj-$(CONFIG_VIDEO_TW9906) += tw9906.o
|
||||||
|
obj-$(CONFIG_VIDEO_TW9910) += tw9910.o
|
||||||
|
obj-$(CONFIG_VIDEO_UDA1342) += uda1342.o
|
||||||
|
obj-$(CONFIG_VIDEO_UPD64031A) += upd64031a.o
|
||||||
|
obj-$(CONFIG_VIDEO_UPD64083) += upd64083.o
|
||||||
|
obj-$(CONFIG_VIDEO_VP27SMPX) += vp27smpx.o
|
||||||
|
obj-$(CONFIG_VIDEO_VPX3220) += vpx3220.o
|
||||||
|
obj-$(CONFIG_VIDEO_VS6624) += vs6624.o
|
||||||
|
obj-$(CONFIG_VIDEO_WM8739) += wm8739.o
|
||||||
|
obj-$(CONFIG_VIDEO_WM8775) += wm8775.o
|
||||||
|
|
|
@ -784,16 +784,16 @@ static int adv7180_get_mbus_config(struct v4l2_subdev *sd,
|
||||||
|
|
||||||
if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) {
|
if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) {
|
||||||
cfg->type = V4L2_MBUS_CSI2_DPHY;
|
cfg->type = V4L2_MBUS_CSI2_DPHY;
|
||||||
cfg->flags = V4L2_MBUS_CSI2_1_LANE |
|
cfg->bus.mipi_csi2.num_data_lanes = 1;
|
||||||
V4L2_MBUS_CSI2_CHANNEL_0 |
|
cfg->bus.mipi_csi2.flags = 0;
|
||||||
V4L2_MBUS_CSI2_CONTINUOUS_CLOCK;
|
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* The ADV7180 sensor supports BT.601/656 output modes.
|
* The ADV7180 sensor supports BT.601/656 output modes.
|
||||||
* The BT.656 is default and not yet configurable by s/w.
|
* The BT.656 is default and not yet configurable by s/w.
|
||||||
*/
|
*/
|
||||||
cfg->flags = V4L2_MBUS_MASTER | V4L2_MBUS_PCLK_SAMPLE_RISING |
|
cfg->bus.parallel.flags = V4L2_MBUS_MASTER |
|
||||||
V4L2_MBUS_DATA_ACTIVE_HIGH;
|
V4L2_MBUS_PCLK_SAMPLE_RISING |
|
||||||
|
V4L2_MBUS_DATA_ACTIVE_HIGH;
|
||||||
cfg->type = V4L2_MBUS_BT656;
|
cfg->type = V4L2_MBUS_BT656;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio/consumer.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
@ -28,8 +28,8 @@ struct adv7183 {
|
||||||
v4l2_std_id std; /* Current set standard */
|
v4l2_std_id std; /* Current set standard */
|
||||||
u32 input;
|
u32 input;
|
||||||
u32 output;
|
u32 output;
|
||||||
unsigned reset_pin;
|
struct gpio_desc *reset_pin;
|
||||||
unsigned oe_pin;
|
struct gpio_desc *oe_pin;
|
||||||
struct v4l2_mbus_framefmt fmt;
|
struct v4l2_mbus_framefmt fmt;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -465,9 +465,9 @@ static int adv7183_s_stream(struct v4l2_subdev *sd, int enable)
|
||||||
struct adv7183 *decoder = to_adv7183(sd);
|
struct adv7183 *decoder = to_adv7183(sd);
|
||||||
|
|
||||||
if (enable)
|
if (enable)
|
||||||
gpio_set_value(decoder->oe_pin, 0);
|
gpiod_set_value(decoder->oe_pin, 1);
|
||||||
else
|
else
|
||||||
gpio_set_value(decoder->oe_pin, 1);
|
gpiod_set_value(decoder->oe_pin, 0);
|
||||||
udelay(1);
|
udelay(1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -531,7 +531,6 @@ static int adv7183_probe(struct i2c_client *client,
|
||||||
struct v4l2_subdev_format fmt = {
|
struct v4l2_subdev_format fmt = {
|
||||||
.which = V4L2_SUBDEV_FORMAT_ACTIVE,
|
.which = V4L2_SUBDEV_FORMAT_ACTIVE,
|
||||||
};
|
};
|
||||||
const unsigned *pin_array;
|
|
||||||
|
|
||||||
/* Check if the adapter supports the needed features */
|
/* Check if the adapter supports the needed features */
|
||||||
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
|
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
|
||||||
|
@ -540,29 +539,28 @@ static int adv7183_probe(struct i2c_client *client,
|
||||||
v4l_info(client, "chip found @ 0x%02x (%s)\n",
|
v4l_info(client, "chip found @ 0x%02x (%s)\n",
|
||||||
client->addr << 1, client->adapter->name);
|
client->addr << 1, client->adapter->name);
|
||||||
|
|
||||||
pin_array = client->dev.platform_data;
|
|
||||||
if (pin_array == NULL)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
decoder = devm_kzalloc(&client->dev, sizeof(*decoder), GFP_KERNEL);
|
decoder = devm_kzalloc(&client->dev, sizeof(*decoder), GFP_KERNEL);
|
||||||
if (decoder == NULL)
|
if (decoder == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
decoder->reset_pin = pin_array[0];
|
/*
|
||||||
decoder->oe_pin = pin_array[1];
|
* Requesting high will assert reset, the line should be
|
||||||
|
* flagged as active low in descriptor table or machine description.
|
||||||
if (devm_gpio_request_one(&client->dev, decoder->reset_pin,
|
*/
|
||||||
GPIOF_OUT_INIT_LOW, "ADV7183 Reset")) {
|
decoder->reset_pin = devm_gpiod_get(&client->dev, "reset",
|
||||||
v4l_err(client, "failed to request GPIO %d\n", decoder->reset_pin);
|
GPIOD_OUT_HIGH);
|
||||||
return -EBUSY;
|
if (IS_ERR(decoder->reset_pin))
|
||||||
}
|
return PTR_ERR(decoder->reset_pin);
|
||||||
|
gpiod_set_consumer_name(decoder->reset_pin, "ADV7183 Reset");
|
||||||
if (devm_gpio_request_one(&client->dev, decoder->oe_pin,
|
/*
|
||||||
GPIOF_OUT_INIT_HIGH,
|
* Requesting low will start with output disabled, the line should be
|
||||||
"ADV7183 Output Enable")) {
|
* flagged as active low in descriptor table or machine description.
|
||||||
v4l_err(client, "failed to request GPIO %d\n", decoder->oe_pin);
|
*/
|
||||||
return -EBUSY;
|
decoder->oe_pin = devm_gpiod_get(&client->dev, "oe",
|
||||||
}
|
GPIOD_OUT_LOW);
|
||||||
|
if (IS_ERR(decoder->oe_pin))
|
||||||
|
return PTR_ERR(decoder->oe_pin);
|
||||||
|
gpiod_set_consumer_name(decoder->reset_pin, "ADV7183 Output Enable");
|
||||||
|
|
||||||
sd = &decoder->sd;
|
sd = &decoder->sd;
|
||||||
v4l2_i2c_subdev_init(sd, client, &adv7183_ops);
|
v4l2_i2c_subdev_init(sd, client, &adv7183_ops);
|
||||||
|
@ -594,7 +592,8 @@ static int adv7183_probe(struct i2c_client *client,
|
||||||
/* reset chip */
|
/* reset chip */
|
||||||
/* reset pulse width at least 5ms */
|
/* reset pulse width at least 5ms */
|
||||||
mdelay(10);
|
mdelay(10);
|
||||||
gpio_set_value(decoder->reset_pin, 1);
|
/* De-assert reset line (descriptor tagged active low) */
|
||||||
|
gpiod_set_value(decoder->reset_pin, 0);
|
||||||
/* wait 5ms before any further i2c writes are performed */
|
/* wait 5ms before any further i2c writes are performed */
|
||||||
mdelay(5);
|
mdelay(5);
|
||||||
|
|
||||||
|
|
|
@ -222,23 +222,7 @@ static int adv748x_csi2_get_mbus_config(struct v4l2_subdev *sd, unsigned int pad
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
config->type = V4L2_MBUS_CSI2_DPHY;
|
config->type = V4L2_MBUS_CSI2_DPHY;
|
||||||
switch (tx->active_lanes) {
|
config->bus.mipi_csi2.num_data_lanes = tx->active_lanes;
|
||||||
case 1:
|
|
||||||
config->flags = V4L2_MBUS_CSI2_1_LANE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
config->flags = V4L2_MBUS_CSI2_2_LANE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
config->flags = V4L2_MBUS_CSI2_3_LANE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
config->flags = V4L2_MBUS_CSI2_4_LANE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/videodev2.h>
|
#include <linux/videodev2.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
#include <linux/hdmi.h>
|
#include <linux/hdmi.h>
|
||||||
#include <linux/v4l2-dv-timings.h>
|
#include <linux/v4l2-dv-timings.h>
|
||||||
|
@ -522,7 +521,7 @@ static void log_infoframe(struct v4l2_subdev *sd, const struct adv7511_cfg_read_
|
||||||
buffer[3] = 0;
|
buffer[3] = 0;
|
||||||
buffer[3] = hdmi_infoframe_checksum(buffer, len + 4);
|
buffer[3] = hdmi_infoframe_checksum(buffer, len + 4);
|
||||||
|
|
||||||
if (hdmi_infoframe_unpack(&frame, buffer, sizeof(buffer)) < 0) {
|
if (hdmi_infoframe_unpack(&frame, buffer, len + 4) < 0) {
|
||||||
v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__, cri->desc);
|
v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__, cri->desc);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2484,7 +2484,7 @@ static int adv76xx_read_infoframe(struct v4l2_subdev *sd, int index,
|
||||||
buffer[i + 3] = infoframe_read(sd,
|
buffer[i + 3] = infoframe_read(sd,
|
||||||
adv76xx_cri[index].payload_addr + i);
|
adv76xx_cri[index].payload_addr + i);
|
||||||
|
|
||||||
if (hdmi_infoframe_unpack(frame, buffer, sizeof(buffer)) < 0) {
|
if (hdmi_infoframe_unpack(frame, buffer, len + 3) < 0) {
|
||||||
v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__,
|
v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__,
|
||||||
adv76xx_cri[index].desc);
|
adv76xx_cri[index].desc);
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
|
@ -2583,7 +2583,7 @@ static void log_infoframe(struct v4l2_subdev *sd, const struct adv7842_cfg_read_
|
||||||
for (i = 0; i < len; i++)
|
for (i = 0; i < len; i++)
|
||||||
buffer[i + 3] = infoframe_read(sd, cri->payload_addr + i);
|
buffer[i + 3] = infoframe_read(sd, cri->payload_addr + i);
|
||||||
|
|
||||||
if (hdmi_infoframe_unpack(&frame, buffer, sizeof(buffer)) < 0) {
|
if (hdmi_infoframe_unpack(&frame, buffer, len + 3) < 0) {
|
||||||
v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__, cri->desc);
|
v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__, cri->desc);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
config VIDEO_CCS
|
config VIDEO_CCS
|
||||||
tristate "MIPI CCS/SMIA++/SMIA sensor support"
|
tristate "MIPI CCS/SMIA++/SMIA sensor support"
|
||||||
depends on I2C && VIDEO_V4L2 && HAVE_CLK
|
depends on I2C && VIDEO_DEV && HAVE_CLK
|
||||||
select MEDIA_CONTROLLER
|
select MEDIA_CONTROLLER
|
||||||
select VIDEO_V4L2_SUBDEV_API
|
select VIDEO_V4L2_SUBDEV_API
|
||||||
select VIDEO_CCS_PLL
|
select VIDEO_CCS_PLL
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/firmware.h>
|
#include <linux/firmware.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
#include <linux/gpio/consumer.h>
|
#include <linux/gpio/consumer.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/pm_runtime.h>
|
#include <linux/pm_runtime.h>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
config VIDEO_CX25840
|
config VIDEO_CX25840
|
||||||
tristate "Conexant CX2584x audio/video decoders"
|
tristate "Conexant CX2584x audio/video decoders"
|
||||||
depends on VIDEO_V4L2 && I2C
|
depends on VIDEO_DEV && I2C
|
||||||
help
|
help
|
||||||
Support for the Conexant CX2584x audio/video decoders.
|
Support for the Conexant CX2584x audio/video decoders.
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/pm_runtime.h>
|
#include <linux/pm_runtime.h>
|
||||||
|
#include <linux/regulator/consumer.h>
|
||||||
#include <media/v4l2-ctrls.h>
|
#include <media/v4l2-ctrls.h>
|
||||||
#include <media/v4l2-device.h>
|
#include <media/v4l2-device.h>
|
||||||
#include <media/v4l2-event.h>
|
#include <media/v4l2-event.h>
|
||||||
|
@ -36,6 +37,7 @@ struct dw9714_device {
|
||||||
struct v4l2_ctrl_handler ctrls_vcm;
|
struct v4l2_ctrl_handler ctrls_vcm;
|
||||||
struct v4l2_subdev sd;
|
struct v4l2_subdev sd;
|
||||||
u16 current_val;
|
u16 current_val;
|
||||||
|
struct regulator *vcc;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct dw9714_device *to_dw9714_vcm(struct v4l2_ctrl *ctrl)
|
static inline struct dw9714_device *to_dw9714_vcm(struct v4l2_ctrl *ctrl)
|
||||||
|
@ -145,6 +147,16 @@ static int dw9714_probe(struct i2c_client *client)
|
||||||
if (dw9714_dev == NULL)
|
if (dw9714_dev == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
dw9714_dev->vcc = devm_regulator_get(&client->dev, "vcc");
|
||||||
|
if (IS_ERR(dw9714_dev->vcc))
|
||||||
|
return PTR_ERR(dw9714_dev->vcc);
|
||||||
|
|
||||||
|
rval = regulator_enable(dw9714_dev->vcc);
|
||||||
|
if (rval < 0) {
|
||||||
|
dev_err(&client->dev, "failed to enable vcc: %d\n", rval);
|
||||||
|
return rval;
|
||||||
|
}
|
||||||
|
|
||||||
v4l2_i2c_subdev_init(&dw9714_dev->sd, client, &dw9714_ops);
|
v4l2_i2c_subdev_init(&dw9714_dev->sd, client, &dw9714_ops);
|
||||||
dw9714_dev->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
|
dw9714_dev->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
|
||||||
V4L2_SUBDEV_FL_HAS_EVENTS;
|
V4L2_SUBDEV_FL_HAS_EVENTS;
|
||||||
|
@ -181,8 +193,18 @@ static int dw9714_remove(struct i2c_client *client)
|
||||||
{
|
{
|
||||||
struct v4l2_subdev *sd = i2c_get_clientdata(client);
|
struct v4l2_subdev *sd = i2c_get_clientdata(client);
|
||||||
struct dw9714_device *dw9714_dev = sd_to_dw9714_vcm(sd);
|
struct dw9714_device *dw9714_dev = sd_to_dw9714_vcm(sd);
|
||||||
|
int ret;
|
||||||
|
|
||||||
pm_runtime_disable(&client->dev);
|
pm_runtime_disable(&client->dev);
|
||||||
|
if (!pm_runtime_status_suspended(&client->dev)) {
|
||||||
|
ret = regulator_disable(dw9714_dev->vcc);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(&client->dev,
|
||||||
|
"Failed to disable vcc: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pm_runtime_set_suspended(&client->dev);
|
||||||
dw9714_subdev_cleanup(dw9714_dev);
|
dw9714_subdev_cleanup(dw9714_dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -200,6 +222,9 @@ static int __maybe_unused dw9714_vcm_suspend(struct device *dev)
|
||||||
struct dw9714_device *dw9714_dev = sd_to_dw9714_vcm(sd);
|
struct dw9714_device *dw9714_dev = sd_to_dw9714_vcm(sd);
|
||||||
int ret, val;
|
int ret, val;
|
||||||
|
|
||||||
|
if (pm_runtime_suspended(&client->dev))
|
||||||
|
return 0;
|
||||||
|
|
||||||
for (val = dw9714_dev->current_val & ~(DW9714_CTRL_STEPS - 1);
|
for (val = dw9714_dev->current_val & ~(DW9714_CTRL_STEPS - 1);
|
||||||
val >= 0; val -= DW9714_CTRL_STEPS) {
|
val >= 0; val -= DW9714_CTRL_STEPS) {
|
||||||
ret = dw9714_i2c_write(client,
|
ret = dw9714_i2c_write(client,
|
||||||
|
@ -208,7 +233,12 @@ static int __maybe_unused dw9714_vcm_suspend(struct device *dev)
|
||||||
dev_err_once(dev, "%s I2C failure: %d", __func__, ret);
|
dev_err_once(dev, "%s I2C failure: %d", __func__, ret);
|
||||||
usleep_range(DW9714_CTRL_DELAY_US, DW9714_CTRL_DELAY_US + 10);
|
usleep_range(DW9714_CTRL_DELAY_US, DW9714_CTRL_DELAY_US + 10);
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
ret = regulator_disable(dw9714_dev->vcc);
|
||||||
|
if (ret)
|
||||||
|
dev_err(dev, "Failed to disable vcc: %d\n", ret);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -224,6 +254,16 @@ static int __maybe_unused dw9714_vcm_resume(struct device *dev)
|
||||||
struct dw9714_device *dw9714_dev = sd_to_dw9714_vcm(sd);
|
struct dw9714_device *dw9714_dev = sd_to_dw9714_vcm(sd);
|
||||||
int ret, val;
|
int ret, val;
|
||||||
|
|
||||||
|
if (pm_runtime_suspended(&client->dev))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
ret = regulator_enable(dw9714_dev->vcc);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(dev, "Failed to enable vcc: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
usleep_range(1000, 2000);
|
||||||
|
|
||||||
for (val = dw9714_dev->current_val % DW9714_CTRL_STEPS;
|
for (val = dw9714_dev->current_val % DW9714_CTRL_STEPS;
|
||||||
val < dw9714_dev->current_val + DW9714_CTRL_STEPS - 1;
|
val < dw9714_dev->current_val + DW9714_CTRL_STEPS - 1;
|
||||||
val += DW9714_CTRL_STEPS) {
|
val += DW9714_CTRL_STEPS) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
config VIDEO_ET8EK8
|
config VIDEO_ET8EK8
|
||||||
tristate "ET8EK8 camera sensor support"
|
tristate "ET8EK8 camera sensor support"
|
||||||
depends on I2C && VIDEO_V4L2
|
depends on I2C && VIDEO_DEV
|
||||||
select MEDIA_CONTROLLER
|
select MEDIA_CONTROLLER
|
||||||
select VIDEO_V4L2_SUBDEV_API
|
select VIDEO_V4L2_SUBDEV_API
|
||||||
select V4L2_FWNODE
|
select V4L2_FWNODE
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -11,13 +11,11 @@
|
||||||
|
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
#include <linux/gpio/consumer.h>
|
#include <linux/gpio/consumer.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/of_gpio.h>
|
|
||||||
#include <linux/pm_runtime.h>
|
#include <linux/pm_runtime.h>
|
||||||
#include <linux/regmap.h>
|
#include <linux/regmap.h>
|
||||||
#include <linux/regulator/consumer.h>
|
#include <linux/regulator/consumer.h>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,7 +1,7 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
config VIDEO_M5MOLS
|
config VIDEO_M5MOLS
|
||||||
tristate "Fujitsu M-5MOLS 8MP sensor support"
|
tristate "Fujitsu M-5MOLS 8MP sensor support"
|
||||||
depends on I2C && VIDEO_V4L2
|
depends on I2C && VIDEO_DEV
|
||||||
select MEDIA_CONTROLLER
|
select MEDIA_CONTROLLER
|
||||||
select VIDEO_V4L2_SUBDEV_API
|
select VIDEO_V4L2_SUBDEV_API
|
||||||
help
|
help
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#define M5MOLS_H
|
#define M5MOLS_H
|
||||||
|
|
||||||
#include <linux/sizes.h>
|
#include <linux/sizes.h>
|
||||||
|
#include <linux/gpio/consumer.h>
|
||||||
#include <media/v4l2-subdev.h>
|
#include <media/v4l2-subdev.h>
|
||||||
#include "m5mols_reg.h"
|
#include "m5mols_reg.h"
|
||||||
|
|
||||||
|
@ -181,6 +182,7 @@ struct m5mols_version {
|
||||||
* @stabilization: image stabilization control
|
* @stabilization: image stabilization control
|
||||||
* @jpeg_quality: JPEG compression quality control
|
* @jpeg_quality: JPEG compression quality control
|
||||||
* @set_power: optional power callback to the board code
|
* @set_power: optional power callback to the board code
|
||||||
|
* @reset: GPIO driving the reset pin of M-5MOLS
|
||||||
* @lock: mutex protecting the structure fields below
|
* @lock: mutex protecting the structure fields below
|
||||||
* @ffmt: current fmt according to resolution type
|
* @ffmt: current fmt according to resolution type
|
||||||
* @res_type: current resolution type
|
* @res_type: current resolution type
|
||||||
|
@ -224,6 +226,7 @@ struct m5mols_info {
|
||||||
struct v4l2_ctrl *jpeg_quality;
|
struct v4l2_ctrl *jpeg_quality;
|
||||||
|
|
||||||
int (*set_power)(struct device *dev, int on);
|
int (*set_power)(struct device *dev, int on);
|
||||||
|
struct gpio_desc *reset;
|
||||||
|
|
||||||
struct mutex lock;
|
struct mutex lock;
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
#include <linux/regulator/consumer.h>
|
#include <linux/regulator/consumer.h>
|
||||||
#include <linux/videodev2.h>
|
#include <linux/videodev2.h>
|
||||||
#include <media/v4l2-ctrls.h>
|
#include <media/v4l2-ctrls.h>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio/consumer.h>
|
||||||
#include <linux/regulator/consumer.h>
|
#include <linux/regulator/consumer.h>
|
||||||
#include <linux/videodev2.h>
|
#include <linux/videodev2.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
@ -752,7 +752,6 @@ static int m5mols_sensor_power(struct m5mols_info *info, bool enable)
|
||||||
{
|
{
|
||||||
struct v4l2_subdev *sd = &info->sd;
|
struct v4l2_subdev *sd = &info->sd;
|
||||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||||
const struct m5mols_platform_data *pdata = info->pdata;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (info->power == enable)
|
if (info->power == enable)
|
||||||
|
@ -772,7 +771,7 @@ static int m5mols_sensor_power(struct m5mols_info *info, bool enable)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
gpio_set_value(pdata->gpio_reset, !pdata->reset_polarity);
|
gpiod_set_value(info->reset, 0);
|
||||||
info->power = 1;
|
info->power = 1;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -785,7 +784,7 @@ static int m5mols_sensor_power(struct m5mols_info *info, bool enable)
|
||||||
if (info->set_power)
|
if (info->set_power)
|
||||||
info->set_power(&client->dev, 0);
|
info->set_power(&client->dev, 0);
|
||||||
|
|
||||||
gpio_set_value(pdata->gpio_reset, pdata->reset_polarity);
|
gpiod_set_value(info->reset, 1);
|
||||||
|
|
||||||
info->isp_ready = 0;
|
info->isp_ready = 0;
|
||||||
info->power = 0;
|
info->power = 0;
|
||||||
|
@ -944,7 +943,6 @@ static int m5mols_probe(struct i2c_client *client,
|
||||||
const struct i2c_device_id *id)
|
const struct i2c_device_id *id)
|
||||||
{
|
{
|
||||||
const struct m5mols_platform_data *pdata = client->dev.platform_data;
|
const struct m5mols_platform_data *pdata = client->dev.platform_data;
|
||||||
unsigned long gpio_flags;
|
|
||||||
struct m5mols_info *info;
|
struct m5mols_info *info;
|
||||||
struct v4l2_subdev *sd;
|
struct v4l2_subdev *sd;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -954,11 +952,6 @@ static int m5mols_probe(struct i2c_client *client,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gpio_is_valid(pdata->gpio_reset)) {
|
|
||||||
dev_err(&client->dev, "No valid RESET GPIO specified\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!client->irq) {
|
if (!client->irq) {
|
||||||
dev_err(&client->dev, "Interrupt not assigned\n");
|
dev_err(&client->dev, "Interrupt not assigned\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -968,18 +961,16 @@ static int m5mols_probe(struct i2c_client *client,
|
||||||
if (!info)
|
if (!info)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
/* This asserts reset, descriptor shall have polarity specified */
|
||||||
|
info->reset = devm_gpiod_get(&client->dev, "reset", GPIOD_OUT_HIGH);
|
||||||
|
if (IS_ERR(info->reset))
|
||||||
|
return PTR_ERR(info->reset);
|
||||||
|
/* Notice: the "N" in M5MOLS_NRST implies active low */
|
||||||
|
gpiod_set_consumer_name(info->reset, "M5MOLS_NRST");
|
||||||
|
|
||||||
info->pdata = pdata;
|
info->pdata = pdata;
|
||||||
info->set_power = pdata->set_power;
|
info->set_power = pdata->set_power;
|
||||||
|
|
||||||
gpio_flags = pdata->reset_polarity
|
|
||||||
? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
|
|
||||||
ret = devm_gpio_request_one(&client->dev, pdata->gpio_reset, gpio_flags,
|
|
||||||
"M5MOLS_NRST");
|
|
||||||
if (ret) {
|
|
||||||
dev_err(&client->dev, "Failed to request gpio: %d\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = devm_regulator_bulk_get(&client->dev, ARRAY_SIZE(supplies),
|
ret = devm_regulator_bulk_get(&client->dev, ARRAY_SIZE(supplies),
|
||||||
supplies);
|
supplies);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
|
|
@ -257,7 +257,7 @@ static const struct regmap_config max2175_regmap_config = {
|
||||||
.reg_defaults = max2175_reg_defaults,
|
.reg_defaults = max2175_reg_defaults,
|
||||||
.num_reg_defaults = ARRAY_SIZE(max2175_reg_defaults),
|
.num_reg_defaults = ARRAY_SIZE(max2175_reg_defaults),
|
||||||
.volatile_table = &max2175_volatile_regs,
|
.volatile_table = &max2175_volatile_regs,
|
||||||
.cache_type = REGCACHE_FLAT,
|
.cache_type = REGCACHE_RBTREE,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct max2175 {
|
struct max2175 {
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include <linux/fwnode.h>
|
#include <linux/fwnode.h>
|
||||||
#include <linux/gpio/consumer.h>
|
#include <linux/gpio/consumer.h>
|
||||||
#include <linux/gpio/driver.h>
|
#include <linux/gpio/driver.h>
|
||||||
|
#include <linux/gpio/machine.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/i2c-mux.h>
|
#include <linux/i2c-mux.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
@ -168,6 +169,8 @@ struct max9286_priv {
|
||||||
u32 init_rev_chan_mv;
|
u32 init_rev_chan_mv;
|
||||||
u32 rev_chan_mv;
|
u32 rev_chan_mv;
|
||||||
|
|
||||||
|
u32 gpio_poc[2];
|
||||||
|
|
||||||
struct v4l2_ctrl_handler ctrls;
|
struct v4l2_ctrl_handler ctrls;
|
||||||
struct v4l2_ctrl *pixelrate;
|
struct v4l2_ctrl *pixelrate;
|
||||||
|
|
||||||
|
@ -846,6 +849,10 @@ static const struct v4l2_subdev_internal_ops max9286_subdev_internal_ops = {
|
||||||
.open = max9286_open,
|
.open = max9286_open,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct media_entity_operations max9286_media_ops = {
|
||||||
|
.link_validate = v4l2_subdev_link_validate
|
||||||
|
};
|
||||||
|
|
||||||
static int max9286_s_ctrl(struct v4l2_ctrl *ctrl)
|
static int max9286_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||||
{
|
{
|
||||||
switch (ctrl->id) {
|
switch (ctrl->id) {
|
||||||
|
@ -895,6 +902,7 @@ static int max9286_v4l2_register(struct max9286_priv *priv)
|
||||||
goto err_async;
|
goto err_async;
|
||||||
|
|
||||||
priv->sd.entity.function = MEDIA_ENT_F_VID_IF_BRIDGE;
|
priv->sd.entity.function = MEDIA_ENT_F_VID_IF_BRIDGE;
|
||||||
|
priv->sd.entity.ops = &max9286_media_ops;
|
||||||
|
|
||||||
priv->pads[MAX9286_SRC_PAD].flags = MEDIA_PAD_FL_SOURCE;
|
priv->pads[MAX9286_SRC_PAD].flags = MEDIA_PAD_FL_SOURCE;
|
||||||
for (i = 0; i < MAX9286_SRC_PAD; i++)
|
for (i = 0; i < MAX9286_SRC_PAD; i++)
|
||||||
|
@ -1025,20 +1033,27 @@ static int max9286_setup(struct max9286_priv *priv)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void max9286_gpio_set(struct gpio_chip *chip,
|
static int max9286_gpio_set(struct max9286_priv *priv, unsigned int offset,
|
||||||
unsigned int offset, int value)
|
int value)
|
||||||
{
|
{
|
||||||
struct max9286_priv *priv = gpiochip_get_data(chip);
|
|
||||||
|
|
||||||
if (value)
|
if (value)
|
||||||
priv->gpio_state |= BIT(offset);
|
priv->gpio_state |= BIT(offset);
|
||||||
else
|
else
|
||||||
priv->gpio_state &= ~BIT(offset);
|
priv->gpio_state &= ~BIT(offset);
|
||||||
|
|
||||||
max9286_write(priv, 0x0f, MAX9286_0X0F_RESERVED | priv->gpio_state);
|
return max9286_write(priv, 0x0f,
|
||||||
|
MAX9286_0X0F_RESERVED | priv->gpio_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int max9286_gpio_get(struct gpio_chip *chip, unsigned int offset)
|
static void max9286_gpiochip_set(struct gpio_chip *chip,
|
||||||
|
unsigned int offset, int value)
|
||||||
|
{
|
||||||
|
struct max9286_priv *priv = gpiochip_get_data(chip);
|
||||||
|
|
||||||
|
max9286_gpio_set(priv, offset, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int max9286_gpiochip_get(struct gpio_chip *chip, unsigned int offset)
|
||||||
{
|
{
|
||||||
struct max9286_priv *priv = gpiochip_get_data(chip);
|
struct max9286_priv *priv = gpiochip_get_data(chip);
|
||||||
|
|
||||||
|
@ -1057,13 +1072,10 @@ static int max9286_register_gpio(struct max9286_priv *priv)
|
||||||
gpio->owner = THIS_MODULE;
|
gpio->owner = THIS_MODULE;
|
||||||
gpio->ngpio = 2;
|
gpio->ngpio = 2;
|
||||||
gpio->base = -1;
|
gpio->base = -1;
|
||||||
gpio->set = max9286_gpio_set;
|
gpio->set = max9286_gpiochip_set;
|
||||||
gpio->get = max9286_gpio_get;
|
gpio->get = max9286_gpiochip_get;
|
||||||
gpio->can_sleep = true;
|
gpio->can_sleep = true;
|
||||||
|
|
||||||
/* GPIO values default to high */
|
|
||||||
priv->gpio_state = BIT(0) | BIT(1);
|
|
||||||
|
|
||||||
ret = devm_gpiochip_add_data(dev, gpio, priv);
|
ret = devm_gpiochip_add_data(dev, gpio, priv);
|
||||||
if (ret)
|
if (ret)
|
||||||
dev_err(dev, "Unable to create gpio_chip\n");
|
dev_err(dev, "Unable to create gpio_chip\n");
|
||||||
|
@ -1071,6 +1083,70 @@ static int max9286_register_gpio(struct max9286_priv *priv)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int max9286_parse_gpios(struct max9286_priv *priv)
|
||||||
|
{
|
||||||
|
struct device *dev = &priv->client->dev;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* GPIO values default to high */
|
||||||
|
priv->gpio_state = BIT(0) | BIT(1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parse the "gpio-poc" vendor property. If the property is not
|
||||||
|
* specified the camera power is controlled by a regulator.
|
||||||
|
*/
|
||||||
|
ret = of_property_read_u32_array(dev->of_node, "maxim,gpio-poc",
|
||||||
|
priv->gpio_poc, 2);
|
||||||
|
if (ret == -EINVAL) {
|
||||||
|
/*
|
||||||
|
* If gpio lines are not used for the camera power, register
|
||||||
|
* a gpio controller for consumers.
|
||||||
|
*/
|
||||||
|
ret = max9286_register_gpio(priv);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
priv->regulator = devm_regulator_get(dev, "poc");
|
||||||
|
if (IS_ERR(priv->regulator)) {
|
||||||
|
return dev_err_probe(dev, PTR_ERR(priv->regulator),
|
||||||
|
"Unable to get PoC regulator (%ld)\n",
|
||||||
|
PTR_ERR(priv->regulator));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the property is specified make sure it is well formed. */
|
||||||
|
if (ret || priv->gpio_poc[0] > 1 ||
|
||||||
|
(priv->gpio_poc[1] != GPIO_ACTIVE_HIGH &&
|
||||||
|
priv->gpio_poc[1] != GPIO_ACTIVE_LOW)) {
|
||||||
|
dev_err(dev, "Invalid 'gpio-poc' property\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int max9286_poc_enable(struct max9286_priv *priv, bool enable)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* If the regulator is not available, use gpio to control power. */
|
||||||
|
if (!priv->regulator)
|
||||||
|
ret = max9286_gpio_set(priv, priv->gpio_poc[0],
|
||||||
|
enable ^ priv->gpio_poc[1]);
|
||||||
|
else if (enable)
|
||||||
|
ret = regulator_enable(priv->regulator);
|
||||||
|
else
|
||||||
|
ret = regulator_disable(priv->regulator);
|
||||||
|
|
||||||
|
if (ret < 0)
|
||||||
|
dev_err(&priv->client->dev, "Unable to turn power %s\n",
|
||||||
|
enable ? "on" : "off");
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int max9286_init(struct device *dev)
|
static int max9286_init(struct device *dev)
|
||||||
{
|
{
|
||||||
struct max9286_priv *priv;
|
struct max9286_priv *priv;
|
||||||
|
@ -1080,17 +1156,14 @@ static int max9286_init(struct device *dev)
|
||||||
client = to_i2c_client(dev);
|
client = to_i2c_client(dev);
|
||||||
priv = i2c_get_clientdata(client);
|
priv = i2c_get_clientdata(client);
|
||||||
|
|
||||||
/* Enable the bus power. */
|
ret = max9286_poc_enable(priv, true);
|
||||||
ret = regulator_enable(priv->regulator);
|
if (ret)
|
||||||
if (ret < 0) {
|
|
||||||
dev_err(&client->dev, "Unable to turn PoC on\n");
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
|
||||||
|
|
||||||
ret = max9286_setup(priv);
|
ret = max9286_setup(priv);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "Unable to setup max9286\n");
|
dev_err(dev, "Unable to setup max9286\n");
|
||||||
goto err_regulator;
|
goto err_poc_disable;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1100,7 +1173,7 @@ static int max9286_init(struct device *dev)
|
||||||
ret = max9286_v4l2_register(priv);
|
ret = max9286_v4l2_register(priv);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "Failed to register with V4L2\n");
|
dev_err(dev, "Failed to register with V4L2\n");
|
||||||
goto err_regulator;
|
goto err_poc_disable;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = max9286_i2c_mux_init(priv);
|
ret = max9286_i2c_mux_init(priv);
|
||||||
|
@ -1116,8 +1189,8 @@ static int max9286_init(struct device *dev)
|
||||||
|
|
||||||
err_v4l2_register:
|
err_v4l2_register:
|
||||||
max9286_v4l2_unregister(priv);
|
max9286_v4l2_unregister(priv);
|
||||||
err_regulator:
|
err_poc_disable:
|
||||||
regulator_disable(priv->regulator);
|
max9286_poc_enable(priv, false);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1288,18 +1361,10 @@ static int max9286_probe(struct i2c_client *client)
|
||||||
*/
|
*/
|
||||||
max9286_configure_i2c(priv, false);
|
max9286_configure_i2c(priv, false);
|
||||||
|
|
||||||
ret = max9286_register_gpio(priv);
|
ret = max9286_parse_gpios(priv);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_powerdown;
|
goto err_powerdown;
|
||||||
|
|
||||||
priv->regulator = devm_regulator_get(&client->dev, "poc");
|
|
||||||
if (IS_ERR(priv->regulator)) {
|
|
||||||
ret = PTR_ERR(priv->regulator);
|
|
||||||
dev_err_probe(&client->dev, ret,
|
|
||||||
"Unable to get PoC regulator\n");
|
|
||||||
goto err_powerdown;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = max9286_parse_dt(priv);
|
ret = max9286_parse_dt(priv);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_powerdown;
|
goto err_powerdown;
|
||||||
|
@ -1326,7 +1391,7 @@ static int max9286_remove(struct i2c_client *client)
|
||||||
|
|
||||||
max9286_v4l2_unregister(priv);
|
max9286_v4l2_unregister(priv);
|
||||||
|
|
||||||
regulator_disable(priv->regulator);
|
max9286_poc_enable(priv, false);
|
||||||
|
|
||||||
gpiod_set_value_cansleep(priv->gpiod_pwdn, 0);
|
gpiod_set_value_cansleep(priv->gpiod_pwdn, 0);
|
||||||
|
|
||||||
|
|
|
@ -223,9 +223,10 @@ static int ml86v7667_get_mbus_config(struct v4l2_subdev *sd,
|
||||||
unsigned int pad,
|
unsigned int pad,
|
||||||
struct v4l2_mbus_config *cfg)
|
struct v4l2_mbus_config *cfg)
|
||||||
{
|
{
|
||||||
cfg->flags = V4L2_MBUS_MASTER | V4L2_MBUS_PCLK_SAMPLE_RISING |
|
|
||||||
V4L2_MBUS_DATA_ACTIVE_HIGH;
|
|
||||||
cfg->type = V4L2_MBUS_BT656;
|
cfg->type = V4L2_MBUS_BT656;
|
||||||
|
cfg->bus.parallel.flags = V4L2_MBUS_MASTER |
|
||||||
|
V4L2_MBUS_PCLK_SAMPLE_RISING |
|
||||||
|
V4L2_MBUS_DATA_ACTIVE_HIGH;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -695,10 +695,12 @@ static int mt9m001_get_mbus_config(struct v4l2_subdev *sd,
|
||||||
struct v4l2_mbus_config *cfg)
|
struct v4l2_mbus_config *cfg)
|
||||||
{
|
{
|
||||||
/* MT9M001 has all capture_format parameters fixed */
|
/* MT9M001 has all capture_format parameters fixed */
|
||||||
cfg->flags = V4L2_MBUS_PCLK_SAMPLE_FALLING |
|
|
||||||
V4L2_MBUS_HSYNC_ACTIVE_HIGH | V4L2_MBUS_VSYNC_ACTIVE_HIGH |
|
|
||||||
V4L2_MBUS_DATA_ACTIVE_HIGH | V4L2_MBUS_MASTER;
|
|
||||||
cfg->type = V4L2_MBUS_PARALLEL;
|
cfg->type = V4L2_MBUS_PARALLEL;
|
||||||
|
cfg->bus.parallel.flags = V4L2_MBUS_PCLK_SAMPLE_FALLING |
|
||||||
|
V4L2_MBUS_HSYNC_ACTIVE_HIGH |
|
||||||
|
V4L2_MBUS_VSYNC_ACTIVE_HIGH |
|
||||||
|
V4L2_MBUS_DATA_ACTIVE_HIGH |
|
||||||
|
V4L2_MBUS_MASTER;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/log2.h>
|
#include <linux/log2.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/regulator/consumer.h>
|
#include <linux/regulator/consumer.h>
|
||||||
#include <linux/v4l2-mediabus.h>
|
#include <linux/v4l2-mediabus.h>
|
||||||
|
@ -1143,15 +1142,17 @@ static int mt9m111_get_mbus_config(struct v4l2_subdev *sd,
|
||||||
{
|
{
|
||||||
struct mt9m111 *mt9m111 = container_of(sd, struct mt9m111, subdev);
|
struct mt9m111 *mt9m111 = container_of(sd, struct mt9m111, subdev);
|
||||||
|
|
||||||
cfg->flags = V4L2_MBUS_MASTER |
|
|
||||||
V4L2_MBUS_HSYNC_ACTIVE_HIGH | V4L2_MBUS_VSYNC_ACTIVE_HIGH |
|
|
||||||
V4L2_MBUS_DATA_ACTIVE_HIGH;
|
|
||||||
|
|
||||||
cfg->flags |= mt9m111->pclk_sample ? V4L2_MBUS_PCLK_SAMPLE_RISING :
|
|
||||||
V4L2_MBUS_PCLK_SAMPLE_FALLING;
|
|
||||||
|
|
||||||
cfg->type = V4L2_MBUS_PARALLEL;
|
cfg->type = V4L2_MBUS_PARALLEL;
|
||||||
|
|
||||||
|
cfg->bus.parallel.flags = V4L2_MBUS_MASTER |
|
||||||
|
V4L2_MBUS_HSYNC_ACTIVE_HIGH |
|
||||||
|
V4L2_MBUS_VSYNC_ACTIVE_HIGH |
|
||||||
|
V4L2_MBUS_DATA_ACTIVE_HIGH;
|
||||||
|
|
||||||
|
cfg->bus.parallel.flags |= mt9m111->pclk_sample ?
|
||||||
|
V4L2_MBUS_PCLK_SAMPLE_RISING :
|
||||||
|
V4L2_MBUS_PCLK_SAMPLE_FALLING;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue