# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/media/samsung,exynos4210-fimc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Samsung S5P/Exynos SoC Fully Integrated Mobile Camera

maintainers:
  - Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
  - Sylwester Nawrocki <s.nawrocki@samsung.com>

description:
  Each FIMC device should have an alias in the aliases node, in the form of
  fimc<n>, where <n> is an integer specifying the IP block instance.

properties:
  compatible:
    enum:
      - samsung,exynos4210-fimc
      - samsung,exynos4212-fimc
      - samsung,s5pv210-fimc

  reg:
    maxItems: 1

  clocks:
    maxItems: 2

  clock-names:
    items:
      - const: fimc
      - const: sclk_fimc

  clock-frequency:
    description:
      Maximum FIMC local clock (LCLK) frequency.

  interrupts:
    maxItems: 1

  iommus:
    maxItems: 1

  power-domains:
    maxItems: 1

  samsung,cam-if:
    type: boolean
    description:
      The FIMC IP block includes the camera input interface.

  samsung,isp-wb:
    type: boolean
    description: |
      The FIMC IP block has the ISP writeback input.

  samsung,lcd-wb:
    type: boolean
    description: |
      The FIMC IP block has the LCD writeback input.

  samsung,mainscaler-ext:
    type: boolean
    description:
      FIMC IP supports extended image size and has CIEXTEN register.

  samsung,min-pix-alignment:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    items:
      - description: Minimum supported image height alignment.
      - description: Horizontal image offset.
    description:
      The values are in pixels and default is <2 1>.

  samsung,min-pix-sizes:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    maxItems: 2
    description: |
      An array specifying minimum image size in pixels at the FIMC input and
      output DMA, in the first and second cell respectively.  Default value
      is <16 16>.

  samsung,pix-limits:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    maxItems: 4
    description: |
      An array of maximum supported image sizes in pixels, for details refer to
      Table 2-1 in the S5PV210 SoC User Manual. The meaning of each cell is as
      follows:
       0 - scaler input horizontal size
       1 - input horizontal size for the scaler bypassed
       2 - REAL_WIDTH without input rotation
       3 - REAL_HEIGHT with input rotation

  samsung,rotators:
    $ref: /schemas/types.yaml#/definitions/uint32
    default: 0x11
    description: |
      A bitmask specifying whether this IP has the input and the output
      rotator. Bits 4 and 0 correspond to input and output rotator
      respectively. If a rotator is present its corresponding bit should be
      set.

  samsung,sysreg:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      System Registers (SYSREG) node.

required:
  - compatible
  - reg
  - clocks
  - clock-names
  - samsung,pix-limits

allOf:
  - if:
      required:
        - samsung,isp-wb
    then:
      required:
        - samsung,sysreg

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/exynos4.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    fimc@11800000 {
        compatible = "samsung,exynos4212-fimc";
        reg = <0x11800000 0x1000>;
        clocks = <&clock CLK_FIMC0>,
                 <&clock CLK_SCLK_FIMC0>;
        clock-names = "fimc", "sclk_fimc";
        interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
        iommus = <&sysmmu_fimc0>;
        power-domains = <&pd_cam>;
        samsung,sysreg = <&sys_reg>;

        samsung,pix-limits = <4224 8192 1920 4224>;
        samsung,mainscaler-ext;
        samsung,isp-wb;
        samsung,cam-if;

        assigned-clocks = <&clock CLK_MOUT_FIMC0>,
                          <&clock CLK_SCLK_FIMC0>;
        assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
        assigned-clock-rates = <0>, <176000000>;
    };
