Attached MDM Modem Devices External modems are devices that are attached to the msm and controlled by gpios. There is also a data channel between the msm and the external modem that sometimes needs to be reset. Required Properties: - compatible: The bus devices need to be compatible with "qcom,mdm2-modem", "qcom,ext-mdm9x25", "qcom,ext-mdm9x35", "qcom, ext-mdm9x45", "qcom,ext-mdm9x55". Required named gpio properties: - qcom,mdm2ap-errfatal-gpio: gpio for the external modem to indicate to the apps processor of an error fatal condition on the modem. - qcom,ap2mdm-errfatal-gpio: gpio for the apps processor to indicate to the external modem of an error fatal condition on the apps processor. - qcom,mdm2ap-status-gpio: gpio to indicate to the apps processor when there is a watchdog bite on the external modem. - qcom,ap2mdm-status-gpio: gpio for the apps processor to indicate to the modem that an apps processor watchdog bite has occurred. - qcom,ap2mdm-soft-reset-gpio: gpio for the apps processor to use to soft-reset the external modem. If the flags parameter has a value of 0x1 then the gpio is active LOW. Required Interrupts: - "err_fatal_irq": Interrupt generated on the apps processor when the error fatal gpio is pulled high by the external modem. - "status_irq": Interrupt generated on the apps processor when the mdm2ap-status gpio falls low on the external modem. This usually indicates a watchdog bite on the modem. - "plbrdy_irq": Interrupt generated on the aps processor when the mdm2ap-pblrdy gpio is pulled either high or low by the external modem. This is an indication that the modem has rebooted. - "mdm2ap_vddmin_irq": Interrupt generated on the apps processor when the external modem goes into vddmin power state. Optional named gpio properties: - qcom,mdm2ap-pblrdy-gpio: gpio used by some external modems to indicate when the modem has booted into the PBL bootloader. - qcom,ap2mdm-wakeup-gpio: gpio used by the apps processor to wake the external modem out of a low power state. - qcom,ap2mdm-chnl-rdy-gpio: gpio used by the apps processor to inform the external modem that data link is ready. - qcom,mdm2ap-wakeup-gpio: gpio from the external modem to the apps processor to wake it out of a low power state. - qcom,ap2mdm-vddmin-gpio: gpio to indicate to the external modem when the apps processor is about to enter vddmin power state. - qcom,mdm2ap-vddmin-gpio: gpio used by the external modem to inform the apps processor when it is about to enter vddmin power state. - qcom,ap2mdm-kpdpwr-gpio: gpio used to simulate a power button press on the external modem. Some modems use this as part of their initial power-up sequence. If the "flags" parameter has a value of 0x1 then it is active LOW. - qcom,ap2mdm-pmic-pwr-en-gpio: Some modems need this gpio for the apps processor to enable the pmic on the external modem. - qcom,use-usb-port-gpio: some modems use this gpio to switch a port connection from uart to usb. This is used during firmware upgrade of some modems. - qcom,mdm-link-detect-gpio: some modems may support two interfaces. This gpio indicates whether only one or both links can be used. Optional driver parameters: - qcom,ramdump-delay-ms: time in milliseconds to wait before starting to collect ramdumps. This interval is the time to wait after an error on the external modem is signaled to the apps processor before starting to collect ramdumps. Its value depends on the type of external modem (e.g. MDM vs QSC), and how error fatal handing is done on the modem. The default value is 2 seconds (2000 milliseconds) as specified by the mdm9x15 software developer. Consultation with the developer of the modem software is required to determine this value for that modem. - qcom,ps-hold-delay-ms: minimum delay in milliseconds between consecutive PS_HOLD toggles. SGLTE targets that use a QSC1215 modem require a minimum delay between consecutive toggling of the PS_HOLD pmic input. For one target it is 500 milliseconds but it may vary depending on the target and how the external modem is connected. The value is specified by the hardware designers. - qcom,early-power-on: boolean flag to indicate if to power on the modem when the device is probed. - qcom,sfr-query: boolean flag to indicate if to query the modem for a reset reason. - qcom,no-powerdown-after-ramdumps: boolean flag to indicate if to power down the modem after ramdumps. - qcom,no-a2m-errfatal-on-ssr: boolean to tell driver not to raise ap2mdm errfatal during SSR. - qcom,no-reset-on-first-powerup: boolean to tell driver not to reset the modem when first powering up the modem. - qcom,ramdump-timeout-ms: ramdump timeout interval in milliseconds. This interval is the time to wait for collection of the external modem's ramdump to complete. It's value depends on the speed of the data connection between the external modem and the apps processor on the platform. If the connection is a UART port then this delay needs to be longer in order to avoid premature timeout of the ramdump collection. The default value is 2 minutes (120000 milliseconds) which is based on the measured time it takes over a UART connection. It is reduced when the data connection is an HSIC port. The value is usually tuned empirically for a particular target. - qcom,image-upgrade-supported: boolean flag to indicate if software upgrade is supported. - qcom,support-shutdown: boolean flag to indicate if graceful shutdown is supported. - qcom,vddmin-drive-strength: drive strength in milliamps of the ap2mdm-vddmin gpio. The ap2mdm_vddmin gpio is controlled by the RPM processor. It is pulled low to indicate to the external modem that the apps processor has entered vddmin state, and high to indicate the reverse. Its parameters are passed to the RPM software from the HLOS because the RPM software has to way of saving this type of configuration when an external modem is attached. The value of the drive strength is specified by the hardware designers. A value of 8 milliamps is typical. This property is ignored if the property "qcom,ap2mdm-vddmin-gpio" is not set. - qcom,vddmin-modes: a string indicating the "modes" requested for the ap2mdm-vddmin gpio. This value is passed to RPM and is used by the RPM module to determine the gpio mux function. The only currently supported modes string is "normal" and corresponds to the value 0x03 that is passed to RPM. - qcom,restart-group: List of subsystems that will need to restart together. - qcom,mdm-dual-link: Boolean indicates whether both links can used for communication. - qcom,ssctl-instance-id: Instance id used by the subsystem to connect with the SSCTL service. - qcom,sysmon-id: platform device id that sysmon is probed with for the subsystem. - qcom,pil-force-shutdown: Boolean. If set, the SSR framework will not trigger graceful shutdown on behalf of the subsystem driver. Example: mdm0: qcom,mdm0 { compatible = "qcom,mdm2-modem"; cell-index = <0>; #address-cells = <0>; interrupt-parent = <&mdm0>; interrupts = <0 1 2 3>; #interrupt-cells = <1>; interrupt-map-mask = <0xffffffff>; interrupt-map = <0 &msmgpio 82 0x3 1 &msmgpio 46 0x3 2 &msmgpio 80 0x3 3 &msmgpio 27 0x3>; interrupt-names = "err_fatal_irq", "status_irq", "plbrdy_irq", "mdm2ap_vddmin_irq"; qcom,mdm2ap-errfatal-gpio = <&msmgpio 82 0x00>; qcom,ap2mdm-errfatal-gpio = <&msmgpio 106 0x00>; qcom,mdm2ap-status-gpio = <&msmgpio 46 0x00>; qcom,ap2mdm-status-gpio = <&msmgpio 105 0x00>; qcom,ap2mdm-soft-reset-gpio = <&msmgpio 24 0x00>; qcom,mdm2ap-pblrdy-gpio = <&msmgpio 80 0x00>; qcom,ap2mdm-wakeup-gpio = <&msmgpio 104 0x00>; qcom,ap2mdm-vddmin-gpio = <&msmgpio 108 0x00>; qcom,mdm2ap-vddmin-gpio = <&msmgpio 27 0x00>; qcom,ramdump-delay-ms = <2000>; qcom,ramdump-timeout-ms = <120000>; qcom,vddmin-modes = "normal"; qcom,vddmin-drive-strength = <8>; qcom,ssctl-instance-id = <10>; qcom,sysmon-id = <20>; };