Qualcomm Technologies, Inc. GENI Serial Engine QUP Wrapper Controller 
 | 
  
 | 
Generic Interface (GENI) based Qualcomm Universal Peripheral (QUP) wrapper 
 | 
is a programmable module for supporting a wide range of serial interfaces 
 | 
like UART, SPI, I2C, I3C, etc. A single QUP module can provide upto 8 Serial 
 | 
Interfaces, using its internal Serial Engines. The GENI Serial Engine QUP 
 | 
Wrapper controller is modeled as a node with zero or more child nodes each 
 | 
representing a serial engine. 
 | 
  
 | 
Required properties: 
 | 
- compatible:        Must be "qcom,geni-se-qup". 
 | 
- reg:            Must contain QUP register address and length. 
 | 
- clock-names:        Must contain "m-ahb" and "s-ahb". 
 | 
- clocks:        AHB clocks needed by the device. 
 | 
  
 | 
Required properties if child node exists: 
 | 
- #address-cells:     Must be <1> for Serial Engine Address 
 | 
- #size-cells:         Must be <1> for Serial Engine Address Size 
 | 
- ranges:         Must be present 
 | 
  
 | 
Properties for children: 
 | 
  
 | 
A GENI based QUP wrapper controller node can contain 0 or more child nodes 
 | 
representing serial devices.  These serial devices can be a QCOM UART, I2C 
 | 
controller, SPI controller, or some combination of aforementioned devices. 
 | 
Please refer below the child node definitions for the supported serial 
 | 
interface protocols. 
 | 
  
 | 
Qualcomm Technologies Inc. GENI Serial Engine based I2C Controller 
 | 
  
 | 
Required properties: 
 | 
- compatible:        Must be "qcom,geni-i2c". 
 | 
- reg:             Must contain QUP register address and length. 
 | 
- interrupts:         Must contain I2C interrupt. 
 | 
- clock-names:         Must contain "se". 
 | 
- clocks:         Serial engine core clock needed by the device. 
 | 
- #address-cells:    Must be <1> for I2C device address. 
 | 
- #size-cells:        Must be <0> as I2C addresses have no size component. 
 | 
  
 | 
Optional property: 
 | 
- clock-frequency:    Desired I2C bus clock frequency in Hz. 
 | 
            When missing default to 100000Hz. 
 | 
  
 | 
Child nodes should conform to I2C bus binding as described in i2c.txt. 
 | 
  
 | 
Qualcomm Technologies Inc. GENI Serial Engine based UART Controller 
 | 
  
 | 
Required properties: 
 | 
- compatible:        Must be "qcom,geni-debug-uart" or "qcom,geni-uart". 
 | 
- reg:             Must contain UART register location and length. 
 | 
- interrupts:         Must contain UART core interrupts. 
 | 
- clock-names:        Must contain "se". 
 | 
- clocks:        Serial engine core clock needed by the device. 
 | 
  
 | 
Qualcomm Technologies Inc. GENI Serial Engine based SPI Controller 
 | 
  
 | 
Required properties: 
 | 
- compatible:        Must contain "qcom,geni-spi". 
 | 
- reg:            Must contain SPI register location and length. 
 | 
- interrupts:        Must contain SPI controller interrupts. 
 | 
- clock-names:        Must contain "se". 
 | 
- clocks:        Serial engine core clock needed by the device. 
 | 
- spi-max-frequency:    Specifies maximum SPI clock frequency, units - Hz. 
 | 
- #address-cells:    Must be <1> to define a chip select address on 
 | 
            the SPI bus. 
 | 
- #size-cells:        Must be <0>. 
 | 
  
 | 
SPI slave nodes must be children of the SPI master node and conform to SPI bus 
 | 
binding as described in Documentation/devicetree/bindings/spi/spi-bus.txt. 
 | 
  
 | 
Example: 
 | 
    geniqup@8c0000 { 
 | 
        compatible = "qcom,geni-se-qup"; 
 | 
        reg = <0x8c0000 0x6000>; 
 | 
        clock-names = "m-ahb", "s-ahb"; 
 | 
        clocks = <&clock_gcc GCC_QUPV3_WRAP_0_M_AHB_CLK>, 
 | 
            <&clock_gcc GCC_QUPV3_WRAP_0_S_AHB_CLK>; 
 | 
        #address-cells = <1>; 
 | 
        #size-cells = <1>; 
 | 
        ranges; 
 | 
  
 | 
        i2c0: i2c@a94000 { 
 | 
            compatible = "qcom,geni-i2c"; 
 | 
            reg = <0xa94000 0x4000>; 
 | 
            interrupts = <GIC_SPI 358 IRQ_TYPE_LEVEL_HIGH>; 
 | 
            clock-names = "se"; 
 | 
            clocks = <&clock_gcc GCC_QUPV3_WRAP0_S5_CLK>; 
 | 
            pinctrl-names = "default", "sleep"; 
 | 
            pinctrl-0 = <&qup_1_i2c_5_active>; 
 | 
            pinctrl-1 = <&qup_1_i2c_5_sleep>; 
 | 
            #address-cells = <1>; 
 | 
            #size-cells = <0>; 
 | 
        }; 
 | 
  
 | 
        uart0: serial@a88000 { 
 | 
            compatible = "qcom,geni-debug-uart"; 
 | 
            reg = <0xa88000 0x7000>; 
 | 
            interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>; 
 | 
            clock-names = "se"; 
 | 
            clocks = <&clock_gcc GCC_QUPV3_WRAP0_S0_CLK>; 
 | 
            pinctrl-names = "default", "sleep"; 
 | 
            pinctrl-0 = <&qup_1_uart_3_active>; 
 | 
            pinctrl-1 = <&qup_1_uart_3_sleep>; 
 | 
        }; 
 | 
  
 | 
        spi0: spi@a84000 { 
 | 
            compatible = "qcom,geni-spi"; 
 | 
            reg = <0xa84000 0x4000>; 
 | 
            interrupts = <GIC_SPI 354 IRQ_TYPE_LEVEL_HIGH>; 
 | 
            clock-names = "se"; 
 | 
            clocks = <&clock_gcc GCC_QUPV3_WRAP0_S0_CLK>; 
 | 
            pinctrl-names = "default", "sleep"; 
 | 
            pinctrl-0 = <&qup_1_spi_2_active>; 
 | 
            pinctrl-1 = <&qup_1_spi_2_sleep>; 
 | 
            spi-max-frequency = <19200000>; 
 | 
            #address-cells = <1>; 
 | 
            #size-cells = <0>; 
 | 
        }; 
 | 
    } 
 |