Commit e8df5a0c authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'i2c-for-7.1-rc1-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux

Pull more i2c updates from Wolfram Sang:

 - cx92755: convert I2C bindings to DT schema

 - mediatek: add optional bus power management during transfers

 - pxa: handle early bus busy condition

 - MAINTAINERS: update I2C RUST entry

* tag 'i2c-for-7.1-rc1-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
  MAINTAINERS: add Rust I2C tree and update Igor Korotin's email
  i2c: mediatek: add bus regulator control for power saving
  dt-bindings: i2c: cnxt,cx92755-i2c: Convert to DT schema
  i2c: pxa: handle 'Early Bus Busy' condition on Armada 3700
parents 5fb4fde3 79fc229e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -338,6 +338,7 @@ Herbert Xu <herbert@gondor.apana.org.au>
Huacai Chen <chenhuacai@kernel.org> <chenhc@lemote.com>
Huacai Chen <chenhuacai@kernel.org> <chenhuacai@loongson.cn>
Ignat Korchagin <ignat@linux.win> <ignat@cloudflare.com>
Igor Korotin <igor.korotin@linux.dev> <igor.korotin.linux@gmail.com>
Ike Panhc <ikepanhc@gmail.com> <ike.pan@canonical.com>
J. Bruce Fields <bfields@fieldses.org> <bfields@redhat.com>
J. Bruce Fields <bfields@fieldses.org> <bfields@citi.umich.edu>
+49 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/i2c/cnxt,cx92755-i2c.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Conexant Digicolor I2C controller

allOf:
  - $ref: /schemas/i2c/i2c-controller.yaml#

maintainers:
  - Baruch Siach <baruch@tkos.co.il>

properties:
  compatible:
    const: cnxt,cx92755-i2c

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  clocks:
    maxItems: 1

  clock-frequency:
    default: 100000

required:
  - compatible
  - reg
  - interrupts
  - clocks

unevaluatedProperties: false

examples:
  - |
    i2c@f0000120 {
      compatible = "cnxt,cx92755-i2c";
      reg = <0xf0000120 0x10>;
      interrupts = <28>;
      clocks = <&main_clk>;
      clock-frequency = <100000>;
      #address-cells = <1>;
      #size-cells = <0>;
    };
+0 −25
Original line number Diff line number Diff line
Conexant Digicolor I2C controller

Required properties:
 - compatible: must be "cnxt,cx92755-i2c"
 - reg: physical address and length of the device registers
 - interrupts: a single interrupt specifier
 - clocks: clock for the device
 - #address-cells: should be <1>
 - #size-cells: should be <0>

Optional properties:
- clock-frequency: the desired I2C bus clock frequency in Hz; in
  absence of this property the default value is used (100 kHz).

Example:

	i2c: i2c@f0000120 {
		compatible = "cnxt,cx92755-i2c";
		reg = <0xf0000120 0x10>;
		interrupts = <28>;
		clocks = <&main_clk>;
		clock-frequency = <100000>;
		#address-cells = <1>;
		#size-cells = <0>;
	};
+2 −1
Original line number Diff line number Diff line
@@ -12115,11 +12115,12 @@ F: include/uapi/linux/i2c-*.h
F:	include/uapi/linux/i2c.h
I2C SUBSYSTEM [RUST]
M:	Igor Korotin <igor.korotin.linux@gmail.com>
M:	Igor Korotin <igor.korotin@linux.dev>
R:	Danilo Krummrich <dakr@kernel.org>
R:	Daniel Almeida <daniel.almeida@collabora.com>
L:	rust-for-linux@vger.kernel.org
S:	Maintained
T:	git https://github.com/ikrtn/linux.git rust-i2c-next
F:	rust/kernel/i2c.rs
F:	samples/rust/rust_driver_i2c.rs
F:	samples/rust/rust_i2c_client.rs
+12 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/regulator/consumer.h>
#include <linux/scatterlist.h>
#include <linux/sched.h>
#include <linux/slab.h>
@@ -1244,9 +1245,15 @@ static int mtk_i2c_transfer(struct i2c_adapter *adap,
	bool write_then_read_en = false;
	struct mtk_i2c *i2c = i2c_get_adapdata(adap);

	ret = clk_bulk_enable(I2C_MT65XX_CLK_MAX, i2c->clocks);
	if (i2c->adap.bus_regulator) {
		ret = regulator_enable(i2c->adap.bus_regulator);
		if (ret)
			return ret;
	}

	ret = clk_bulk_enable(I2C_MT65XX_CLK_MAX, i2c->clocks);
	if (ret)
		goto err_regulator;

	i2c->auto_restart = i2c->dev_comp->auto_restart;

@@ -1301,6 +1308,10 @@ static int mtk_i2c_transfer(struct i2c_adapter *adap,

err_exit:
	clk_bulk_disable(I2C_MT65XX_CLK_MAX, i2c->clocks);
err_regulator:
	if (i2c->adap.bus_regulator)
		regulator_disable(i2c->adap.bus_regulator);

	return ret;
}

Loading