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

Commit a7199e2b authored by Tony Lindgren's avatar Tony Lindgren
Browse files

bus: ti-sysc: Detect i2c interconnect target module based on register layout



We can easily detect i2c based on it's non-standard module registers that
consist of two 32-bit registers accessed in 16-bit mode.

So far we don't have other 16-bit modules, so there's currently no need
to add a custom property for 16-bit register access.

Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 70a65240
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -213,6 +213,21 @@ static int sysc_check_children(struct sysc *ddata)
	return 0;
}

/*
 * So far only I2C uses 16-bit read access with clockactivity with revision
 * in two registers with stride of 4. We can detect this based on the rev
 * register size to configure things far enough to be able to properly read
 * the revision register.
 */
static void sysc_check_quirk_16bit(struct sysc *ddata, struct resource *res)
{
	if (resource_size(res) == 8) {
		dev_dbg(ddata->dev,
			"enabling 16-bit and clockactivity quirks\n");
		ddata->cfg.quirks |= SYSC_QUIRK_16BIT | SYSC_QUIRK_USE_CLOCKACT;
	}
}

/**
 * sysc_parse_one - parses the interconnect target module registers
 * @ddata: device driver data
@@ -243,6 +258,8 @@ static int sysc_parse_one(struct sysc *ddata, enum sysc_registers reg)
	}

	ddata->offsets[reg] = res->start - ddata->module_pa;
	if (reg == SYSC_REVISION)
		sysc_check_quirk_16bit(ddata, res);

	return 0;
}
+1 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ struct sysc_regbits {
	s8 emufree_shift;
};

#define SYSC_QUIRK_16BIT		BIT(2)
#define SYSC_QUIRK_UNCACHED		BIT(1)
#define SYSC_QUIRK_USE_CLOCKACT		BIT(0)