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

Commit 752451f0 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'i2c-embedded/for-next' of git://git.pengutronix.de/git/wsa/linux

Pull i2c-embedded changes from Wolfram Sang:
 - CBUS driver (an I2C variant)
 - continued rework of the omap driver
 - s3c2410 gets lots of fixes and gains pinctrl support
 - at91 gains DMA support
 - the GPIO muxer gains devicetree probing
 - typical fixes and additions all over

* 'i2c-embedded/for-next' of git://git.pengutronix.de/git/wsa/linux: (45 commits)
  i2c: omap: Remove the OMAP_I2C_FLAG_RESET_REGS_POSTIDLE flag
  i2c: at91: add dma support
  i2c: at91: change struct members indentation
  i2c: at91: fix compilation warning
  i2c: mxs: Do not disable the I2C SMBus quick mode
  i2c: mxs: Handle i2c DMA failure properly
  i2c: s3c2410: Remove recently introduced performance overheads
  i2c: ocores: Move grlib set/get functions into #ifdef CONFIG_OF block
  i2c: s3c2410: Add fix for i2c suspend/resume
  i2c: s3c2410: Fix code to free gpios
  i2c: i2c-cbus-gpio: introduce driver
  i2c: ocores: Add support for the GRLIB port of the controller and use function pointers for getreg and setreg functions
  i2c: ocores: Add irq support for sparc
  i2c: omap: Move the remove constraint
  ARM: dts: cfa10049: Add the i2c muxer buses to the CFA-10049
  i2c: s3c2410: do not special case HDMIPHY stuck bus detection
  i2c: s3c2410: use exponential back off while polling for bus idle
  i2c: s3c2410: do not generate STOP for QUIRK_HDMIPHY
  i2c: s3c2410: grab adapter lock while changing i2c clock
  i2c: s3c2410: Add support for pinctrl
  ...
parents 673ab878 972deb4f
Loading
Loading
Loading
Loading
+27 −0
Original line number Original line Diff line number Diff line
Device tree bindings for i2c-cbus-gpio driver

Required properties:
	- compatible = "i2c-cbus-gpio";
	- gpios: clk, dat, sel
	- #address-cells = <1>;
	- #size-cells = <0>;

Optional properties:
	- child nodes conforming to i2c bus binding

Example:

i2c@0 {
	compatible = "i2c-cbus-gpio";
	gpios = <&gpio 66 0 /* clk */
		 &gpio 65 0 /* dat */
		 &gpio 64 0 /* sel */
		>;
	#address-cells = <1>;
	#size-cells = <0>;

	retu-mfd: retu@1 {
		compatible = "retu-mfd";
		reg = <0x1>;
	};
};
+81 −0
Original line number Original line Diff line number Diff line
GPIO-based I2C Bus Mux

This binding describes an I2C bus multiplexer that uses GPIOs to
route the I2C signals.

                                  +-----+  +-----+
                                  | dev |  | dev |
    +------------+                +-----+  +-----+
    | SoC        |                   |        |
    |            |          /--------+--------+
    |   +------+ |  +------+    child bus A, on GPIO value set to 0
    |   | I2C  |-|--| Mux  |
    |   +------+ |  +--+---+    child bus B, on GPIO value set to 1
    |            |     |    \----------+--------+--------+
    |   +------+ |     |               |        |        |
    |   | GPIO |-|-----+            +-----+  +-----+  +-----+
    |   +------+ |                  | dev |  | dev |  | dev |
    +------------+                  +-----+  +-----+  +-----+

Required properties:
- compatible: i2c-mux-gpio
- i2c-parent: The phandle of the I2C bus that this multiplexer's master-side
  port is connected to.
- mux-gpios: list of gpios used to control the muxer
* Standard I2C mux properties. See mux.txt in this directory.
* I2C child bus nodes. See mux.txt in this directory.

Optional properties:
- idle-state: value to set the muxer to when idle. When no value is
  given, it defaults to the last value used.

For each i2c child node, an I2C child bus will be created. They will
be numbered based on their order in the device tree.

Whenever an access is made to a device on a child bus, the value set
in the revelant node's reg property will be output using the list of
GPIOs, the first in the list holding the least-significant value.

If an idle state is defined, using the idle-state (optional) property,
whenever an access is not being made to a device on a child bus, the
GPIOs will be set according to the idle value.

If an idle state is not defined, the most recently used value will be
left programmed into hardware whenever no access is being made to a
device on a child bus.

Example:
	i2cmux {
		compatible = "i2c-mux-gpio";
		#address-cells = <1>;
		#size-cells = <0>;
		mux-gpios = <&gpio1 22 0 &gpio1 23 0>;
		i2c-parent = <&i2c1>;

		i2c@1 {
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;

			ssd1307: oled@3c {
				compatible = "solomon,ssd1307fb-i2c";
				reg = <0x3c>;
				pwms = <&pwm 4 3000>;
				reset-gpios = <&gpio2 7 1>;
				reset-active-low;
			};
		};

		i2c@3 {
			reg = <3>;
			#address-cells = <1>;
			#size-cells = <0>;

			pca9555: pca9555@20 {
				compatible = "nxp,pca9555";
				gpio-controller;
				#gpio-cells = <2>;
				reg = <0x20>;
			};
		};
	};
+1 −1
Original line number Original line Diff line number Diff line
Device tree configuration for i2c-ocores
Device tree configuration for i2c-ocores


Required properties:
Required properties:
- compatible      : "opencores,i2c-ocores"
- compatible      : "opencores,i2c-ocores" or "aeroflexgaisler,i2cmst"
- reg             : bus address start and address range size of device
- reg             : bus address start and address range size of device
- interrupts      : interrupt number
- interrupts      : interrupt number
- clock-frequency : frequency of bus clock in Hz
- clock-frequency : frequency of bus clock in Hz
+16 −4
Original line number Original line Diff line number Diff line
@@ -13,11 +13,17 @@ Required properties:
  - interrupts: interrupt number to the cpu.
  - interrupts: interrupt number to the cpu.
  - samsung,i2c-sda-delay: Delay (in ns) applied to data line (SDA) edges.
  - samsung,i2c-sda-delay: Delay (in ns) applied to data line (SDA) edges.


Optional properties:
Required for all cases except "samsung,s3c2440-hdmiphy-i2c":
  - Samsung GPIO variant (deprecated):
    - gpios: The order of the gpios should be the following: <SDA, SCL>.
    - gpios: The order of the gpios should be the following: <SDA, SCL>.
      The gpio specifier depends on the gpio controller. Required in all
      The gpio specifier depends on the gpio controller. Required in all
      cases except for "samsung,s3c2440-hdmiphy-i2c" whose input/output
      cases except for "samsung,s3c2440-hdmiphy-i2c" whose input/output
    lines are permanently wired to the respective client
      lines are permanently wired to the respective clienta
  - Pinctrl variant (preferred, if available):
    - pinctrl-0: Pin control group to be used for this controller.
    - pinctrl-names: Should contain only one value - "default".

Optional properties:
  - samsung,i2c-slave-addr: Slave address in multi-master enviroment. If not
  - samsung,i2c-slave-addr: Slave address in multi-master enviroment. If not
    specified, default value is 0.
    specified, default value is 0.
  - samsung,i2c-max-bus-freq: Desired frequency in Hz of the bus. If not
  - samsung,i2c-max-bus-freq: Desired frequency in Hz of the bus. If not
@@ -31,8 +37,14 @@ Example:
		interrupts = <345>;
		interrupts = <345>;
		samsung,i2c-sda-delay = <100>;
		samsung,i2c-sda-delay = <100>;
		samsung,i2c-max-bus-freq = <100000>;
		samsung,i2c-max-bus-freq = <100000>;
		/* Samsung GPIO variant begins here */
		gpios = <&gpd1 2 0 /* SDA */
		gpios = <&gpd1 2 0 /* SDA */
			 &gpd1 3 0 /* SCL */>;
			 &gpd1 3 0 /* SCL */>;
		/* Samsung GPIO variant ends here */
		/* Pinctrl variant begins here */
		pinctrl-0 = <&i2c3_bus>;
		pinctrl-names = "default";
		/* Pinctrl variant ends here */
		#address-cells = <1>;
		#address-cells = <1>;
		#size-cells = <0>;
		#size-cells = <0>;


+24 −0
Original line number Original line Diff line number Diff line
@@ -92,6 +92,30 @@
				status = "okay";
				status = "okay";
			};
			};


			i2cmux {
				compatible = "i2c-mux-gpio";
				#address-cells = <1>;
				#size-cells = <0>;
				mux-gpios = <&gpio1 22 0 &gpio1 23 0>;
				i2c-parent = <&i2c1>;

				i2c@0 {
					reg = <0>;
				};

				i2c@1 {
					reg = <1>;
				};

				i2c@2 {
					reg = <2>;
				};

				i2c@3 {
					reg = <3>;
				};
			};

			usbphy1: usbphy@8007e000 {
			usbphy1: usbphy@8007e000 {
				status = "okay";
				status = "okay";
			};
			};
Loading