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
|
||||
slightly different capabilities, like pixel alignment constraints, rotator
|
||||
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
|
||||
--------------
|
||||
|
@ -284,7 +284,7 @@ tda9887 TDA 9885/6/7 analog IF demodulator
|
||||
tea5761 TEA 5761 radio tuner
|
||||
tea5767 TEA 5767 radio tuner
|
||||
tua9001 Infineon TUA9001 silicon tuner
|
||||
tuner-xc2028 XCeive xc2028/xc3028 tuners
|
||||
xc2028 XCeive xc2028/xc3028 tuners
|
||||
xc4000 Xceive XC4000 silicon tuner
|
||||
xc5000 Xceive XC5000 silicon tuner
|
||||
============ ==================================================
|
||||
|
@ -33,7 +33,7 @@ reference manual [#f1]_.
|
||||
Entities
|
||||
--------
|
||||
|
||||
imx7-mipi-csi2
|
||||
imx-mipi-csi2
|
||||
--------------
|
||||
|
||||
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)
|
||||
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
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
Supports usage of MMAP buffers only (for now).
|
||||
|
@ -76,3 +76,16 @@ vimc-capture:
|
||||
|
||||
* 1 Pad sink
|
||||
* 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-wdma"
|
||||
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
|
||||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
|
||||
for details.
|
||||
@ -91,7 +89,6 @@ ovl0: ovl@1400c000 {
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
clocks = <&mmsys CLK_MM_DISP_OVL0>;
|
||||
iommus = <&iommu M4U_PORT_DISP_OVL0>;
|
||||
mediatek,larb = <&larb0>;
|
||||
};
|
||||
|
||||
ovl1: ovl@1400d000 {
|
||||
@ -101,7 +98,6 @@ ovl1: ovl@1400d000 {
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
clocks = <&mmsys CLK_MM_DISP_OVL1>;
|
||||
iommus = <&iommu M4U_PORT_DISP_OVL1>;
|
||||
mediatek,larb = <&larb4>;
|
||||
};
|
||||
|
||||
rdma0: rdma@1400e000 {
|
||||
@ -111,7 +107,6 @@ rdma0: rdma@1400e000 {
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
clocks = <&mmsys CLK_MM_DISP_RDMA0>;
|
||||
iommus = <&iommu M4U_PORT_DISP_RDMA0>;
|
||||
mediatek,larb = <&larb0>;
|
||||
mediatek,rdma-fifosize = <8192>;
|
||||
};
|
||||
|
||||
@ -122,7 +117,6 @@ rdma1: rdma@1400f000 {
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
clocks = <&mmsys CLK_MM_DISP_RDMA1>;
|
||||
iommus = <&iommu M4U_PORT_DISP_RDMA1>;
|
||||
mediatek,larb = <&larb4>;
|
||||
};
|
||||
|
||||
rdma2: rdma@14010000 {
|
||||
@ -132,7 +126,6 @@ rdma2: rdma@14010000 {
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
clocks = <&mmsys CLK_MM_DISP_RDMA2>;
|
||||
iommus = <&iommu M4U_PORT_DISP_RDMA2>;
|
||||
mediatek,larb = <&larb4>;
|
||||
};
|
||||
|
||||
wdma0: wdma@14011000 {
|
||||
@ -142,7 +135,6 @@ wdma0: wdma@14011000 {
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
clocks = <&mmsys CLK_MM_DISP_WDMA0>;
|
||||
iommus = <&iommu M4U_PORT_DISP_WDMA0>;
|
||||
mediatek,larb = <&larb0>;
|
||||
};
|
||||
|
||||
wdma1: wdma@14012000 {
|
||||
@ -152,7 +144,6 @@ wdma1: wdma@14012000 {
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
clocks = <&mmsys CLK_MM_DISP_WDMA1>;
|
||||
iommus = <&iommu M4U_PORT_DISP_WDMA1>;
|
||||
mediatek,larb = <&larb4>;
|
||||
};
|
||||
|
||||
color0: color@14013000 {
|
||||
|
180
Documentation/devicetree/bindings/media/amphion,vpu.yaml
Normal file
180
Documentation/devicetree/bindings/media/amphion,vpu.yaml
Normal file
@ -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.
|
||||
|
||||
port:
|
||||
$ref: /schemas/graph.yaml#/properties/port
|
||||
$ref: /schemas/graph.yaml#/$defs/port-base
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
endpoint:
|
||||
@ -68,8 +69,11 @@ properties:
|
||||
- const: 1
|
||||
- const: 2
|
||||
|
||||
link-frequencies: true
|
||||
|
||||
required:
|
||||
- data-lanes
|
||||
- link-frequencies
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
113
Documentation/devicetree/bindings/media/i2c/isil,isl79987.yaml
Normal file
113
Documentation/devicetree/bindings/media/i2c/isil,isl79987.yaml
Normal file
@ -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
|
||||
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:
|
||||
$ref: /schemas/graph.yaml#/properties/ports
|
||||
|
||||
@ -165,7 +187,16 @@ required:
|
||||
- reg
|
||||
- ports
|
||||
- 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
|
||||
|
||||
@ -310,4 +341,38 @@ examples:
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/*
|
||||
* Example of a deserializer that controls the camera Power over Coax
|
||||
* through one of its gpio lines.
|
||||
*/
|
||||
gmsl-deserializer@6c {
|
||||
compatible = "maxim,max9286";
|
||||
reg = <0x6c>;
|
||||
enable-gpios = <&gpio 14 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
/*
|
||||
* The remote camera power is controlled by MAX9286 GPIO line #0.
|
||||
* No 'poc-supply' nor 'gpio-controller' are specified.
|
||||
*/
|
||||
maxim,gpio-poc = <0 GPIO_ACTIVE_LOW>;
|
||||
|
||||
/*
|
||||
* Do not describe connections as they're the same as in the previous
|
||||
* example.
|
||||
*/
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@4 {
|
||||
reg = <4>;
|
||||
};
|
||||
};
|
||||
|
||||
i2c-mux {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -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
|
||||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
|
||||
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:
|
||||
mdp_rdma0: rdma@14001000 {
|
||||
@ -40,7 +37,6 @@ Example:
|
||||
<&mmsys CLK_MM_MUTEX_32K>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
iommus = <&iommu M4U_PORT_MDP_RDMA0>;
|
||||
mediatek,larb = <&larb0>;
|
||||
mediatek,vpu = <&vpu>;
|
||||
};
|
||||
|
||||
@ -51,7 +47,6 @@ Example:
|
||||
<&mmsys CLK_MM_MUTEX_32K>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
iommus = <&iommu M4U_PORT_MDP_RDMA1>;
|
||||
mediatek,larb = <&larb4>;
|
||||
};
|
||||
|
||||
mdp_rsz0: rsz@14003000 {
|
||||
@ -81,7 +76,6 @@ Example:
|
||||
clocks = <&mmsys CLK_MM_MDP_WDMA>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
iommus = <&iommu M4U_PORT_MDP_WDMA>;
|
||||
mediatek,larb = <&larb0>;
|
||||
};
|
||||
|
||||
mdp_wrot0: wrot@14007000 {
|
||||
@ -90,7 +84,6 @@ Example:
|
||||
clocks = <&mmsys CLK_MM_MDP_WROT0>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
iommus = <&iommu M4U_PORT_MDP_WROT0>;
|
||||
mediatek,larb = <&larb0>;
|
||||
};
|
||||
|
||||
mdp_wrot1: wrot@14008000 {
|
||||
@ -99,5 +92,4 @@ Example:
|
||||
clocks = <&mmsys CLK_MM_MDP_WROT1>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
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>;
|
||||
};
|
197
Documentation/devicetree/bindings/media/microchip,csi2dc.yaml
Normal file
197
Documentation/devicetree/bindings/media/microchip,csi2dc.yaml
Normal file
@ -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)
|
||||
%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#
|
||||
|
||||
title: NXP i.MX7 and i.MX8 MIPI CSI-2 receiver
|
@ -17,6 +17,7 @@ properties:
|
||||
compatible:
|
||||
oneOf:
|
||||
- enum:
|
||||
- fsl,imx8mq-csi
|
||||
- fsl,imx7-csi
|
||||
- fsl,imx6ul-csi
|
||||
- items:
|
||||
|
@ -5,7 +5,7 @@
|
||||
$id: "http://devicetree.org/schemas/media/nxp,imx8mq-vpu.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:
|
||||
- Philipp Zabel <p.zabel@pengutronix.de>
|
||||
@ -15,33 +15,21 @@ description:
|
||||
|
||||
properties:
|
||||
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:
|
||||
maxItems: 3
|
||||
|
||||
reg-names:
|
||||
items:
|
||||
- const: g1
|
||||
- const: g2
|
||||
- const: ctrl
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 2
|
||||
|
||||
interrupt-names:
|
||||
items:
|
||||
- const: g1
|
||||
- const: g2
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
maxItems: 3
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
- const: g1
|
||||
- const: g2
|
||||
- const: bus
|
||||
maxItems: 1
|
||||
|
||||
power-domains:
|
||||
maxItems: 1
|
||||
@ -49,31 +37,33 @@ properties:
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- reg-names
|
||||
- interrupts
|
||||
- interrupt-names
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/imx8mq-clock.h>
|
||||
#include <dt-bindings/power/imx8mq-power.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
||||
vpu: video-codec@38300000 {
|
||||
compatible = "nxp,imx8mq-vpu";
|
||||
reg = <0x38300000 0x10000>,
|
||||
<0x38310000 0x10000>,
|
||||
<0x38320000 0x10000>;
|
||||
reg-names = "g1", "g2", "ctrl";
|
||||
interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "g1", "g2";
|
||||
clocks = <&clk IMX8MQ_CLK_VPU_G1_ROOT>,
|
||||
<&clk IMX8MQ_CLK_VPU_G2_ROOT>,
|
||||
<&clk IMX8MQ_CLK_VPU_DEC_ROOT>;
|
||||
clock-names = "g1", "g2", "bus";
|
||||
power-domains = <&pgc_vpu>;
|
||||
vpu_g1: video-codec@38300000 {
|
||||
compatible = "nxp,imx8mq-vpu-g1";
|
||||
reg = <0x38300000 0x10000>;
|
||||
interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX8MQ_CLK_VPU_G1_ROOT>;
|
||||
power-domains = <&vpu_blk_ctrl IMX8MQ_VPUBLK_PD_G1>;
|
||||
};
|
||||
- |
|
||||
#include <dt-bindings/clock/imx8mq-clock.h>
|
||||
#include <dt-bindings/power/imx8mq-power.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
||||
vpu_g2: video-codec@38300000 {
|
||||
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
|
||||
|
||||
properties:
|
||||
clock-lanes:
|
||||
items:
|
||||
- const: 1
|
||||
|
||||
data-lanes:
|
||||
description:
|
||||
An array of physical data lanes indexes.
|
||||
@ -99,7 +95,6 @@ properties:
|
||||
maxItems: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
- data-lanes
|
||||
|
||||
port@1:
|
||||
@ -114,16 +109,11 @@ properties:
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
clock-lanes:
|
||||
items:
|
||||
- const: 1
|
||||
|
||||
data-lanes:
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
- data-lanes
|
||||
|
||||
reg:
|
||||
|
@ -105,10 +105,6 @@ properties:
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
clock-lanes:
|
||||
items:
|
||||
- const: 7
|
||||
|
||||
data-lanes:
|
||||
description:
|
||||
An array of physical data lanes indexes.
|
||||
@ -121,7 +117,6 @@ properties:
|
||||
maxItems: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
- data-lanes
|
||||
|
||||
port@1:
|
||||
@ -136,16 +131,11 @@ properties:
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
clock-lanes:
|
||||
items:
|
||||
- const: 7
|
||||
|
||||
data-lanes:
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
- data-lanes
|
||||
|
||||
port@2:
|
||||
@ -160,16 +150,11 @@ properties:
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
clock-lanes:
|
||||
items:
|
||||
- const: 7
|
||||
|
||||
data-lanes:
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
- data-lanes
|
||||
|
||||
port@3:
|
||||
@ -184,16 +169,11 @@ properties:
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
clock-lanes:
|
||||
items:
|
||||
- const: 7
|
||||
|
||||
data-lanes:
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
- data-lanes
|
||||
|
||||
reg:
|
||||
|
@ -111,16 +111,11 @@ properties:
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
clock-lanes:
|
||||
items:
|
||||
- const: 7
|
||||
|
||||
data-lanes:
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
- data-lanes
|
||||
|
||||
port@1:
|
||||
@ -135,16 +130,11 @@ properties:
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
clock-lanes:
|
||||
items:
|
||||
- const: 7
|
||||
|
||||
data-lanes:
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
- data-lanes
|
||||
|
||||
port@2:
|
||||
@ -159,16 +149,11 @@ properties:
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
clock-lanes:
|
||||
items:
|
||||
- const: 7
|
||||
|
||||
data-lanes:
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
- data-lanes
|
||||
|
||||
port@3:
|
||||
@ -183,16 +168,11 @@ properties:
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
clock-lanes:
|
||||
items:
|
||||
- const: 7
|
||||
|
||||
data-lanes:
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
- data-lanes
|
||||
|
||||
reg:
|
||||
|
@ -105,15 +105,11 @@ properties:
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
clock-lanes:
|
||||
maxItems: 1
|
||||
|
||||
data-lanes:
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
- data-lanes
|
||||
|
||||
port@1:
|
||||
@ -128,16 +124,11 @@ properties:
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
clock-lanes:
|
||||
items:
|
||||
- const: 7
|
||||
|
||||
data-lanes:
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
- data-lanes
|
||||
|
||||
port@2:
|
||||
@ -152,15 +143,11 @@ properties:
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
clock-lanes:
|
||||
maxItems: 1
|
||||
|
||||
data-lanes:
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
- data-lanes
|
||||
|
||||
port@3:
|
||||
@ -175,15 +162,11 @@ properties:
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
clock-lanes:
|
||||
maxItems: 1
|
||||
|
||||
data-lanes:
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
- data-lanes
|
||||
|
||||
reg:
|
||||
@ -203,9 +186,13 @@ properties:
|
||||
- const: vfe1
|
||||
- const: vfe_lite
|
||||
|
||||
vdda-supply:
|
||||
vdda-phy-supply:
|
||||
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:
|
||||
- clock-names
|
||||
@ -217,7 +204,8 @@ required:
|
||||
- power-domains
|
||||
- reg
|
||||
- reg-names
|
||||
- vdda-supply
|
||||
- vdda-phy-supply
|
||||
- vdda-pll-supply
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
@ -361,7 +349,8 @@ examples:
|
||||
"vfe1",
|
||||
"vfe_lite";
|
||||
|
||||
vdda-supply = <®_2v8>;
|
||||
vdda-phy-supply = <&vreg_l1a_0p875>;
|
||||
vdda-pll-supply = <&vreg_l26a_1p2>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
|
463
Documentation/devicetree/bindings/media/qcom,sm8250-camss.yaml
Normal file
463
Documentation/devicetree/bindings/media/qcom,sm8250-camss.yaml
Normal file
@ -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
|
||||
|
||||
data-lanes:
|
||||
maxItems: 1
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
items:
|
||||
maximum: 4
|
||||
|
||||
required:
|
||||
- clock-lanes
|
||||
|
@ -7,22 +7,22 @@ File partitioning
|
||||
-----------------
|
||||
|
||||
V4L2 display device driver
|
||||
drivers/media/platform/davinci/vpbe_display.c
|
||||
drivers/media/platform/davinci/vpbe_display.h
|
||||
drivers/media/platform/ti/davinci/vpbe_display.c
|
||||
drivers/media/platform/ti/davinci/vpbe_display.h
|
||||
|
||||
VPBE display controller
|
||||
drivers/media/platform/davinci/vpbe.c
|
||||
drivers/media/platform/davinci/vpbe.h
|
||||
drivers/media/platform/ti/davinci/vpbe.c
|
||||
drivers/media/platform/ti/davinci/vpbe.h
|
||||
|
||||
VPBE venc sub device driver
|
||||
drivers/media/platform/davinci/vpbe_venc.c
|
||||
drivers/media/platform/davinci/vpbe_venc.h
|
||||
drivers/media/platform/davinci/vpbe_venc_regs.h
|
||||
drivers/media/platform/ti/davinci/vpbe_venc.c
|
||||
drivers/media/platform/ti/davinci/vpbe_venc.h
|
||||
drivers/media/platform/ti/davinci/vpbe_venc_regs.h
|
||||
|
||||
VPBE osd driver
|
||||
drivers/media/platform/davinci/vpbe_osd.c
|
||||
drivers/media/platform/davinci/vpbe_osd.h
|
||||
drivers/media/platform/davinci/vpbe_osd_regs.h
|
||||
drivers/media/platform/ti/davinci/vpbe_osd.c
|
||||
drivers/media/platform/ti/davinci/vpbe_osd.h
|
||||
drivers/media/platform/ti/davinci/vpbe_osd_regs.h
|
||||
|
||||
To be done
|
||||
----------
|
||||
|
@ -12,22 +12,22 @@ Files partitioning
|
||||
|
||||
- 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
|
||||
|
||||
drivers/media/platform/exynos4-is/fimc-capture.c
|
||||
drivers/media/platform/samsung/exynos4-is/fimc-capture.c
|
||||
|
||||
- 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)
|
||||
|
||||
drivers/media/platform/exynos4-is/fimc-core.c
|
||||
drivers/media/platform/samsung/exynos4-is/fimc-core.c
|
||||
|
||||
- common files
|
||||
|
||||
drivers/media/platform/exynos4-is/fimc-core.h
|
||||
drivers/media/platform/exynos4-is/fimc-reg.h
|
||||
drivers/media/platform/exynos4-is/regs-fimc.h
|
||||
drivers/media/platform/samsung/exynos4-is/fimc-core.h
|
||||
drivers/media/platform/samsung/exynos4-is/fimc-reg.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'.
|
||||
|
||||
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
|
||||
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_FREQUENCY
|
||||
ignore define LIRC_TIMEOUT
|
||||
ignore define LIRC_OVERFLOW
|
||||
ignore define LIRC_VALUE
|
||||
ignore define LIRC_MODE2
|
||||
ignore define LIRC_IS_SPACE
|
||||
ignore define LIRC_IS_PULSE
|
||||
ignore define LIRC_IS_FREQUENCY
|
||||
ignore define LIRC_IS_TIMEOUT
|
||||
ignore define LIRC_IS_OVERFLOW
|
||||
|
||||
ignore define LIRC_MODE2SEND
|
||||
ignore define LIRC_SEND2MODE
|
||||
@ -28,7 +30,6 @@ ignore define LIRC_CAN_REC
|
||||
|
||||
ignore define LIRC_CAN_SEND_MASK
|
||||
ignore define LIRC_CAN_REC_MASK
|
||||
ignore define LIRC_CAN_SET_REC_DUTY_CYCLE
|
||||
|
||||
# Obsolete ioctls
|
||||
|
||||
@ -75,6 +76,7 @@ ignore define PULSE_MASK
|
||||
ignore define LIRC_MODE2_SPACE
|
||||
ignore define LIRC_MODE2_PULSE
|
||||
ignore define LIRC_MODE2_TIMEOUT
|
||||
ignore define LIRC_MODE2_OVERFLOW
|
||||
|
||||
ignore define LIRC_VALUE_MASK
|
||||
ignore define LIRC_MODE2_MASK
|
||||
|
@ -103,11 +103,11 @@ on the following table.
|
||||
|
||||
``LIRC_MODE2_PULSE``
|
||||
|
||||
Signifies the presence of IR in microseconds.
|
||||
Signifies the presence of IR in microseconds, also known as *flash*.
|
||||
|
||||
``LIRC_MODE2_SPACE``
|
||||
|
||||
Signifies absence of IR in microseconds.
|
||||
Signifies absence of IR in microseconds, also known as *gap*.
|
||||
|
||||
``LIRC_MODE2_FREQUENCY``
|
||||
|
||||
@ -121,6 +121,13 @@ on the following table.
|
||||
to no IR being detected, this packet will be sent, with the number
|
||||
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``
|
||||
|
@ -102,12 +102,6 @@ LIRC features
|
||||
The driver supports setting the receive carrier frequency using
|
||||
: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``
|
||||
@ -129,12 +123,6 @@ LIRC features
|
||||
The driver supports
|
||||
: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``
|
||||
@ -149,12 +137,6 @@ LIRC features
|
||||
The driver supports learning mode using
|
||||
: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``
|
||||
|
@ -616,6 +616,12 @@ Stateless Codec Control ID
|
||||
* - ``V4L2_H264_DECODE_PARAM_FLAG_BOTTOM_FIELD``
|
||||
- 0x00000004
|
||||
-
|
||||
* - ``V4L2_H264_DECODE_PARAM_FLAG_PFRAME``
|
||||
- 0x00000008
|
||||
-
|
||||
* - ``V4L2_H264_DECODE_PARAM_FLAG_BFRAME``
|
||||
- 0x00000010
|
||||
-
|
||||
|
||||
.. raw:: latex
|
||||
|
||||
@ -1692,7 +1698,12 @@ See section '7.3.1 Tx mode semantics' of the :ref:`vp9` specification for more d
|
||||
* - __u8
|
||||
- ``reference_mode``
|
||||
- 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
|
||||
- ``reserved[7]``
|
||||
- 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:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64.
|
||||
* - __u8
|
||||
- ``rps``
|
||||
- The reference set for the reference frame
|
||||
(V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_BEFORE,
|
||||
V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_AFTER or
|
||||
V4L2_HEVC_DPB_ENTRY_RPS_LT_CURR)
|
||||
- ``flags``
|
||||
- Long term flag for the reference frame
|
||||
(V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE). The flag is set as
|
||||
described in the ITU HEVC specification chapter "8.3.2 Decoding
|
||||
process for reference picture set".
|
||||
* - __u8
|
||||
- ``field_pic``
|
||||
- Whether the reference is a field picture or a frame.
|
||||
@ -3383,15 +3383,15 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
|
||||
* - __u8
|
||||
- ``poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
|
||||
- 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
|
||||
- ``poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
|
||||
- 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
|
||||
- ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
|
||||
- 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
|
||||
- ``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``
|
||||
- 'MT21'
|
||||
- Compressed two-planar YVU420 format used by Mediatek MT8173.
|
||||
The compression is lossless.
|
||||
It is an opaque intermediate format and the MDP hardware must be
|
||||
- Compressed two-planar YVU420 format used by Mediatek MT8173, MT8192,
|
||||
MT8195 and more. The compression is lossless. This format have
|
||||
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``,
|
||||
``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
|
||||
|
||||
\normalsize
|
||||
|
@ -672,8 +672,8 @@ nomenclature that instead use the order of components as seen in a 24- or
|
||||
- ``V4L2_PIX_FMT_BGR24``
|
||||
- 'BGR3'
|
||||
|
||||
- G\ :sub:`7-0`
|
||||
- B\ :sub:`7-0`
|
||||
- G\ :sub:`7-0`
|
||||
- R\ :sub:`7-0`
|
||||
-
|
||||
* .. _V4L2-PIX-FMT-RGB24:
|
||||
|
@ -75,8 +75,8 @@ are often referred to as greyscale formats.
|
||||
- ``V4L2_PIX_FMT_Y10P``
|
||||
- 'Y10P'
|
||||
|
||||
- Y'\ :sub:`0`\ [7:0]
|
||||
- Y'\ :sub:`1`\ [9:8]
|
||||
- Y'\ :sub:`0`\ [9:2]
|
||||
- Y'\ :sub:`1`\ [9:2]
|
||||
- Y'\ :sub:`2`\ [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]
|
||||
|
@ -76,7 +76,7 @@ All components are stored with the same number of bits per component.
|
||||
- 'NV21'
|
||||
- 8
|
||||
- 4:2:0
|
||||
- Cr, Cr
|
||||
- Cr, Cb
|
||||
- Yes
|
||||
- Linear
|
||||
* - V4L2_PIX_FMT_NV12M
|
||||
@ -90,7 +90,7 @@ All components are stored with the same number of bits per component.
|
||||
- 'NM21'
|
||||
- 8
|
||||
- 4:2:0
|
||||
- Cr, Cr
|
||||
- Cr, Cb
|
||||
- No
|
||||
- Linear
|
||||
* - V4L2_PIX_FMT_NV12MT
|
||||
@ -120,7 +120,7 @@ All components are stored with the same number of bits per component.
|
||||
- 'NV61'
|
||||
- 8
|
||||
- 4:2:2
|
||||
- Cr, Cr
|
||||
- Cr, Cb
|
||||
- Yes
|
||||
- Linear
|
||||
* - V4L2_PIX_FMT_NV16M
|
||||
@ -134,7 +134,7 @@ All components are stored with the same number of bits per component.
|
||||
- 'NM61'
|
||||
- 8
|
||||
- 4:2:2
|
||||
- Cr, Cr
|
||||
- Cr, Cb
|
||||
- No
|
||||
- Linear
|
||||
* - V4L2_PIX_FMT_NV24
|
||||
@ -148,7 +148,7 @@ All components are stored with the same number of bits per component.
|
||||
- 'NV42'
|
||||
- 8
|
||||
- 4:4:4
|
||||
- Cr, Cr
|
||||
- Cr, Cb
|
||||
- Yes
|
||||
- Linear
|
||||
|
||||
@ -257,6 +257,9 @@ of the luma plane.
|
||||
.. _V4L2-PIX-FMT-NV12-4L4:
|
||||
.. _V4L2-PIX-FMT-NV12-16L16:
|
||||
.. _V4L2-PIX-FMT-NV12-32L32:
|
||||
.. _V4L2-PIX-FMT-NV12M-8L128:
|
||||
.. _V4L2-PIX-FMT-NV12M-10BE-8L128:
|
||||
.. _V4L2-PIX-FMT-MM21:
|
||||
|
||||
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
|
||||
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
|
||||
aligned to a multiple of 4. The layouts of the luma and chroma planes are
|
||||
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
|
||||
aligned to a multiple of 16. The layouts of the luma and chroma planes are
|
||||
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
|
||||
aligned to a multiple of 32. The layouts of the luma and chroma planes are
|
||||
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:
|
||||
|
||||
.. kernel-figure:: nv12mt.svg
|
||||
|
@ -134,7 +134,7 @@ file: media/v4l/v4l2grab.c
|
||||
tv.tv_usec = 0;
|
||||
|
||||
r = select(fd + 1, &fds, NULL, NULL, &tv);
|
||||
} while ((r == -1 && (errno = EINTR)));
|
||||
} while ((r == -1 && (errno == EINTR)));
|
||||
if (r == -1) {
|
||||
perror("select");
|
||||
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
|
||||
a struct :c:type:`v4l2_buffer` as above, when
|
||||
``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
|
||||
non-critical (recoverable) streaming error. In such case the application
|
||||
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: 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
|
||||
M: Christian Eggers <ceggers@arri.de>
|
||||
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-media@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/media/platform/s5p-g2d/
|
||||
F: drivers/media/platform/samsung/s5p-g2d/
|
||||
|
||||
ARM/SAMSUNG S5P SERIES HDMI CEC SUBSYSTEM SUPPORT
|
||||
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-media@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/media/platform/s5p-jpeg/
|
||||
F: drivers/media/platform/samsung/s5p-jpeg/
|
||||
|
||||
ARM/SAMSUNG S5P SERIES Multi Format Codec (MFC) SUPPORT
|
||||
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-media@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/media/platform/s5p-mfc/
|
||||
F: drivers/media/platform/samsung/s5p-mfc/
|
||||
|
||||
ARM/SHMOBILE ARM ARCHITECTURE
|
||||
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/dma/st_fdma*
|
||||
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/mmc/host/sdhci-st.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)
|
||||
S: Maintained
|
||||
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
|
||||
M: Corentin Chary <corentin.chary@gmail.com>
|
||||
@ -3387,7 +3396,7 @@ L: linux-media@vger.kernel.org
|
||||
S: Supported
|
||||
W: https://linuxtv.org
|
||||
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
|
||||
M: Dariusz Marcinkiewicz <reksio@newterm.pl>
|
||||
@ -4252,7 +4261,7 @@ L: linux-media@vger.kernel.org
|
||||
S: Orphan
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
F: Documentation/admin-guide/media/cafe_ccic*
|
||||
F: drivers/media/platform/marvell-ccic/
|
||||
F: drivers/media/platform/marvell/
|
||||
|
||||
CAIF NETWORK LAYER
|
||||
L: netdev@vger.kernel.org
|
||||
@ -4776,7 +4785,7 @@ M: Philipp Zabel <p.zabel@pengutronix.de>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/media/coda.yaml
|
||||
F: drivers/media/platform/coda/
|
||||
F: drivers/media/platform/chips-media/
|
||||
|
||||
CODE OF CONDUCT
|
||||
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
@ -5490,7 +5499,7 @@ L: linux-media@vger.kernel.org
|
||||
S: Supported
|
||||
W: https://linuxtv.org
|
||||
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
|
||||
M: Zev Weiss <zev@bewilderbeest.net>
|
||||
@ -8886,7 +8895,7 @@ L: linux-media@vger.kernel.org
|
||||
S: Supported
|
||||
W: https://linuxtv.org
|
||||
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
|
||||
M: Naoya Horiguchi <naoya.horiguchi@nec.com>
|
||||
@ -8921,6 +8930,12 @@ L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
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
|
||||
M: "K. Y. Srinivasan" <kys@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: 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
|
||||
M: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
|
||||
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-renesas-soc@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/media/platform/rcar_jpu.c
|
||||
F: drivers/media/platform/renesas/rcar_jpu.c
|
||||
|
||||
JSM Neo PCI based serial card
|
||||
L: linux-serial@vger.kernel.org
|
||||
@ -11878,7 +11901,7 @@ M: Philipp Zabel <p.zabel@pengutronix.de>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
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
|
||||
M: Sergey Kozlov <serjk@netup.ru>
|
||||
@ -11943,10 +11966,10 @@ L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
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-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-mipi-csis.c
|
||||
|
||||
MEDIA DRIVERS FOR HELENE
|
||||
M: Abylay Ospan <aospan@netup.ru>
|
||||
@ -12001,7 +12024,7 @@ L: linux-tegra@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
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
|
||||
M: Jacopo Mondi <jacopo@jmondi.org>
|
||||
@ -12010,7 +12033,7 @@ L: linux-renesas-soc@vger.kernel.org
|
||||
S: Supported
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
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
|
||||
|
||||
MEDIA DRIVERS FOR RENESAS - DRIF
|
||||
@ -12020,7 +12043,7 @@ L: linux-renesas-soc@vger.kernel.org
|
||||
S: Supported
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
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
|
||||
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
@ -12029,7 +12052,7 @@ L: linux-renesas-soc@vger.kernel.org
|
||||
S: Supported
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
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
|
||||
|
||||
MEDIA DRIVERS FOR RENESAS - FDP1
|
||||
@ -12039,7 +12062,7 @@ L: linux-renesas-soc@vger.kernel.org
|
||||
S: Supported
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
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
|
||||
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,isp.yaml
|
||||
F: Documentation/devicetree/bindings/media/renesas,vin.yaml
|
||||
F: drivers/media/platform/rcar-isp.c
|
||||
F: drivers/media/platform/rcar-vin/
|
||||
F: drivers/media/platform/renesas/rcar-isp.c
|
||||
F: drivers/media/platform/renesas/rcar-vin/
|
||||
|
||||
MEDIA DRIVERS FOR RENESAS - VSP1
|
||||
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
@ -12061,7 +12084,7 @@ L: linux-renesas-soc@vger.kernel.org
|
||||
S: Supported
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
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
|
||||
L: linux-media@vger.kernel.org
|
||||
@ -12083,7 +12106,7 @@ L: linux-media@vger.kernel.org
|
||||
S: Supported
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
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)
|
||||
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>
|
||||
S: Supported
|
||||
F: Documentation/devicetree/bindings/media/mediatek-jpeg-decoder.txt
|
||||
F: drivers/media/platform/mtk-jpeg/
|
||||
F: drivers/media/platform/mediatek/jpeg/
|
||||
|
||||
MEDIATEK MDP DRIVER
|
||||
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>
|
||||
S: Supported
|
||||
F: Documentation/devicetree/bindings/media/mediatek-mdp.txt
|
||||
F: drivers/media/platform/mtk-mdp/
|
||||
F: drivers/media/platform/mtk-vpu/
|
||||
F: drivers/media/platform/mediatek/mdp/
|
||||
F: drivers/media/platform/mediatek/vpu/
|
||||
|
||||
MEDIATEK MEDIA DRIVER
|
||||
M: Tiffany Lin <tiffany.lin@mediatek.com>
|
||||
@ -12184,8 +12207,8 @@ M: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
|
||||
S: Supported
|
||||
F: Documentation/devicetree/bindings/media/mediatek-vcodec.txt
|
||||
F: Documentation/devicetree/bindings/media/mediatek-vpu.txt
|
||||
F: drivers/media/platform/mtk-vcodec/
|
||||
F: drivers/media/platform/mtk-vpu/
|
||||
F: drivers/media/platform/mediatek/vcodec/
|
||||
F: drivers/media/platform/mediatek/vpu/
|
||||
|
||||
MEDIATEK MMC/SD/SDIO DRIVER
|
||||
M: Chaotian Jing <chaotian.jing@mediatek.com>
|
||||
@ -12560,7 +12583,7 @@ L: linux-amlogic@lists.infradead.org
|
||||
S: Supported
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
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
|
||||
M: Liang Yang <liang.yang@amlogic.com>
|
||||
@ -12642,6 +12665,13 @@ L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||
S: Supported
|
||||
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
|
||||
M: Tudor Ambarus <tudor.ambarus@microchip.com>
|
||||
L: linux-crypto@vger.kernel.org
|
||||
@ -12667,11 +12697,8 @@ L: linux-media@vger.kernel.org
|
||||
S: Supported
|
||||
F: Documentation/devicetree/bindings/media/atmel,isc.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-regs.h
|
||||
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: drivers/media/platform/atmel/atmel-isc*
|
||||
F: drivers/media/platform/atmel/atmel-sama*-isc*
|
||||
F: include/linux/atmel-isc-media.h
|
||||
|
||||
MICROCHIP ISI DRIVER
|
||||
@ -14130,7 +14157,7 @@ M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/media/ti,omap3isp.txt
|
||||
F: drivers/media/platform/omap3isp/
|
||||
F: drivers/media/platform/ti/omap3isp/
|
||||
F: drivers/staging/media/omap4iss/
|
||||
|
||||
OMAP MMC SUPPORT
|
||||
@ -14238,6 +14265,12 @@ M: Harald Welte <laforge@gnumonks.org>
|
||||
S: Maintained
|
||||
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
|
||||
M: Dongchun Zhu <dongchun.zhu@mediatek.com>
|
||||
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: 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
|
||||
M: Sakari Ailus <sakari.ailus@linux.intel.com>
|
||||
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.*
|
||||
|
||||
ROCKCHIP ISP V1 DRIVER
|
||||
M: Helen Koike <helen.koike@collabora.com>
|
||||
M: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
|
||||
M: Dafna Hirschfeld <dafna@fastmail.com>
|
||||
L: linux-media@vger.kernel.org
|
||||
L: linux-rockchip@lists.infradead.org
|
||||
S: Maintained
|
||||
@ -17100,7 +17139,7 @@ M: Sylwester Nawrocki <sylvester.nawrocki@gmail.com>
|
||||
L: linux-media@vger.kernel.org
|
||||
L: linux-samsung-soc@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/media/platform/s3c-camif/
|
||||
F: drivers/media/platform/samsung/s3c-camif/
|
||||
F: include/media/drv-intf/s3c_camif.h
|
||||
|
||||
SAMSUNG S3FWRN5 NFC DRIVER
|
||||
@ -17140,7 +17179,7 @@ M: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Supported
|
||||
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
|
||||
M: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
||||
@ -17575,7 +17614,7 @@ F: include/media/i2c/rj54n1cb0c.h
|
||||
SH_VOU V4L2 OUTPUT DRIVER
|
||||
L: linux-media@vger.kernel.org
|
||||
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
|
||||
|
||||
SI2157 MEDIA DRIVER
|
||||
@ -18347,7 +18386,8 @@ F: Documentation/devicetree/bindings/iio/imu/st,lsm6dsx.yaml
|
||||
F: drivers/iio/imu/st_lsm6dsx/
|
||||
|
||||
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
|
||||
S: Maintained
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
@ -19324,7 +19364,7 @@ S: Maintained
|
||||
W: https://linuxtv.org
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
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
|
||||
M: Eduardo Valentin <edubezval@gmail.com>
|
||||
@ -19383,7 +19423,7 @@ S: Maintained
|
||||
W: https://linuxtv.org
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
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/
|
||||
|
||||
TI ENHANCED QUADRATURE ENCODER PULSE (eQEP) DRIVER
|
||||
@ -19469,7 +19509,8 @@ W: http://linuxtv.org/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
F: Documentation/devicetree/bindings/media/ti,cal.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
|
||||
L: linux-wireless@vger.kernel.org
|
||||
@ -20442,8 +20483,8 @@ F: drivers/media/common/videobuf2/*
|
||||
F: include/media/videobuf2-*
|
||||
|
||||
VIMC VIRTUAL MEDIA CONTROLLER DRIVER
|
||||
M: Helen Koike <helen.koike@collabora.com>
|
||||
R: Shuah Khan <skhan@linuxfoundation.org>
|
||||
M: Shuah Khan <skhan@linuxfoundation.org>
|
||||
R: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
W: https://linuxtv.org
|
||||
@ -21132,7 +21173,7 @@ L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
W: https://linuxtv.org
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
F: drivers/media/tuners/tuner-xc2028.*
|
||||
F: drivers/media/tuners/xc2028.*
|
||||
|
||||
XDP (eXpress Data Path)
|
||||
M: Alexei Starovoitov <ast@kernel.org>
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/soc/mediatek/mtk-cmdq.h>
|
||||
|
||||
#include "mtk_disp_drv.h"
|
||||
@ -414,9 +415,13 @@ static int mtk_disp_ovl_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
pm_runtime_enable(dev);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
component_del(&pdev->dev, &mtk_disp_ovl_component_ops);
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/soc/mediatek/mtk-cmdq.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);
|
||||
|
||||
pm_runtime_enable(dev);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,6 @@
|
||||
#include <linux/soc/mediatek/mtk-mutex.h>
|
||||
|
||||
#include <asm/barrier.h>
|
||||
#include <soc/mediatek/smi.h>
|
||||
|
||||
#include <drm/drm_atomic.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);
|
||||
|
||||
ret = mtk_smi_larb_get(comp->larb_dev);
|
||||
if (ret) {
|
||||
DRM_ERROR("Failed to get larb: %d\n", ret);
|
||||
ret = pm_runtime_resume_and_get(comp->dev);
|
||||
if (ret < 0) {
|
||||
DRM_DEV_ERROR(comp->dev, "Failed to enable power domain: %d\n", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
ret = mtk_crtc_ddp_hw_init(mtk_crtc);
|
||||
if (ret) {
|
||||
mtk_smi_larb_put(comp->larb_dev);
|
||||
pm_runtime_put(comp->dev);
|
||||
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_ddp_comp *comp = mtk_crtc->ddp_comp[0];
|
||||
int i;
|
||||
int i, ret;
|
||||
|
||||
DRM_DEBUG_DRIVER("%s %d\n", __func__, crtc->base.id);
|
||||
if (!mtk_crtc->enabled)
|
||||
@ -705,7 +704,9 @@ static void mtk_drm_crtc_atomic_disable(struct drm_crtc *crtc,
|
||||
|
||||
drm_crtc_vblank_off(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;
|
||||
}
|
||||
|
@ -447,37 +447,15 @@ unsigned int mtk_drm_find_possible_crtc_by_comp(struct drm_device *drm,
|
||||
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,
|
||||
enum mtk_ddp_comp_id comp_id)
|
||||
{
|
||||
struct platform_device *comp_pdev;
|
||||
enum mtk_ddp_comp_type type;
|
||||
struct mtk_ddp_comp_dev *priv;
|
||||
#if IS_REACHABLE(CONFIG_MTK_CMDQ)
|
||||
int ret;
|
||||
#endif
|
||||
|
||||
if (comp_id < 0 || comp_id >= DDP_COMPONENT_ID_MAX)
|
||||
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;
|
||||
|
||||
/* 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 ||
|
||||
type == MTK_DISP_BLS ||
|
||||
type == MTK_DISP_CCORR ||
|
||||
|
@ -71,7 +71,6 @@ struct mtk_ddp_comp_funcs {
|
||||
struct mtk_ddp_comp {
|
||||
struct device *dev;
|
||||
int irq;
|
||||
struct device *larb_dev;
|
||||
enum mtk_ddp_comp_id id;
|
||||
const struct mtk_ddp_comp_funcs *funcs;
|
||||
};
|
||||
|
@ -645,11 +645,8 @@ err_pm:
|
||||
pm_runtime_disable(dev);
|
||||
err_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]);
|
||||
if (private->ddp_comp[i].larb_dev)
|
||||
put_device(private->ddp_comp[i].larb_dev);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -357,11 +357,11 @@ static int fill_csi_bus_cfg(struct ipu_csi_bus_config *csicfg,
|
||||
switch (mbus_cfg->type) {
|
||||
case V4L2_MBUS_PARALLEL:
|
||||
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;
|
||||
csicfg->hsync_pol = (mbus_cfg->flags &
|
||||
csicfg->hsync_pol = (mbus_cfg->bus.parallel.flags &
|
||||
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;
|
||||
csicfg->clk_mode = IPU_CSI_CLK_MODE_GATED_CLK;
|
||||
break;
|
||||
|
@ -110,7 +110,7 @@ config RMI4_F3A
|
||||
|
||||
config RMI4_F54
|
||||
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 RMI4_F55
|
||||
help
|
||||
|
@ -131,7 +131,7 @@ config TOUCHSCREEN_ATMEL_MXT
|
||||
config TOUCHSCREEN_ATMEL_MXT_T37
|
||||
bool "Support T37 Diagnostic Data"
|
||||
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
|
||||
help
|
||||
Say Y here if you want support to output data from the T37
|
||||
@ -1252,7 +1252,7 @@ config TOUCHSCREEN_SUN4I
|
||||
config TOUCHSCREEN_SUR40
|
||||
tristate "Samsung SUR40 (Surface 2.0/PixelSense) touchscreen"
|
||||
depends on USB && MEDIA_USB_SUPPORT && HAS_DMA
|
||||
depends on VIDEO_V4L2
|
||||
depends on VIDEO_DEV
|
||||
select VIDEOBUF2_DMA_SG
|
||||
help
|
||||
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 mtk_iommu_data *data;
|
||||
struct device_link *link;
|
||||
struct device *larbdev;
|
||||
unsigned int larbid, larbidx, i;
|
||||
|
||||
if (!fwspec || fwspec->ops != &mtk_iommu_ops)
|
||||
return ERR_PTR(-ENODEV); /* Not a iommu client device */
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
static void mtk_iommu_release_device(struct device *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)
|
||||
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);
|
||||
}
|
||||
|
||||
@ -847,6 +877,10 @@ static int mtk_iommu_probe(struct platform_device *pdev)
|
||||
|
||||
plarbdev = of_find_device_by_node(larbnode);
|
||||
if (!plarbdev) {
|
||||
of_node_put(larbnode);
|
||||
return -ENODEV;
|
||||
}
|
||||
if (!plarbdev->dev.driver) {
|
||||
of_node_put(larbnode);
|
||||
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 of_phandle_args iommu_spec;
|
||||
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",
|
||||
"#iommu-cells",
|
||||
@ -444,6 +455,23 @@ static struct iommu_device *mtk_iommu_probe_device(struct device *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;
|
||||
}
|
||||
|
||||
@ -464,10 +492,18 @@ static void mtk_iommu_probe_finalize(struct device *dev)
|
||||
static void mtk_iommu_release_device(struct device *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)
|
||||
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);
|
||||
}
|
||||
|
||||
@ -594,6 +630,10 @@ static int mtk_iommu_probe(struct platform_device *pdev)
|
||||
|
||||
plarbdev = of_find_device_by_node(larbnode);
|
||||
if (!plarbdev) {
|
||||
of_node_put(larbnode);
|
||||
return -ENODEV;
|
||||
}
|
||||
if (!plarbdev->dev.driver) {
|
||||
of_node_put(larbnode);
|
||||
return -EPROBE_DEFER;
|
||||
}
|
||||
|
@ -160,6 +160,9 @@ menu "Media core support"
|
||||
config VIDEO_DEV
|
||||
tristate "Video4Linux core"
|
||||
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
|
||||
Enables the V4L2 API, used by cameras, analog TV, video grabbers,
|
||||
radio devices and by some input devices.
|
||||
@ -216,13 +219,12 @@ menu "Media drivers"
|
||||
comment "Drivers filtered as selected at 'Filter media drivers'"
|
||||
depends on MEDIA_SUPPORT_FILTER
|
||||
|
||||
comment "Media drivers"
|
||||
|
||||
source "drivers/media/usb/Kconfig"
|
||||
source "drivers/media/pci/Kconfig"
|
||||
source "drivers/media/radio/Kconfig"
|
||||
|
||||
# Common driver options
|
||||
source "drivers/media/common/Kconfig"
|
||||
|
||||
if MEDIA_PLATFORM_SUPPORT
|
||||
source "drivers/media/platform/Kconfig"
|
||||
source "drivers/media/mmc/Kconfig"
|
||||
@ -234,6 +236,9 @@ endif
|
||||
|
||||
source "drivers/media/firewire/Kconfig"
|
||||
|
||||
# Common driver options
|
||||
source "drivers/media/common/Kconfig"
|
||||
|
||||
endmenu
|
||||
|
||||
#
|
||||
|
@ -215,6 +215,8 @@ struct cec_dmi_match {
|
||||
static const struct cec_dmi_match cec_dmi_match_table[] = {
|
||||
/* Google Fizz */
|
||||
{ "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,
|
||||
|
@ -12,7 +12,6 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/platform_device.h>
|
||||
@ -129,7 +128,7 @@ static int secocec_adap_enable(struct cec_adapter *adap, bool enable)
|
||||
if (status)
|
||||
goto err;
|
||||
|
||||
dev_dbg(dev, "Device enabled");
|
||||
dev_dbg(dev, "Device enabled\n");
|
||||
} else {
|
||||
/* Clear the status register */
|
||||
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_IR);
|
||||
|
||||
dev_dbg(dev, "Device disabled");
|
||||
dev_dbg(dev, "Device disabled\n");
|
||||
}
|
||||
|
||||
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) {
|
||||
/* 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;
|
||||
}
|
||||
|
||||
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;
|
||||
goto rxerr;
|
||||
}
|
||||
@ -390,12 +389,12 @@ static int secocec_ir_probe(void *priv)
|
||||
if (status != 0)
|
||||
goto err;
|
||||
|
||||
dev_dbg(dev, "IR enabled");
|
||||
dev_dbg(dev, "IR enabled\n");
|
||||
|
||||
status = devm_rc_register_device(dev, cec->ir);
|
||||
|
||||
if (status) {
|
||||
dev_err(dev, "Failed to prepare input device");
|
||||
dev_err(dev, "Failed to prepare input device\n");
|
||||
cec->ir = NULL;
|
||||
goto err;
|
||||
}
|
||||
@ -408,7 +407,7 @@ err:
|
||||
smb_wr16(SECOCEC_ENABLE_REG_1,
|
||||
val & ~SECOCEC_ENABLE_REG_1_IR);
|
||||
|
||||
dev_dbg(dev, "IR disabled");
|
||||
dev_dbg(dev, "IR disabled\n");
|
||||
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);
|
||||
|
||||
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);
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
dev_err(dev, "IR Receive message failed (%d)", status);
|
||||
dev_err(dev, "IR Receive message failed (%d)\n", status);
|
||||
return -EIO;
|
||||
}
|
||||
#else
|
||||
@ -497,7 +496,7 @@ static irqreturn_t secocec_irq_handler(int irq, void *priv)
|
||||
return IRQ_HANDLED;
|
||||
|
||||
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 */
|
||||
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;
|
||||
int irq = 0;
|
||||
|
||||
gpio = devm_gpiod_get(dev, NULL, GPIOF_IN);
|
||||
gpio = devm_gpiod_get(dev, NULL, GPIOD_IN);
|
||||
if (IS_ERR(gpio)) {
|
||||
dev_err(dev, "Cannot request interrupt gpio");
|
||||
dev_err(dev, "Cannot request interrupt gpio\n");
|
||||
return PTR_ERR(gpio);
|
||||
}
|
||||
|
||||
irq = gpiod_to_irq(gpio);
|
||||
if (irq < 0) {
|
||||
dev_err(dev, "Cannot find valid irq");
|
||||
dev_err(dev, "Cannot find valid irq\n");
|
||||
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;
|
||||
|
||||
@ -590,7 +589,7 @@ static int secocec_probe(struct platform_device *pdev)
|
||||
|
||||
/* Request SMBus regions */
|
||||
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;
|
||||
}
|
||||
|
||||
@ -598,14 +597,14 @@ static int secocec_probe(struct platform_device *pdev)
|
||||
secocec->dev = 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;
|
||||
goto err;
|
||||
}
|
||||
|
||||
ret = secocec_acpi_probe(secocec);
|
||||
if (ret) {
|
||||
dev_err(dev, "Cannot assign gpio to IRQ");
|
||||
dev_err(dev, "Cannot assign gpio to IRQ\n");
|
||||
ret = -ENODEV;
|
||||
goto err;
|
||||
}
|
||||
@ -613,11 +612,11 @@ static int secocec_probe(struct platform_device *pdev)
|
||||
/* Firmware version check */
|
||||
ret = smb_rd16(SECOCEC_VERSION, &val);
|
||||
if (ret) {
|
||||
dev_err(dev, "Cannot check fw version");
|
||||
dev_err(dev, "Cannot check fw version\n");
|
||||
goto err;
|
||||
}
|
||||
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);
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
@ -631,7 +630,7 @@ static int secocec_probe(struct platform_device *pdev)
|
||||
dev_name(&pdev->dev), secocec);
|
||||
|
||||
if (ret) {
|
||||
dev_err(dev, "Cannot request IRQ %d", secocec->irq);
|
||||
dev_err(dev, "Cannot request IRQ %d\n", secocec->irq);
|
||||
ret = -EIO;
|
||||
goto err;
|
||||
}
|
||||
@ -666,7 +665,7 @@ static int secocec_probe(struct platform_device *pdev)
|
||||
|
||||
platform_set_drvdata(pdev, secocec);
|
||||
|
||||
dev_dbg(dev, "Device registered");
|
||||
dev_dbg(dev, "Device registered\n");
|
||||
|
||||
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);
|
||||
|
||||
dev_dbg(&pdev->dev, "IR disabled");
|
||||
dev_dbg(&pdev->dev, "IR disabled\n");
|
||||
}
|
||||
cec_notifier_cec_adap_unregister(secocec->notifier, secocec->cec_adap);
|
||||
cec_unregister_adapter(secocec->cec_adap);
|
||||
|
||||
release_region(BRA_SMB_BASE_ADDR, 7);
|
||||
|
||||
dev_dbg(&pdev->dev, "CEC device removed");
|
||||
dev_dbg(&pdev->dev, "CEC device removed\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -709,7 +708,7 @@ static int secocec_suspend(struct device *dev)
|
||||
int status;
|
||||
u16 val;
|
||||
|
||||
dev_dbg(dev, "Device going to suspend, disabling");
|
||||
dev_dbg(dev, "Device going to suspend, disabling\n");
|
||||
|
||||
/* Clear the status register */
|
||||
status = smb_rd16(SECOCEC_STATUS_REG_1, &val);
|
||||
@ -733,7 +732,7 @@ static int secocec_suspend(struct device *dev)
|
||||
return 0;
|
||||
|
||||
err:
|
||||
dev_err(dev, "Suspend failed (err: %d)", status);
|
||||
dev_err(dev, "Suspend failed: %d\n", status);
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -742,7 +741,7 @@ static int secocec_resume(struct device *dev)
|
||||
int status;
|
||||
u16 val;
|
||||
|
||||
dev_dbg(dev, "Resuming device from suspend");
|
||||
dev_dbg(dev, "Resuming device from suspend\n");
|
||||
|
||||
/* Clear the status register */
|
||||
status = smb_rd16(SECOCEC_STATUS_REG_1, &val);
|
||||
@ -762,12 +761,12 @@ static int secocec_resume(struct device *dev)
|
||||
if (status)
|
||||
goto err;
|
||||
|
||||
dev_dbg(dev, "Device resumed from suspend");
|
||||
dev_dbg(dev, "Device resumed from suspend\n");
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
dev_err(dev, "Resume failed (err: %d)", status);
|
||||
dev_err(dev, "Resume failed: %d\n", status);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,14 @@ config MEDIA_COMMON_OPTIONS
|
||||
comment "common driver options"
|
||||
depends on MEDIA_COMMON_OPTIONS
|
||||
|
||||
config CYPRESS_FIRMWARE
|
||||
tristate
|
||||
depends on USB
|
||||
|
||||
config TTPCI_EEPROM
|
||||
tristate
|
||||
depends on I2C
|
||||
|
||||
config VIDEO_CX2341X
|
||||
tristate
|
||||
|
||||
@ -13,16 +21,8 @@ config VIDEO_TVEEPROM
|
||||
tristate
|
||||
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/saa7146/Kconfig"
|
||||
source "drivers/media/common/siano/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
|
||||
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_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
|
||||
tristate
|
||||
depends on VIDEO_V4L2
|
||||
depends on VIDEO_DEV
|
||||
select VIDEOBUF_DMA_SG
|
||||
select VIDEO_SAA7146
|
||||
|
@ -6,10 +6,12 @@ ifeq ($(CONFIG_TRACEPOINTS),y)
|
||||
videobuf2-common-objs += vb2-trace.o
|
||||
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_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_SG) += videobuf2-dma-sg.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)
|
||||
return;
|
||||
|
||||
/* For both USERPTR and non-coherent MMAP */
|
||||
dma_sync_sgtable_for_device(buf->dev, sgt, buf->dma_dir);
|
||||
|
||||
/* Non-coherent MMAP only */
|
||||
if (buf->vaddr)
|
||||
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)
|
||||
@ -152,12 +152,12 @@ static void vb2_dc_finish(void *buf_priv)
|
||||
if (!buf->non_coherent_mem)
|
||||
return;
|
||||
|
||||
/* For both USERPTR and non-coherent MMAP */
|
||||
dma_sync_sgtable_for_cpu(buf->dev, sgt, buf->dma_dir);
|
||||
|
||||
/* Non-coherent MMAP only */
|
||||
if (buf->vaddr)
|
||||
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
|
||||
bool "Enable DVB memory-mapped API (EXPERIMENTAL)"
|
||||
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
|
||||
help
|
||||
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
|
||||
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
|
||||
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
|
||||
obj-$(CONFIG_DVB_STV0299) += stv0299.o
|
||||
obj-$(CONFIG_DVB_STB0899) += stb0899.o
|
||||
obj-$(CONFIG_DVB_STB6100) += stb6100.o
|
||||
# Please keep it alphabetically sorted by Kconfig name
|
||||
# (e. g. LC_ALL=C sort Makefile)
|
||||
|
||||
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_S5H1432) += s5h1432.o
|
||||
obj-$(CONFIG_DVB_CX22702) += cx22702.o
|
||||
obj-$(CONFIG_DVB_CX24110) += cx24110.o
|
||||
obj-$(CONFIG_DVB_TDA8083) += tda8083.o
|
||||
obj-$(CONFIG_DVB_L64781) += l64781.o
|
||||
obj-$(CONFIG_DVB_CX24116) += cx24116.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_DIB3000MC) += dib3000mc.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_DIB8000) += dib8000.o dibx000_common.o
|
||||
obj-$(CONFIG_DVB_DIB9000) += dib9000.o dibx000_common.o
|
||||
obj-$(CONFIG_DVB_MT312) += mt312.o
|
||||
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_DRX39XYJ) += drx39xyj/
|
||||
obj-$(CONFIG_DVB_DRXD) += drxd.o
|
||||
obj-$(CONFIG_DVB_TDA10021) += tda10021.o
|
||||
obj-$(CONFIG_DVB_TDA10023) += tda10023.o
|
||||
obj-$(CONFIG_DVB_STV0297) += stv0297.o
|
||||
obj-$(CONFIG_DVB_NXT200X) += nxt200x.o
|
||||
obj-$(CONFIG_DVB_OR51211) += or51211.o
|
||||
obj-$(CONFIG_DVB_OR51132) += or51132.o
|
||||
obj-$(CONFIG_DVB_BCM3510) += bcm3510.o
|
||||
obj-$(CONFIG_DVB_S5H1420) += s5h1420.o
|
||||
obj-$(CONFIG_DVB_LGDT330X) += lgdt330x.o
|
||||
obj-$(CONFIG_DVB_DRXK) += drxk.o
|
||||
obj-$(CONFIG_DVB_DS3000) += ds3000.o
|
||||
obj-$(CONFIG_DVB_DUMMY_FE) += dvb_dummy_fe.o
|
||||
obj-$(CONFIG_DVB_EC100) += ec100.o
|
||||
obj-$(CONFIG_DVB_GP8PSK_FE) += gp8psk-fe.o
|
||||
obj-$(CONFIG_DVB_HELENE) += helene.o
|
||||
obj-$(CONFIG_DVB_HORUS3A) += horus3a.o
|
||||
obj-$(CONFIG_DVB_ISL6405) += isl6405.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_LGDT3306A) += lgdt3306a.o
|
||||
obj-$(CONFIG_DVB_MXL692) += mxl692.o
|
||||
obj-$(CONFIG_DVB_LG2160) += lg2160.o
|
||||
obj-$(CONFIG_DVB_CX24123) += cx24123.o
|
||||
obj-$(CONFIG_DVB_LGDT330X) += lgdt330x.o
|
||||
obj-$(CONFIG_DVB_LGS8GL5) += lgs8gl5.o
|
||||
obj-$(CONFIG_DVB_LGS8GXX) += lgs8gxx.o
|
||||
obj-$(CONFIG_DVB_LNBH25) += lnbh25.o
|
||||
obj-$(CONFIG_DVB_LNBH29) += lnbh29.o
|
||||
obj-$(CONFIG_DVB_LNBP21) += lnbp21.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_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_MN88473) += mn88473.o
|
||||
obj-$(CONFIG_DVB_ISL6423) += isl6423.o
|
||||
obj-$(CONFIG_DVB_EC100) += ec100.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_MT312) += mt312.o
|
||||
obj-$(CONFIG_DVB_MT352) += mt352.o
|
||||
obj-$(CONFIG_DVB_MXL5XX) += mxl5xx.o
|
||||
obj-$(CONFIG_DVB_SI2165) += si2165.o
|
||||
obj-$(CONFIG_DVB_A8293) += a8293.o
|
||||
obj-$(CONFIG_DVB_SP2) += sp2.o
|
||||
obj-$(CONFIG_DVB_TDA10071) += tda10071.o
|
||||
obj-$(CONFIG_DVB_MXL692) += mxl692.o
|
||||
obj-$(CONFIG_DVB_NXT200X) += nxt200x.o
|
||||
obj-$(CONFIG_DVB_NXT6000) += nxt6000.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_RTL2832) += rtl2832.o
|
||||
obj-$(CONFIG_DVB_RTL2832_SDR) += rtl2832_sdr.o
|
||||
obj-$(CONFIG_DVB_M88RS2000) += m88rs2000.o
|
||||
obj-$(CONFIG_DVB_AF9033) += af9033.o
|
||||
obj-$(CONFIG_DVB_AS102_FE) += as102_fe.o
|
||||
obj-$(CONFIG_DVB_GP8PSK_FE) += gp8psk-fe.o
|
||||
obj-$(CONFIG_DVB_S5H1409) += s5h1409.o
|
||||
obj-$(CONFIG_DVB_S5H1411) += s5h1411.o
|
||||
obj-$(CONFIG_DVB_S5H1420) += s5h1420.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_MN88443X) += mn88443x.o
|
||||
obj-$(CONFIG_DVB_HORUS3A) += horus3a.o
|
||||
obj-$(CONFIG_DVB_ASCOT2E) += ascot2e.o
|
||||
obj-$(CONFIG_DVB_HELENE) += helene.o
|
||||
obj-$(CONFIG_DVB_TDA10021) += tda10021.o
|
||||
obj-$(CONFIG_DVB_TDA10023) += tda10023.o
|
||||
obj-$(CONFIG_DVB_TDA10048) += tda10048.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_CXD2099) += cxd2099.o
|
||||
obj-$(CONFIG_DVB_CXD2880) += cxd2880/
|
||||
obj-$(CONFIG_DVB_ZL10036) += zl10036.o
|
||||
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;
|
||||
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);
|
||||
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 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 s16 notch[] = { 16143, 14402, 12238, 9713, 6902, 3888, 759, -2392 };
|
||||
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,
|
||||
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,
|
||||
|
@ -336,7 +336,7 @@ static int si21xx_wait_diseqc_idle(struct si21xx_state *state, int timeout)
|
||||
dprintk("%s\n", __func__);
|
||||
|
||||
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__);
|
||||
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 fec_tab[] = { FEC_2_3, FEC_3_4, FEC_5_6,
|
||||
FEC_7_8, FEC_1_2 };
|
||||
static const enum fe_code_rate fec_tab[] = {
|
||||
FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_1_2
|
||||
};
|
||||
u8 index;
|
||||
|
||||
dprintk ("%s\n", __func__);
|
||||
@ -183,7 +184,7 @@ static int stv0299_wait_diseqc_fifo (struct stv0299_state* state, int timeout)
|
||||
dprintk ("%s\n", __func__);
|
||||
|
||||
while (stv0299_readreg(state, 0x0a) & 1) {
|
||||
if (jiffies - start > timeout) {
|
||||
if (time_is_before_jiffies(start + timeout)) {
|
||||
dprintk ("%s: timeout!!\n", __func__);
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
@ -200,7 +201,7 @@ static int stv0299_wait_diseqc_idle (struct stv0299_state* state, int timeout)
|
||||
dprintk ("%s\n", __func__);
|
||||
|
||||
while ((stv0299_readreg(state, 0x0a) & 3) != 2 ) {
|
||||
if (jiffies - start > timeout) {
|
||||
if (time_is_before_jiffies(start + timeout)) {
|
||||
dprintk ("%s: timeout!!\n", __func__);
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
@ -162,7 +162,7 @@ static void tda8083_wait_diseqc_fifo (struct tda8083_state* state, int timeout)
|
||||
{
|
||||
unsigned long start = jiffies;
|
||||
|
||||
while (jiffies - start < timeout &&
|
||||
while (time_is_after_jiffies(start + timeout) &&
|
||||
!(tda8083_readreg(state, 0x02) & 0x80))
|
||||
{
|
||||
msleep(50);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,31 +1,11 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
msp3400-objs := msp3400-driver.o msp3400-kthreads.o
|
||||
obj-$(CONFIG_VIDEO_MSP3400) += msp3400.o
|
||||
|
||||
obj-$(CONFIG_VIDEO_CCS) += ccs/
|
||||
obj-$(CONFIG_VIDEO_ET8EK8) += et8ek8/
|
||||
obj-$(CONFIG_VIDEO_CX25840) += cx25840/
|
||||
obj-$(CONFIG_VIDEO_M5MOLS) += m5mols/
|
||||
|
||||
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_SDR_MAX2175) += max2175.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_AD9389B) += ad9389b.o
|
||||
obj-$(CONFIG_VIDEO_ADP1653) += adp1653.o
|
||||
obj-$(CONFIG_VIDEO_ADV7170) += adv7170.o
|
||||
obj-$(CONFIG_VIDEO_ADV7175) += adv7175.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_ADV7393) += adv7393.o
|
||||
obj-$(CONFIG_VIDEO_ADV748X) += adv748x/
|
||||
obj-$(CONFIG_VIDEO_ADV7511) += adv7511-v4l2.o
|
||||
obj-$(CONFIG_VIDEO_ADV7604) += adv7604.o
|
||||
obj-$(CONFIG_VIDEO_ADV7842) += adv7842.o
|
||||
obj-$(CONFIG_VIDEO_AD9389B) += ad9389b.o
|
||||
obj-$(CONFIG_VIDEO_ADV7511) += adv7511-v4l2.o
|
||||
obj-$(CONFIG_VIDEO_VPX3220) += vpx3220.o
|
||||
obj-$(CONFIG_VIDEO_VS6624) += vs6624.o
|
||||
obj-$(CONFIG_VIDEO_AK7375) += ak7375.o
|
||||
obj-$(CONFIG_VIDEO_AK881X) += ak881x.o
|
||||
obj-$(CONFIG_VIDEO_APTINA_PLL) += aptina-pll.o
|
||||
obj-$(CONFIG_VIDEO_BT819) += bt819.o
|
||||
obj-$(CONFIG_VIDEO_BT856) += bt856.o
|
||||
obj-$(CONFIG_VIDEO_BT866) += bt866.o
|
||||
obj-$(CONFIG_VIDEO_KS0127) += ks0127.o
|
||||
obj-$(CONFIG_VIDEO_THS7303) += ths7303.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_CCS) += ccs/
|
||||
obj-$(CONFIG_VIDEO_CCS_PLL) += ccs-pll.o
|
||||
obj-$(CONFIG_VIDEO_CS3308) += cs3308.o
|
||||
obj-$(CONFIG_VIDEO_CS5345) += cs5345.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_TLV320AIC23B) += tlv320aic23b.o
|
||||
obj-$(CONFIG_VIDEO_UDA1342) += uda1342.o
|
||||
obj-$(CONFIG_VIDEO_WM8775) += wm8775.o
|
||||
obj-$(CONFIG_VIDEO_WM8739) += wm8739.o
|
||||
obj-$(CONFIG_VIDEO_VP27SMPX) += vp27smpx.o
|
||||
obj-$(CONFIG_VIDEO_SONY_BTF_MPX) += sony-btf-mpx.o
|
||||
obj-$(CONFIG_VIDEO_UPD64031A) += upd64031a.o
|
||||
obj-$(CONFIG_VIDEO_UPD64083) += upd64083.o
|
||||
obj-$(CONFIG_VIDEO_M5MOLS) += m5mols/
|
||||
obj-$(CONFIG_VIDEO_MAX9271_LIB) += max9271.o
|
||||
obj-$(CONFIG_VIDEO_MAX9286) += max9286.o
|
||||
obj-$(CONFIG_VIDEO_ML86V7667) += ml86v7667.o
|
||||
obj-$(CONFIG_VIDEO_MSP3400) += msp3400.o
|
||||
obj-$(CONFIG_VIDEO_MT9M001) += mt9m001.o
|
||||
obj-$(CONFIG_VIDEO_MT9M032) += mt9m032.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_OV08D10) += ov08d10.o
|
||||
obj-$(CONFIG_VIDEO_OV13858) += ov13858.o
|
||||
obj-$(CONFIG_VIDEO_OV13B10) += ov13b10.o
|
||||
obj-$(CONFIG_VIDEO_OV2640) += ov2640.o
|
||||
obj-$(CONFIG_VIDEO_OV2659) += ov2659.o
|
||||
obj-$(CONFIG_VIDEO_OV2680) += ov2680.o
|
||||
obj-$(CONFIG_VIDEO_OV2685) += ov2685.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_OV9650) += ov9650.o
|
||||
obj-$(CONFIG_VIDEO_OV9734) += ov9734.o
|
||||
obj-$(CONFIG_VIDEO_OV13858) += ov13858.o
|
||||
obj-$(CONFIG_VIDEO_OV13B10) += ov13b10.o
|
||||
obj-$(CONFIG_VIDEO_MT9M001) += mt9m001.o
|
||||
obj-$(CONFIG_VIDEO_MT9M032) += mt9m032.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_SR030PC30) += sr030pc30.o
|
||||
obj-$(CONFIG_VIDEO_NOON010PC30) += noon010pc30.o
|
||||
obj-$(CONFIG_VIDEO_RJ54N1) += rj54n1cb0c.o
|
||||
obj-$(CONFIG_VIDEO_S5K6AA) += s5k6aa.o
|
||||
obj-$(CONFIG_VIDEO_S5K6A3) += s5k6a3.o
|
||||
obj-$(CONFIG_VIDEO_S5K4ECGX) += s5k4ecgx.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_RJ54N1) += rj54n1cb0c.o
|
||||
obj-$(CONFIG_VIDEO_S5C73M3) += s5c73m3/
|
||||
obj-$(CONFIG_VIDEO_S5K4ECGX) += s5k4ecgx.o
|
||||
obj-$(CONFIG_VIDEO_S5K5BAF) += s5k5baf.o
|
||||
obj-$(CONFIG_VIDEO_S5K6A3) += s5k6a3.o
|
||||
obj-$(CONFIG_VIDEO_S5K6AA) += s5k6aa.o
|
||||
obj-$(CONFIG_VIDEO_SAA6588) += saa6588.o
|
||||
obj-$(CONFIG_VIDEO_SAA6752HS) += saa6752hs.o
|
||||
obj-$(CONFIG_VIDEO_SAA7110) += saa7110.o
|
||||
obj-$(CONFIG_VIDEO_SAA711X) += saa7115.o
|
||||
obj-$(CONFIG_VIDEO_SAA7127) += saa7127.o
|
||||
obj-$(CONFIG_VIDEO_SAA717X) += saa717x.o
|
||||
obj-$(CONFIG_VIDEO_SAA7185) += saa7185.o
|
||||
obj-$(CONFIG_VIDEO_SONY_BTF_MPX) += sony-btf-mpx.o
|
||||
obj-$(CONFIG_VIDEO_SR030PC30) += sr030pc30.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,15 +784,15 @@ static int adv7180_get_mbus_config(struct v4l2_subdev *sd,
|
||||
|
||||
if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) {
|
||||
cfg->type = V4L2_MBUS_CSI2_DPHY;
|
||||
cfg->flags = V4L2_MBUS_CSI2_1_LANE |
|
||||
V4L2_MBUS_CSI2_CHANNEL_0 |
|
||||
V4L2_MBUS_CSI2_CONTINUOUS_CLOCK;
|
||||
cfg->bus.mipi_csi2.num_data_lanes = 1;
|
||||
cfg->bus.mipi_csi2.flags = 0;
|
||||
} else {
|
||||
/*
|
||||
* The ADV7180 sensor supports BT.601/656 output modes.
|
||||
* 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_PCLK_SAMPLE_RISING |
|
||||
V4L2_MBUS_DATA_ACTIVE_HIGH;
|
||||
cfg->type = V4L2_MBUS_BT656;
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
@ -28,8 +28,8 @@ struct adv7183 {
|
||||
v4l2_std_id std; /* Current set standard */
|
||||
u32 input;
|
||||
u32 output;
|
||||
unsigned reset_pin;
|
||||
unsigned oe_pin;
|
||||
struct gpio_desc *reset_pin;
|
||||
struct gpio_desc *oe_pin;
|
||||
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);
|
||||
|
||||
if (enable)
|
||||
gpio_set_value(decoder->oe_pin, 0);
|
||||
gpiod_set_value(decoder->oe_pin, 1);
|
||||
else
|
||||
gpio_set_value(decoder->oe_pin, 1);
|
||||
gpiod_set_value(decoder->oe_pin, 0);
|
||||
udelay(1);
|
||||
return 0;
|
||||
}
|
||||
@ -531,7 +531,6 @@ static int adv7183_probe(struct i2c_client *client,
|
||||
struct v4l2_subdev_format fmt = {
|
||||
.which = V4L2_SUBDEV_FORMAT_ACTIVE,
|
||||
};
|
||||
const unsigned *pin_array;
|
||||
|
||||
/* Check if the adapter supports the needed features */
|
||||
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",
|
||||
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);
|
||||
if (decoder == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
decoder->reset_pin = pin_array[0];
|
||||
decoder->oe_pin = pin_array[1];
|
||||
|
||||
if (devm_gpio_request_one(&client->dev, decoder->reset_pin,
|
||||
GPIOF_OUT_INIT_LOW, "ADV7183 Reset")) {
|
||||
v4l_err(client, "failed to request GPIO %d\n", decoder->reset_pin);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (devm_gpio_request_one(&client->dev, decoder->oe_pin,
|
||||
GPIOF_OUT_INIT_HIGH,
|
||||
"ADV7183 Output Enable")) {
|
||||
v4l_err(client, "failed to request GPIO %d\n", decoder->oe_pin);
|
||||
return -EBUSY;
|
||||
}
|
||||
/*
|
||||
* Requesting high will assert reset, the line should be
|
||||
* flagged as active low in descriptor table or machine description.
|
||||
*/
|
||||
decoder->reset_pin = devm_gpiod_get(&client->dev, "reset",
|
||||
GPIOD_OUT_HIGH);
|
||||
if (IS_ERR(decoder->reset_pin))
|
||||
return PTR_ERR(decoder->reset_pin);
|
||||
gpiod_set_consumer_name(decoder->reset_pin, "ADV7183 Reset");
|
||||
/*
|
||||
* Requesting low will start with output disabled, the line should be
|
||||
* flagged as active low in descriptor table or machine description.
|
||||
*/
|
||||
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;
|
||||
v4l2_i2c_subdev_init(sd, client, &adv7183_ops);
|
||||
@ -594,7 +592,8 @@ static int adv7183_probe(struct i2c_client *client,
|
||||
/* reset chip */
|
||||
/* reset pulse width at least 5ms */
|
||||
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 */
|
||||
mdelay(5);
|
||||
|
||||
|
@ -222,23 +222,7 @@ static int adv748x_csi2_get_mbus_config(struct v4l2_subdev *sd, unsigned int pad
|
||||
return -EINVAL;
|
||||
|
||||
config->type = V4L2_MBUS_CSI2_DPHY;
|
||||
switch (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;
|
||||
}
|
||||
config->bus.mipi_csi2.num_data_lanes = tx->active_lanes;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -17,7 +17,6 @@
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/videodev2.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/hdmi.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] = 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);
|
||||
return;
|
||||
}
|
||||
|
@ -2484,7 +2484,7 @@ static int adv76xx_read_infoframe(struct v4l2_subdev *sd, int index,
|
||||
buffer[i + 3] = infoframe_read(sd,
|
||||
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__,
|
||||
adv76xx_cri[index].desc);
|
||||
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++)
|
||||
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);
|
||||
return;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
config VIDEO_CCS
|
||||
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 VIDEO_V4L2_SUBDEV_API
|
||||
select VIDEO_CCS_PLL
|
||||
|
@ -17,7 +17,6 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
|
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
config VIDEO_CX25840
|
||||
tristate "Conexant CX2584x audio/video decoders"
|
||||
depends on VIDEO_V4L2 && I2C
|
||||
depends on VIDEO_DEV && I2C
|
||||
help
|
||||
Support for the Conexant CX2584x audio/video decoders.
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <media/v4l2-ctrls.h>
|
||||
#include <media/v4l2-device.h>
|
||||
#include <media/v4l2-event.h>
|
||||
@ -36,6 +37,7 @@ struct dw9714_device {
|
||||
struct v4l2_ctrl_handler ctrls_vcm;
|
||||
struct v4l2_subdev sd;
|
||||
u16 current_val;
|
||||
struct regulator *vcc;
|
||||
};
|
||||
|
||||
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)
|
||||
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);
|
||||
dw9714_dev->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
|
||||
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 dw9714_device *dw9714_dev = sd_to_dw9714_vcm(sd);
|
||||
int ret;
|
||||
|
||||
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);
|
||||
|
||||
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);
|
||||
int ret, val;
|
||||
|
||||
if (pm_runtime_suspended(&client->dev))
|
||||
return 0;
|
||||
|
||||
for (val = dw9714_dev->current_val & ~(DW9714_CTRL_STEPS - 1);
|
||||
val >= 0; val -= DW9714_CTRL_STEPS) {
|
||||
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);
|
||||
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);
|
||||
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;
|
||||
val < dw9714_dev->current_val + DW9714_CTRL_STEPS - 1;
|
||||
val += DW9714_CTRL_STEPS) {
|
||||
|
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
config VIDEO_ET8EK8
|
||||
tristate "ET8EK8 camera sensor support"
|
||||
depends on I2C && VIDEO_V4L2
|
||||
depends on I2C && VIDEO_DEV
|
||||
select MEDIA_CONTROLLER
|
||||
select VIDEO_V4L2_SUBDEV_API
|
||||
select V4L2_FWNODE
|
||||
|
3012
drivers/media/i2c/hi847.c
Normal file
3012
drivers/media/i2c/hi847.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -11,13 +11,11 @@
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
|
1628
drivers/media/i2c/isl7998x.c
Normal file
1628
drivers/media/i2c/isl7998x.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
config VIDEO_M5MOLS
|
||||
tristate "Fujitsu M-5MOLS 8MP sensor support"
|
||||
depends on I2C && VIDEO_V4L2
|
||||
depends on I2C && VIDEO_DEV
|
||||
select MEDIA_CONTROLLER
|
||||
select VIDEO_V4L2_SUBDEV_API
|
||||
help
|
||||
|
@ -13,6 +13,7 @@
|
||||
#define M5MOLS_H
|
||||
|
||||
#include <linux/sizes.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <media/v4l2-subdev.h>
|
||||
#include "m5mols_reg.h"
|
||||
|
||||
@ -181,6 +182,7 @@ struct m5mols_version {
|
||||
* @stabilization: image stabilization control
|
||||
* @jpeg_quality: JPEG compression quality control
|
||||
* @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
|
||||
* @ffmt: current fmt according to resolution type
|
||||
* @res_type: current resolution type
|
||||
@ -224,6 +226,7 @@ struct m5mols_info {
|
||||
struct v4l2_ctrl *jpeg_quality;
|
||||
|
||||
int (*set_power)(struct device *dev, int on);
|
||||
struct gpio_desc *reset;
|
||||
|
||||
struct mutex lock;
|
||||
|
||||
|
@ -15,7 +15,6 @@
|
||||
#include <linux/irq.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/videodev2.h>
|
||||
#include <media/v4l2-ctrls.h>
|
||||
|
@ -14,7 +14,7 @@
|
||||
#include <linux/irq.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/videodev2.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 i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
const struct m5mols_platform_data *pdata = info->pdata;
|
||||
int ret;
|
||||
|
||||
if (info->power == enable)
|
||||
@ -772,7 +771,7 @@ static int m5mols_sensor_power(struct m5mols_info *info, bool enable)
|
||||
return ret;
|
||||
}
|
||||
|
||||
gpio_set_value(pdata->gpio_reset, !pdata->reset_polarity);
|
||||
gpiod_set_value(info->reset, 0);
|
||||
info->power = 1;
|
||||
|
||||
return ret;
|
||||
@ -785,7 +784,7 @@ static int m5mols_sensor_power(struct m5mols_info *info, bool enable)
|
||||
if (info->set_power)
|
||||
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->power = 0;
|
||||
@ -944,7 +943,6 @@ static int m5mols_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *id)
|
||||
{
|
||||
const struct m5mols_platform_data *pdata = client->dev.platform_data;
|
||||
unsigned long gpio_flags;
|
||||
struct m5mols_info *info;
|
||||
struct v4l2_subdev *sd;
|
||||
int ret;
|
||||
@ -954,11 +952,6 @@ static int m5mols_probe(struct i2c_client *client,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!gpio_is_valid(pdata->gpio_reset)) {
|
||||
dev_err(&client->dev, "No valid RESET GPIO specified\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!client->irq) {
|
||||
dev_err(&client->dev, "Interrupt not assigned\n");
|
||||
return -EINVAL;
|
||||
@ -968,18 +961,16 @@ static int m5mols_probe(struct i2c_client *client,
|
||||
if (!info)
|
||||
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->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),
|
||||
supplies);
|
||||
if (ret) {
|
||||
|
@ -257,7 +257,7 @@ static const struct regmap_config max2175_regmap_config = {
|
||||
.reg_defaults = max2175_reg_defaults,
|
||||
.num_reg_defaults = ARRAY_SIZE(max2175_reg_defaults),
|
||||
.volatile_table = &max2175_volatile_regs,
|
||||
.cache_type = REGCACHE_FLAT,
|
||||
.cache_type = REGCACHE_RBTREE,
|
||||
};
|
||||
|
||||
struct max2175 {
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include <linux/fwnode.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c-mux.h>
|
||||
#include <linux/module.h>
|
||||
@ -168,6 +169,8 @@ struct max9286_priv {
|
||||
u32 init_rev_chan_mv;
|
||||
u32 rev_chan_mv;
|
||||
|
||||
u32 gpio_poc[2];
|
||||
|
||||
struct v4l2_ctrl_handler ctrls;
|
||||
struct v4l2_ctrl *pixelrate;
|
||||
|
||||
@ -846,6 +849,10 @@ static const struct v4l2_subdev_internal_ops max9286_subdev_internal_ops = {
|
||||
.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)
|
||||
{
|
||||
switch (ctrl->id) {
|
||||
@ -895,6 +902,7 @@ static int max9286_v4l2_register(struct max9286_priv *priv)
|
||||
goto err_async;
|
||||
|
||||
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;
|
||||
for (i = 0; i < MAX9286_SRC_PAD; i++)
|
||||
@ -1025,20 +1033,27 @@ static int max9286_setup(struct max9286_priv *priv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void max9286_gpio_set(struct gpio_chip *chip,
|
||||
unsigned int offset, int value)
|
||||
static int max9286_gpio_set(struct max9286_priv *priv, unsigned int offset,
|
||||
int value)
|
||||
{
|
||||
struct max9286_priv *priv = gpiochip_get_data(chip);
|
||||
|
||||
if (value)
|
||||
priv->gpio_state |= BIT(offset);
|
||||
else
|
||||
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);
|
||||
|
||||
@ -1057,13 +1072,10 @@ static int max9286_register_gpio(struct max9286_priv *priv)
|
||||
gpio->owner = THIS_MODULE;
|
||||
gpio->ngpio = 2;
|
||||
gpio->base = -1;
|
||||
gpio->set = max9286_gpio_set;
|
||||
gpio->get = max9286_gpio_get;
|
||||
gpio->set = max9286_gpiochip_set;
|
||||
gpio->get = max9286_gpiochip_get;
|
||||
gpio->can_sleep = true;
|
||||
|
||||
/* GPIO values default to high */
|
||||
priv->gpio_state = BIT(0) | BIT(1);
|
||||
|
||||
ret = devm_gpiochip_add_data(dev, gpio, priv);
|
||||
if (ret)
|
||||
dev_err(dev, "Unable to create gpio_chip\n");
|
||||
@ -1071,6 +1083,70 @@ static int max9286_register_gpio(struct max9286_priv *priv)
|
||||
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)
|
||||
{
|
||||
struct max9286_priv *priv;
|
||||
@ -1080,17 +1156,14 @@ static int max9286_init(struct device *dev)
|
||||
client = to_i2c_client(dev);
|
||||
priv = i2c_get_clientdata(client);
|
||||
|
||||
/* Enable the bus power. */
|
||||
ret = regulator_enable(priv->regulator);
|
||||
if (ret < 0) {
|
||||
dev_err(&client->dev, "Unable to turn PoC on\n");
|
||||
ret = max9286_poc_enable(priv, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = max9286_setup(priv);
|
||||
if (ret) {
|
||||
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);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to register with V4L2\n");
|
||||
goto err_regulator;
|
||||
goto err_poc_disable;
|
||||
}
|
||||
|
||||
ret = max9286_i2c_mux_init(priv);
|
||||
@ -1116,8 +1189,8 @@ static int max9286_init(struct device *dev)
|
||||
|
||||
err_v4l2_register:
|
||||
max9286_v4l2_unregister(priv);
|
||||
err_regulator:
|
||||
regulator_disable(priv->regulator);
|
||||
err_poc_disable:
|
||||
max9286_poc_enable(priv, false);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -1288,18 +1361,10 @@ static int max9286_probe(struct i2c_client *client)
|
||||
*/
|
||||
max9286_configure_i2c(priv, false);
|
||||
|
||||
ret = max9286_register_gpio(priv);
|
||||
ret = max9286_parse_gpios(priv);
|
||||
if (ret)
|
||||
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);
|
||||
if (ret)
|
||||
goto err_powerdown;
|
||||
@ -1326,7 +1391,7 @@ static int max9286_remove(struct i2c_client *client)
|
||||
|
||||
max9286_v4l2_unregister(priv);
|
||||
|
||||
regulator_disable(priv->regulator);
|
||||
max9286_poc_enable(priv, false);
|
||||
|
||||
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,
|
||||
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->bus.parallel.flags = V4L2_MBUS_MASTER |
|
||||
V4L2_MBUS_PCLK_SAMPLE_RISING |
|
||||
V4L2_MBUS_DATA_ACTIVE_HIGH;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -695,10 +695,12 @@ static int mt9m001_get_mbus_config(struct v4l2_subdev *sd,
|
||||
struct v4l2_mbus_config *cfg)
|
||||
{
|
||||
/* 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->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;
|
||||
}
|
||||
|
@ -9,7 +9,6 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/log2.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/regulator/consumer.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);
|
||||
|
||||
cfg->flags = V4L2_MBUS_MASTER |
|
||||
V4L2_MBUS_HSYNC_ACTIVE_HIGH | V4L2_MBUS_VSYNC_ACTIVE_HIGH |
|
||||
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->flags |= mt9m111->pclk_sample ? V4L2_MBUS_PCLK_SAMPLE_RISING :
|
||||
cfg->bus.parallel.flags |= mt9m111->pclk_sample ?
|
||||
V4L2_MBUS_PCLK_SAMPLE_RISING :
|
||||
V4L2_MBUS_PCLK_SAMPLE_FALLING;
|
||||
|
||||
cfg->type = V4L2_MBUS_PARALLEL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
@ -130,8 +130,8 @@ struct noon010_info {
|
||||
struct media_pad pad;
|
||||
struct v4l2_ctrl_handler hdl;
|
||||
struct regulator_bulk_data supply[NOON010_NUM_SUPPLIES];
|
||||
u32 gpio_nreset;
|
||||
u32 gpio_nstby;
|
||||
struct gpio_desc *reset;
|
||||
struct gpio_desc *stby;
|
||||
|
||||
/* Protects the struct members below */
|
||||
struct mutex lock;
|
||||
@ -393,29 +393,33 @@ static int power_enable(struct noon010_info *info)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (gpio_is_valid(info->gpio_nstby))
|
||||
gpio_set_value(info->gpio_nstby, 0);
|
||||
/* Assert standby: line should be flagged active low in descriptor */
|
||||
if (info->stby)
|
||||
gpiod_set_value(info->stby, 1);
|
||||
|
||||
if (gpio_is_valid(info->gpio_nreset))
|
||||
gpio_set_value(info->gpio_nreset, 0);
|
||||
/* Assert reset: line should be flagged active low in descriptor */
|
||||
if (info->reset)
|
||||
gpiod_set_value(info->reset, 1);
|
||||
|
||||
ret = regulator_bulk_enable(NOON010_NUM_SUPPLIES, info->supply);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (gpio_is_valid(info->gpio_nreset)) {
|
||||
/* De-assert reset and standby */
|
||||
if (info->reset) {
|
||||
msleep(50);
|
||||
gpio_set_value(info->gpio_nreset, 1);
|
||||
gpiod_set_value(info->reset, 0);
|
||||
}
|
||||
if (gpio_is_valid(info->gpio_nstby)) {
|
||||
if (info->stby) {
|
||||
udelay(1000);
|
||||
gpio_set_value(info->gpio_nstby, 1);
|
||||
gpiod_set_value(info->stby, 0);
|
||||
}
|
||||
if (gpio_is_valid(info->gpio_nreset)) {
|
||||
/* Cycle reset: assert and deassert */
|
||||
if (info->reset) {
|
||||
udelay(1000);
|
||||
gpio_set_value(info->gpio_nreset, 0);
|
||||
gpiod_set_value(info->reset, 1);
|
||||
msleep(100);
|
||||
gpio_set_value(info->gpio_nreset, 1);
|
||||
gpiod_set_value(info->reset, 0);
|
||||
msleep(20);
|
||||
}
|
||||
info->power = 1;
|
||||
@ -438,11 +442,12 @@ static int power_disable(struct noon010_info *info)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (gpio_is_valid(info->gpio_nstby))
|
||||
gpio_set_value(info->gpio_nstby, 0);
|
||||
/* Assert standby and reset */
|
||||
if (info->stby)
|
||||
gpiod_set_value(info->stby, 1);
|
||||
|
||||
if (gpio_is_valid(info->gpio_nreset))
|
||||
gpio_set_value(info->gpio_nreset, 0);
|
||||
if (info->reset)
|
||||
gpiod_set_value(info->reset, 1);
|
||||
|
||||
info->power = 0;
|
||||
|
||||
@ -741,34 +746,24 @@ static int noon010_probe(struct i2c_client *client,
|
||||
goto np_err;
|
||||
|
||||
info->i2c_reg_page = -1;
|
||||
info->gpio_nreset = -EINVAL;
|
||||
info->gpio_nstby = -EINVAL;
|
||||
info->curr_fmt = &noon010_formats[0];
|
||||
info->curr_win = &noon010_sizes[0];
|
||||
|
||||
if (gpio_is_valid(pdata->gpio_nreset)) {
|
||||
ret = devm_gpio_request_one(&client->dev, pdata->gpio_nreset,
|
||||
GPIOF_OUT_INIT_LOW,
|
||||
"NOON010PC30 NRST");
|
||||
if (ret) {
|
||||
dev_err(&client->dev, "GPIO request error: %d\n", ret);
|
||||
/* Request reset asserted so we get put into reset */
|
||||
info->reset = devm_gpiod_get(&client->dev, "reset", GPIOD_OUT_HIGH);
|
||||
if (IS_ERR(info->reset)) {
|
||||
ret = PTR_ERR(info->reset);
|
||||
goto np_err;
|
||||
}
|
||||
info->gpio_nreset = pdata->gpio_nreset;
|
||||
gpio_export(info->gpio_nreset, 0);
|
||||
}
|
||||
gpiod_set_consumer_name(info->reset, "NOON010PC30 NRST");
|
||||
|
||||
if (gpio_is_valid(pdata->gpio_nstby)) {
|
||||
ret = devm_gpio_request_one(&client->dev, pdata->gpio_nstby,
|
||||
GPIOF_OUT_INIT_LOW,
|
||||
"NOON010PC30 NSTBY");
|
||||
if (ret) {
|
||||
dev_err(&client->dev, "GPIO request error: %d\n", ret);
|
||||
/* Request standby asserted so we get put into standby */
|
||||
info->stby = devm_gpiod_get(&client->dev, "standby", GPIOD_OUT_HIGH);
|
||||
if (IS_ERR(info->stby)) {
|
||||
ret = PTR_ERR(info->stby);
|
||||
goto np_err;
|
||||
}
|
||||
info->gpio_nstby = pdata->gpio_nstby;
|
||||
gpio_export(info->gpio_nstby, 0);
|
||||
}
|
||||
gpiod_set_consumer_name(info->reset, "NOON010PC30 STBY");
|
||||
|
||||
for (i = 0; i < NOON010_NUM_SUPPLIES; i++)
|
||||
info->supply[i].supply = noon010_supply_name[i];
|
||||
|
1128
drivers/media/i2c/og01a1b.c
Normal file
1128
drivers/media/i2c/og01a1b.c
Normal file
File diff suppressed because it is too large
Load Diff
1528
drivers/media/i2c/ov08d10.c
Normal file
1528
drivers/media/i2c/ov08d10.c
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user