50
50
#define TQMX86_REG_IO_EXT_INT_9 2
51
51
#define TQMX86_REG_IO_EXT_INT_12 3
52
52
#define TQMX86_REG_IO_EXT_INT_MASK 0x3
53
+ #define TQMX86_REG_IO_EXT_INT_I2C1_SHIFT 0
53
54
#define TQMX86_REG_IO_EXT_INT_GPIO_SHIFT 4
54
55
#define TQMX86_REG_SAUC 0x17
55
56
@@ -60,8 +61,19 @@ static uint gpio_irq;
60
61
module_param (gpio_irq , uint , 0 );
61
62
MODULE_PARM_DESC (gpio_irq , "GPIO IRQ number (valid parameters: 7, 9, 12)" );
62
63
63
- static const struct resource tqmx_i2c_soft_resources [] = {
64
- DEFINE_RES_IO (TQMX86_IOBASE_I2C , TQMX86_IOSIZE_I2C ),
64
+ static uint i2c1_irq ;
65
+ module_param (i2c1_irq , uint , 0 );
66
+ MODULE_PARM_DESC (i2c1_irq , "I2C1 IRQ number (valid parameters: 7, 9, 12)" );
67
+
68
+ enum tqmx86_i2c1_resource_type {
69
+ TQMX86_I2C1_IO ,
70
+ TQMX86_I2C1_IRQ ,
71
+ };
72
+
73
+ static struct resource tqmx_i2c_soft_resources [] = {
74
+ [TQMX86_I2C1_IO ] = DEFINE_RES_IO (TQMX86_IOBASE_I2C , TQMX86_IOSIZE_I2C ),
75
+ /* Placeholder for IRQ resource */
76
+ [TQMX86_I2C1_IRQ ] = {},
65
77
};
66
78
67
79
static const struct resource tqmx_watchdog_resources [] = {
@@ -264,6 +276,13 @@ static int tqmx86_probe(struct platform_device *pdev)
264
276
ocores_platform_data .clock_khz = tqmx86_board_id_to_clk_rate (dev , board_id );
265
277
266
278
if (i2c_det == TQMX86_REG_I2C_DETECT_SOFT ) {
279
+ if (i2c1_irq ) {
280
+ err = tqmx86_setup_irq (dev , "I2C1" , i2c1_irq , io_base ,
281
+ TQMX86_REG_IO_EXT_INT_I2C1_SHIFT );
282
+ if (!err )
283
+ tqmx_i2c_soft_resources [TQMX86_I2C1_IRQ ] = DEFINE_RES_IRQ (i2c1_irq );
284
+ }
285
+
267
286
err = devm_mfd_add_devices (dev , PLATFORM_DEVID_NONE ,
268
287
tqmx86_i2c_soft_dev ,
269
288
ARRAY_SIZE (tqmx86_i2c_soft_dev ),
0 commit comments