42
42
#define CY8C95X0_PORTSEL 0x18
43
43
/* Port settings, write PORTSEL first */
44
44
#define CY8C95X0_INTMASK 0x19
45
- #define CY8C95X0_PWMSEL 0x1A
45
+ #define CY8C95X0_SELPWM 0x1A
46
46
#define CY8C95X0_INVERT 0x1B
47
47
#define CY8C95X0_DIRECTION 0x1C
48
48
/* Drive mode register change state on writing '1' */
@@ -328,14 +328,14 @@ static int cypress_get_pin_mask(struct cy8c95x0_pinctrl *chip, unsigned int pin)
328
328
static bool cy8c95x0_readable_register (struct device * dev , unsigned int reg )
329
329
{
330
330
/*
331
- * Only 12 registers are present per port (see Table 6 in the
332
- * datasheet).
331
+ * Only 12 registers are present per port (see Table 6 in the datasheet).
333
332
*/
334
- if (reg >= CY8C95X0_VIRTUAL && (reg % MUXED_STRIDE ) < 12 )
335
- return true ;
333
+ if (reg >= CY8C95X0_VIRTUAL && (reg % MUXED_STRIDE ) >= 12 )
334
+ return false ;
336
335
337
336
switch (reg ) {
338
337
case 0x24 ... 0x27 :
338
+ case 0x31 ... 0x3f :
339
339
return false;
340
340
default :
341
341
return true;
@@ -344,15 +344,19 @@ static bool cy8c95x0_readable_register(struct device *dev, unsigned int reg)
344
344
345
345
static bool cy8c95x0_writeable_register (struct device * dev , unsigned int reg )
346
346
{
347
- if (reg >= CY8C95X0_VIRTUAL )
348
- return true;
347
+ /*
348
+ * Only 12 registers are present per port (see Table 6 in the datasheet).
349
+ */
350
+ if (reg >= CY8C95X0_VIRTUAL && (reg % MUXED_STRIDE ) >= 12 )
351
+ return false;
349
352
350
353
switch (reg ) {
351
354
case CY8C95X0_INPUT_ (0 ) ... CY8C95X0_INPUT_ (7 ):
352
355
return false;
353
356
case CY8C95X0_DEVID :
354
357
return false;
355
358
case 0x24 ... 0x27 :
359
+ case 0x31 ... 0x3f :
356
360
return false;
357
361
default :
358
362
return true;
@@ -365,8 +369,8 @@ static bool cy8c95x0_volatile_register(struct device *dev, unsigned int reg)
365
369
case CY8C95X0_INPUT_ (0 ) ... CY8C95X0_INPUT_ (7 ):
366
370
case CY8C95X0_INTSTATUS_ (0 ) ... CY8C95X0_INTSTATUS_ (7 ):
367
371
case CY8C95X0_INTMASK :
372
+ case CY8C95X0_SELPWM :
368
373
case CY8C95X0_INVERT :
369
- case CY8C95X0_PWMSEL :
370
374
case CY8C95X0_DIRECTION :
371
375
case CY8C95X0_DRV_PU :
372
376
case CY8C95X0_DRV_PD :
@@ -395,7 +399,7 @@ static bool cy8c95x0_muxed_register(unsigned int reg)
395
399
{
396
400
switch (reg ) {
397
401
case CY8C95X0_INTMASK :
398
- case CY8C95X0_PWMSEL :
402
+ case CY8C95X0_SELPWM :
399
403
case CY8C95X0_INVERT :
400
404
case CY8C95X0_DIRECTION :
401
405
case CY8C95X0_DRV_PU :
@@ -466,7 +470,11 @@ static const struct regmap_config cy8c9520_i2c_regmap = {
466
470
.max_register = 0 , /* Updated at runtime */
467
471
.num_reg_defaults_raw = 0 , /* Updated at runtime */
468
472
.use_single_read = true, /* Workaround for regcache bug */
473
+ #if IS_ENABLED (CONFIG_DEBUG_PINCTRL )
474
+ .disable_locking = false,
475
+ #else
469
476
.disable_locking = true,
477
+ #endif
470
478
};
471
479
472
480
static inline int cy8c95x0_regmap_update_bits_base (struct cy8c95x0_pinctrl * chip ,
@@ -789,7 +797,7 @@ static int cy8c95x0_gpio_get_pincfg(struct cy8c95x0_pinctrl *chip,
789
797
reg = CY8C95X0_DIRECTION ;
790
798
break ;
791
799
case PIN_CONFIG_MODE_PWM :
792
- reg = CY8C95X0_PWMSEL ;
800
+ reg = CY8C95X0_SELPWM ;
793
801
break ;
794
802
case PIN_CONFIG_OUTPUT :
795
803
reg = CY8C95X0_OUTPUT ;
@@ -868,7 +876,7 @@ static int cy8c95x0_gpio_set_pincfg(struct cy8c95x0_pinctrl *chip,
868
876
reg = CY8C95X0_DRV_PP_FAST ;
869
877
break ;
870
878
case PIN_CONFIG_MODE_PWM :
871
- reg = CY8C95X0_PWMSEL ;
879
+ reg = CY8C95X0_SELPWM ;
872
880
break ;
873
881
case PIN_CONFIG_OUTPUT_ENABLE :
874
882
return cy8c95x0_pinmux_direction (chip , off , !arg );
@@ -1153,7 +1161,7 @@ static void cy8c95x0_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *
1153
1161
bitmap_zero (mask , MAX_LINE );
1154
1162
__set_bit (pin , mask );
1155
1163
1156
- if (cy8c95x0_read_regs_mask (chip , CY8C95X0_PWMSEL , pwm , mask )) {
1164
+ if (cy8c95x0_read_regs_mask (chip , CY8C95X0_SELPWM , pwm , mask )) {
1157
1165
seq_puts (s , "not available" );
1158
1166
return ;
1159
1167
}
@@ -1198,7 +1206,7 @@ static int cy8c95x0_set_mode(struct cy8c95x0_pinctrl *chip, unsigned int off, bo
1198
1206
u8 port = cypress_get_port (chip , off );
1199
1207
u8 bit = cypress_get_pin_mask (chip , off );
1200
1208
1201
- return cy8c95x0_regmap_write_bits (chip , CY8C95X0_PWMSEL , port , bit , mode ? bit : 0 );
1209
+ return cy8c95x0_regmap_write_bits (chip , CY8C95X0_SELPWM , port , bit , mode ? bit : 0 );
1202
1210
}
1203
1211
1204
1212
static int cy8c95x0_pinmux_mode (struct cy8c95x0_pinctrl * chip ,
@@ -1347,7 +1355,7 @@ static int cy8c95x0_irq_setup(struct cy8c95x0_pinctrl *chip, int irq)
1347
1355
1348
1356
ret = devm_request_threaded_irq (chip -> dev , irq ,
1349
1357
NULL , cy8c95x0_irq_handler ,
1350
- IRQF_ONESHOT | IRQF_SHARED | IRQF_TRIGGER_HIGH ,
1358
+ IRQF_ONESHOT | IRQF_SHARED ,
1351
1359
dev_name (chip -> dev ), chip );
1352
1360
if (ret ) {
1353
1361
dev_err (chip -> dev , "failed to request irq %d\n" , irq );
@@ -1438,15 +1446,15 @@ static int cy8c95x0_probe(struct i2c_client *client)
1438
1446
switch (chip -> tpin ) {
1439
1447
case 20 :
1440
1448
strscpy (chip -> name , cy8c95x0_id [0 ].name );
1441
- regmap_range_conf .range_max = CY8C95X0_VIRTUAL + 3 * MUXED_STRIDE ;
1449
+ regmap_range_conf .range_max = CY8C95X0_VIRTUAL + 3 * MUXED_STRIDE - 1 ;
1442
1450
break ;
1443
1451
case 40 :
1444
1452
strscpy (chip -> name , cy8c95x0_id [1 ].name );
1445
- regmap_range_conf .range_max = CY8C95X0_VIRTUAL + 6 * MUXED_STRIDE ;
1453
+ regmap_range_conf .range_max = CY8C95X0_VIRTUAL + 6 * MUXED_STRIDE - 1 ;
1446
1454
break ;
1447
1455
case 60 :
1448
1456
strscpy (chip -> name , cy8c95x0_id [2 ].name );
1449
- regmap_range_conf .range_max = CY8C95X0_VIRTUAL + 8 * MUXED_STRIDE ;
1457
+ regmap_range_conf .range_max = CY8C95X0_VIRTUAL + 8 * MUXED_STRIDE - 1 ;
1450
1458
break ;
1451
1459
default :
1452
1460
return - ENODEV ;
0 commit comments