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

Commit f6d29536 authored by Wolfram Sang's avatar Wolfram Sang
Browse files

Merge branch 'i2c/sbs-manager' into i2c/for-4.15

parents 4ee045f4 4cf419a2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -59,8 +59,8 @@ wants to support one of the below features, it should adapt the bindings below.
	interrupts used by the device.

- interrupt-names
	"irq" and "wakeup" names are recognized by I2C core, other names are
	left to individual drivers.
	"irq", "wakeup" and "smbus_alert" names are recognized by I2C core,
	other names are	left to individual drivers.

- host-notify
	device uses SMBus host notify protocol instead of interrupt line.
+66 −0
Original line number Diff line number Diff line
Binding for sbs-manager

Required properties:
- compatible: "<vendor>,<part-number>", "sbs,sbs-charger" as fallback. The part
  number compatible string might be used in order to take care of vendor
  specific registers.
- reg: integer, i2c address of the device. Should be <0xa>.
Optional properties:
- gpio-controller: Marks the port as GPIO controller.
  See "gpio-specifier" in .../devicetree/bindings/gpio/gpio.txt.
- #gpio-cells: Should be <2>. The first cell is the pin number, the second cell
  is used to specify optional parameters:
  See "gpio-specifier" in .../devicetree/bindings/gpio/gpio.txt.

From OS view the device is basically an i2c-mux used to communicate with up to
four smart battery devices at address 0xb. The driver actually implements this
behaviour. So standard i2c-mux nodes can be used to register up to four slave
batteries. Channels will be numerated starting from 1 to 4.

Example:

batman@a {
    compatible = "lltc,ltc1760", "sbs,sbs-manager";
    reg = <0x0a>;
    #address-cells = <1>;
    #size-cells = <0>;

    gpio-controller;
    #gpio-cells = <2>;

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

        battery@b {
            compatible = "ti,bq2060", "sbs,sbs-battery";
            reg = <0x0b>;
            sbs,battery-detect-gpios = <&batman 1 1>;
        };
    };

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

        battery@b {
            compatible = "ti,bq2060", "sbs,sbs-battery";
            reg = <0x0b>;
            sbs,battery-detect-gpios = <&batman 2 1>;
        };
    };

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

        battery@b {
            compatible = "ti,bq2060", "sbs,sbs-battery";
            reg = <0x0b>;
            sbs,battery-detect-gpios = <&batman 3 1>;
        };
    };
};
+0 −1
Original line number Diff line number Diff line
@@ -123,7 +123,6 @@ static struct i2c_adapter parport_adapter = {

/* SMBus alert support */
static struct i2c_smbus_alert_setup alert_data = {
	.alert_edge_triggered	= 1,
};
static struct i2c_client *ara;
static struct lineop parport_ctrl_irq = {
+0 −1
Original line number Diff line number Diff line
@@ -237,7 +237,6 @@ static void i2c_parport_attach(struct parport *port)

	/* Setup SMBus alert if supported */
	if (adapter_parm[type].smbus_alert) {
		adapter->alert_data.alert_edge_triggered = 1;
		adapter->ara = i2c_setup_smbus_alert(&adapter->adapter,
						     &adapter->alert_data);
		if (adapter->ara)
+0 −6
Original line number Diff line number Diff line
@@ -118,8 +118,6 @@ static void thunder_i2c_clock_disable(struct device *dev, struct clk *clk)
static int thunder_i2c_smbus_setup_of(struct octeon_i2c *i2c,
				      struct device_node *node)
{
	u32 type;

	if (!node)
		return -EINVAL;

@@ -127,10 +125,6 @@ static int thunder_i2c_smbus_setup_of(struct octeon_i2c *i2c,
	if (!i2c->alert_data.irq)
		return -EINVAL;

	type = irqd_get_trigger_type(irq_get_irq_data(i2c->alert_data.irq));
	i2c->alert_data.alert_edge_triggered =
		(type & IRQ_TYPE_LEVEL_MASK) ? 1 : 0;

	i2c->ara = i2c_setup_smbus_alert(&i2c->adap, &i2c->alert_data);
	if (!i2c->ara)
		return -ENODEV;
Loading