From f13f61f557d3739272a0132177c6a7697d6f8ba8 Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Wed, 10 Nov 2010 12:01:08 +0100 Subject: Version three of upstream remake Signed-off-by: Henrik Rydberg --- usr/src/dkms_source_tree/applesmc.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'usr/src') diff --git a/usr/src/dkms_source_tree/applesmc.c b/usr/src/dkms_source_tree/applesmc.c index 01071e5..7b22f67 100644 --- a/usr/src/dkms_source_tree/applesmc.c +++ b/usr/src/dkms_source_tree/applesmc.c @@ -150,7 +150,9 @@ static struct applesmc_registers { bool has_key_backlight; /* has keyboard backlight */ bool init_complete; /* true when fully initialized */ struct applesmc_entry *cache; /* cached key entries */ -} smcreg; +} smcreg = { + .mutex = __MUTEX_INITIALIZER(smcreg.mutex), +}; static const int debug; static struct platform_device *pdev; @@ -500,8 +502,6 @@ static int applesmc_init_smcreg_try(void) if (s->init_complete) return 0; - mutex_init(&s->mutex); - ret = read_register_count(&s->key_count); if (ret) return ret; @@ -561,19 +561,25 @@ static int applesmc_init_smcreg(void) for (ms = 0; ms < INIT_TIMEOUT_MSECS; ms += INIT_WAIT_MSECS) { ret = applesmc_init_smcreg_try(); - if (!ret) + if (!ret) { + if (ms) + pr_info("init_smcreg() took %d ms\n", ms); return 0; - pr_warn("slow init, retrying\n"); + } msleep(INIT_WAIT_MSECS); } + kfree(smcreg.cache); + smcreg.cache = NULL; + return ret; } static void applesmc_destroy_smcreg(void) { kfree(smcreg.cache); - memset(&smcreg, 0, sizeof(smcreg)); + smcreg.cache = NULL; + smcreg.init_complete = false; } /* Device model stuff */ -- cgit v1.2.3