diff options
Diffstat (limited to 'drivers/hwmon/applesmc.c')
-rw-r--r-- | drivers/hwmon/applesmc.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c index 62c2e32e25ef..98814d12a604 100644 --- a/drivers/hwmon/applesmc.c +++ b/drivers/hwmon/applesmc.c | |||
@@ -525,16 +525,25 @@ static int applesmc_init_smcreg_try(void) | |||
525 | { | 525 | { |
526 | struct applesmc_registers *s = &smcreg; | 526 | struct applesmc_registers *s = &smcreg; |
527 | bool left_light_sensor, right_light_sensor; | 527 | bool left_light_sensor, right_light_sensor; |
528 | unsigned int count; | ||
528 | u8 tmp[1]; | 529 | u8 tmp[1]; |
529 | int ret; | 530 | int ret; |
530 | 531 | ||
531 | if (s->init_complete) | 532 | if (s->init_complete) |
532 | return 0; | 533 | return 0; |
533 | 534 | ||
534 | ret = read_register_count(&s->key_count); | 535 | ret = read_register_count(&count); |
535 | if (ret) | 536 | if (ret) |
536 | return ret; | 537 | return ret; |
537 | 538 | ||
539 | if (s->cache && s->key_count != count) { | ||
540 | pr_warn("key count changed from %d to %d\n", | ||
541 | s->key_count, count); | ||
542 | kfree(s->cache); | ||
543 | s->cache = NULL; | ||
544 | } | ||
545 | s->key_count = count; | ||
546 | |||
538 | if (!s->cache) | 547 | if (!s->cache) |
539 | s->cache = kcalloc(s->key_count, sizeof(*s->cache), GFP_KERNEL); | 548 | s->cache = kcalloc(s->key_count, sizeof(*s->cache), GFP_KERNEL); |
540 | if (!s->cache) | 549 | if (!s->cache) |