mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 17:25:38 +00:00
mfd: tqmx86: Add I2C IRQ support
The i2c-ocores controller can run in interrupt mode on tqmx86 modules. Add a module parameter to allow configuring the IRQ number, similar to the handling of the GPIO IRQ. The new code and module parameter refer to the I2C controller as "I2C1", as the TQMx86 PLD actually contains a second I2C controller, for which driver support will be added in the future. Signed-off-by: Gregor Herburger <gregor.herburger@tq-group.com> Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com> Link: https://lore.kernel.org/r/c1b0769e00a8a4e463cffe725e939b0e5c2992c8.1731325758.git.matthias.schiffer@ew.tq-group.com Signed-off-by: Lee Jones <lee@kernel.org>
This commit is contained in:
parent
1f86faeb8b
commit
0d3f073975
@ -50,6 +50,7 @@
|
||||
#define TQMX86_REG_IO_EXT_INT_9 2
|
||||
#define TQMX86_REG_IO_EXT_INT_12 3
|
||||
#define TQMX86_REG_IO_EXT_INT_MASK 0x3
|
||||
#define TQMX86_REG_IO_EXT_INT_I2C1_SHIFT 0
|
||||
#define TQMX86_REG_IO_EXT_INT_GPIO_SHIFT 4
|
||||
#define TQMX86_REG_SAUC 0x17
|
||||
|
||||
@ -60,8 +61,19 @@ static uint gpio_irq;
|
||||
module_param(gpio_irq, uint, 0);
|
||||
MODULE_PARM_DESC(gpio_irq, "GPIO IRQ number (valid parameters: 7, 9, 12)");
|
||||
|
||||
static const struct resource tqmx_i2c_soft_resources[] = {
|
||||
DEFINE_RES_IO(TQMX86_IOBASE_I2C, TQMX86_IOSIZE_I2C),
|
||||
static uint i2c1_irq;
|
||||
module_param(i2c1_irq, uint, 0);
|
||||
MODULE_PARM_DESC(i2c1_irq, "I2C1 IRQ number (valid parameters: 7, 9, 12)");
|
||||
|
||||
enum tqmx86_i2c1_resource_type {
|
||||
TQMX86_I2C1_IO,
|
||||
TQMX86_I2C1_IRQ,
|
||||
};
|
||||
|
||||
static struct resource tqmx_i2c_soft_resources[] = {
|
||||
[TQMX86_I2C1_IO] = DEFINE_RES_IO(TQMX86_IOBASE_I2C, TQMX86_IOSIZE_I2C),
|
||||
/* Placeholder for IRQ resource */
|
||||
[TQMX86_I2C1_IRQ] = {},
|
||||
};
|
||||
|
||||
static const struct resource tqmx_watchdog_resources[] = {
|
||||
@ -264,6 +276,13 @@ static int tqmx86_probe(struct platform_device *pdev)
|
||||
ocores_platform_data.clock_khz = tqmx86_board_id_to_clk_rate(dev, board_id);
|
||||
|
||||
if (i2c_det == TQMX86_REG_I2C_DETECT_SOFT) {
|
||||
if (i2c1_irq) {
|
||||
err = tqmx86_setup_irq(dev, "I2C1", i2c1_irq, io_base,
|
||||
TQMX86_REG_IO_EXT_INT_I2C1_SHIFT);
|
||||
if (!err)
|
||||
tqmx_i2c_soft_resources[TQMX86_I2C1_IRQ] = DEFINE_RES_IRQ(i2c1_irq);
|
||||
}
|
||||
|
||||
err = devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE,
|
||||
tqmx86_i2c_soft_dev,
|
||||
ARRAY_SIZE(tqmx86_i2c_soft_dev),
|
||||
|
Loading…
Reference in New Issue
Block a user