Qualcomm Secure Digital Card Controller (SDCC)

Secure Digital Card Controller provides host interface to
SD/MMC/SDIO cards.

Required properties:
  - compatible: should be "qcom,msm-sdcc"
  - reg: should contain SDCC (mandatory), SDCC-DML (optional) and BAM
    (optional) register maps.
  - reg-names: indicates various resources passed to driver (via reg
    property) by name. "reg-names" examples are "core_mem", "dml_mem"
    and "bam_mem". "dml_mem" and "bam_mem" are optional, and the SDCC
    driver will default to PIO mode when neither are present.
  - interrupts: should contain SDCC core interrupt.
  - interrupt-names: indicates interrupts passed to driver (via interrupts
    property) by name. "core_irq" is mandatory, "bam_irq" is mandatory only
    when BAM DMA engine is used. "status_irq" and "sdiowakeup_irq" are
    optional.
  - qcom,clk-rates: specifies supported SDCC clock frequencies, Units - Hz.
  - qcom,sup-voltages: specifies supported voltage ranges for card. Should
    always be specified in pairs (min, max), Units - mV.
  - <supply-name>-supply: phandle to the regulator device tree node.
    "supply-name" examples are "vdd", "vdd-io".

Optional Properties:
  - cell-index: defines slot ID.
  - qcom,bus-width: defines the bus I/O width that controller supports.
  - wp-gpios: specify GPIO for write protect switch detection.
  - cd-gpios: specify GPIO for card detection.
  - qcom,nonremovable: specifies whether the card in slot is hot pluggable
    or hard wired.
  - qcom,disable-cmd23: disable sending CMD23 to card when controller
    can't support it.
  - qcom,bus-speed-mode: specifies supported bus speed modes by host.
  - qcom,current-limit: specifies max. current the host can drive.
  - qcom,xpc: specifies if the host can supply more than 150mA for SDXC
    cards.
  - qcom,dat1-mpm-int: specifies MPM interrupt number corresponding to
    DAT1 line of SDCC (used only if slot has dedicated DAT1 MSM pin
    (not GPIO))

In the following, <supply> can be vdd (flash core voltage) or vdd-io
(I/O voltage).
  - qcom,<supply>-always-on: specifies whether supply should be kept "on"
    always.
  - qcom,<supply>-lpm-sup: specifies whether supply can be kept in low
    power mode (lpm).
  - qcom,<supply>-voltage-level: specifies voltage levels for supply.
    Should be specified in pairs (min, max), units uV.
  - qcom,<supply>-current-level: specifies load levels for supply in
    lpm or high power mode (hpm). Should be specified in pairs (lpm, hpm),
    units uA.

  - gpios: specifies gpios assigned for sdcc slot.
  - qcom,gpio-names:  a list of strings that map in order to the list
    of gpios. A slot has either gpios or dedicated tlmm pins as represented
    below.
  - qcom,pad-pull-on: Active pull configuration for sdc tlmm pins
  - qcom,pad-pull-off: Suspend pull configuration for sdc tlmm pins.
  - qcom,pad-drv-on: Active drive strength configuration for sdc tlmm pins.
  - qcom,pad-drv-off: Suspend drive strength configuration for sdc tlmm pins.
    Tlmm pins are specified as <clk cmd data>

  - qcom,bus-bw-vectors-bps: specifies array of throughput values in
    Bytes/sec. The values in the array are determined according to
    supported bus speed modes. For example, if host supports SDR12 mode,
    value is 13631488 Bytes/sec.
  - Refer to "Documentation/devicetree/bindings/arm/msm/msm_bus.txt" for
    below optional properties:
	- qcom,msm-bus,name
	- qcom,msm-bus,num-cases
	- qcom,msm-bus,active-only
	- qcom,msm-bus,num-paths
	- qcom,msm-bus,vectors-KBps

Example:

	qcom,sdcc@f9600000 {
	/* SDC1 used as eMMC slot */
	cell-index = <1>;
	compatible = "qcom,msm-sdcc";
	reg = <0xf9600000 0x800   // SDCC register interface
	/* To use PIO instead of BAM, skip DML and BAM regs */
		0xf9600800 0x1800  // DML register interface
		0xf9602000 0x2000> // BAM register interface

	interrupts = <123>;
	qcom,clk-rates = <400000 24000000 48000000>;
	qcom,sup-voltages = <2700 3300>;
	qcom,bus-width = <8>; //8-bit wide
	qcom,nonremovable;

	qcom,msm-bus,name = "sdcc2";
	qcom,msm-bus,num-cases = <7>;
	qcom,msm-bus,num-paths = <1>;
	qcom,msm-bus,vectors-KBps = <81 512 0 0>, /* No vote */
			<81 512 6656 13312>, /* 13 MB/s*/
			<81 512 13312 26624>, /* 26 MB/s */
			<81 512 26624 53248>, /* 52 MB/s */
			<81 512 53248 106496>, /* 104 MB/s */
			<81 512 106496 212992>, /* 208 MB/s */
			<81 512 2147483647 4294967295>; /* Max. bandwidth */
	qcom,bus-bw-vectors-bps = <0 13631488 27262976 54525952 109051904 218103808 4294967295>;
};
