Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3ceeda1c authored by Mark Brown's avatar Mark Brown
Browse files

Merge remote-tracking branches 'asoc/topic/cs53l30', 'asoc/topic/cygnus',...

Merge remote-tracking branches 'asoc/topic/cs53l30', 'asoc/topic/cygnus', 'asoc/topic/da7219' and 'asoc/topic/davinci' into asoc-next
Loading
Loading
Loading
Loading
+67 −0
Original line number Diff line number Diff line
BROADCOM Cygnus Audio I2S/TDM/SPDIF controller

Required properties:
	- compatible : "brcm,cygnus-audio"
	- #address-cells: 32bit valued, 1 cell.
	- #size-cells:  32bit valued, 0 cell.
	- reg : Should contain audio registers location and length
	- reg-names: names of the registers listed in "reg" property
		Valid names are "aud" and "i2s_in". "aud" contains a
		set of DMA, I2S_OUT and SPDIF registers. "i2s_in" contains
		a set of I2S_IN registers.
	- clocks: PLL and leaf clocks used by audio ports
	- assigned-clocks: PLL and leaf clocks
	- assigned-clock-parents: parent clocks of the assigned clocks
		(usually the PLL)
	- assigned-clock-rates: List of clock frequencies of the
		assigned clocks
	- clock-names: names of 3 leaf clocks used by audio ports
		Valid names are "ch0_audio", "ch1_audio", "ch2_audio"
	- interrupts: audio DMA interrupt number

SSP Subnode properties:
- reg: The index of ssp port interface to use
	Valid value are 0, 1, 2, or 3 (for spdif)

Example:
	cygnus_audio: audio@180ae000 {
		compatible = "brcm,cygnus-audio";
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0x180ae000 0xafd>, <0x180aec00 0x1f8>;
		reg-names = "aud", "i2s_in";
		clocks = <&audiopll BCM_CYGNUS_AUDIOPLL_CH0>,
				<&audiopll BCM_CYGNUS_AUDIOPLL_CH1>,
				<&audiopll BCM_CYGNUS_AUDIOPLL_CH2>;
		assigned-clocks = <&audiopll BCM_CYGNUS_AUDIOPLL>,
							<&audiopll BCM_CYGNUS_AUDIOPLL_CH0>,
							<&audiopll BCM_CYGNUS_AUDIOPLL_CH1>,
							<&audiopll BCM_CYGNUS_AUDIOPLL_CH2>;
		assigned-clock-parents = <&audiopll BCM_CYGNUS_AUDIOPLL>;
		assigned-clock-rates = <1769470191>,
								<0>,
								<0>,
								<0>;
		clock-names = "ch0_audio", "ch1_audio", "ch2_audio";
		interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;

		ssp0: ssp_port@0 {
			reg = <0>;
			status = "okay";
		};

		ssp1: ssp_port@1 {
			reg = <1>;
			status = "disabled";
		};

		ssp2: ssp_port@2 {
			reg = <2>;
			status = "disabled";
		};

		spdif: spdif_port@3 {
			reg = <3>;
			status = "disabled";
		};
	};
+44 −0
Original line number Diff line number Diff line
CS53L30 audio CODEC

Required properties:

  - compatible : "cirrus,cs53l30"

  - reg : the I2C address of the device

  - VA-supply, VP-supply : power supplies for the device,
    as covered in Documentation/devicetree/bindings/regulator/regulator.txt.

Optional properties:

  - reset-gpios : a GPIO spec for the reset pin.

  - mute-gpios : a GPIO spec for the MUTE pin. The active state can be either
		 GPIO_ACTIVE_HIGH or GPIO_ACTIVE_LOW, which would be handled
		 by the driver automatically.

  - cirrus,micbias-lvl : Set the output voltage level on the MICBIAS Pin.
			 0 = Hi-Z
			 1 = 1.80 V
			 2 = 2.75 V

  - cirrus,use-sdout2 : This is a boolean property. If present, it indicates
			the hardware design connects both SDOUT1 and SDOUT2
			pins to output data. Otherwise, it indicates that
			only SDOUT1 is connected for data output.
			* CS53l30 supports 4-channel data output in the same
			* frame using two different ways:
			* 1) Normal I2S mode on two data pins -- each SDOUT
			*    carries 2-channel data in the same time.
			* 2) TDM mode on one signle data pin -- SDOUT1 carries
			*    4-channel data per frame.

Example:

codec: cs53l30@48 {
	compatible = "cirrus,cs53l30";
	reg = <0x48>;
	reset-gpios = <&gpio 54 0>;
	VA-supply = <&cs53l30_va>;
	VP-supply = <&cs53l30_vp>;
};
+28 −0
Original line number Diff line number Diff line
@@ -887,6 +887,34 @@ struct fwnode_handle *device_get_next_child_node(struct device *dev,
}
EXPORT_SYMBOL_GPL(device_get_next_child_node);

/**
 * device_get_named_child_node - Return first matching named child node handle
 * @dev: Device to find the named child node for.
 * @childname: String to match child node name against.
 */
struct fwnode_handle *device_get_named_child_node(struct device *dev,
						  const char *childname)
{
	struct fwnode_handle *child;

	/*
	 * Find first matching named child node of this device.
	 * For ACPI this will be a data only sub-node.
	 */
	device_for_each_child_node(dev, child) {
		if (is_of_node(child)) {
			if (!of_node_cmp(to_of_node(child)->name, childname))
				return child;
		} else if (is_acpi_data_node(child)) {
			if (acpi_data_node_match(child, childname))
				return child;
		}
	}

	return NULL;
}
EXPORT_SYMBOL_GPL(device_get_named_child_node);

/**
 * fwnode_handle_put - Drop reference to a device node
 * @fwnode: Pointer to the device node to drop the reference to.
+7 −0
Original line number Diff line number Diff line
@@ -420,6 +420,13 @@ static inline struct acpi_data_node *to_acpi_data_node(struct fwnode_handle *fwn
		container_of(fwnode, struct acpi_data_node, fwnode) : NULL;
}

static inline bool acpi_data_node_match(struct fwnode_handle *fwnode,
					const char *name)
{
	return is_acpi_data_node(fwnode) ?
		(!strcmp(to_acpi_data_node(fwnode)->name, name)) : false;
}

static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev)
{
	return &adev->fwnode;
+6 −0
Original line number Diff line number Diff line
@@ -568,6 +568,12 @@ static inline struct acpi_data_node *to_acpi_data_node(struct fwnode_handle *fwn
	return NULL;
}

static inline bool acpi_data_node_match(struct fwnode_handle *fwnode,
					const char *name)
{
	return false;
}

static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev)
{
	return NULL;
Loading