From patchwork Fri Oct 1 07:39:59 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ike Panhc X-Patchwork-Id: 222902 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id o917eVjj009260 for ; Fri, 1 Oct 2010 07:40:31 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755386Ab0JAHkH (ORCPT ); Fri, 1 Oct 2010 03:40:07 -0400 Received: from adelie.canonical.com ([91.189.90.139]:37593 "EHLO adelie.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754736Ab0JAHkF (ORCPT ); Fri, 1 Oct 2010 03:40:05 -0400 Received: from hutte.canonical.com ([91.189.90.181]) by adelie.canonical.com with esmtp (Exim 4.69 #1 (Debian)) id 1P1aDs-0001RG-VO; Fri, 01 Oct 2010 08:40:04 +0100 Received: from [210.242.151.101] (helo=canonical.com) by hutte.canonical.com with esmtpsa (TLS-1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.69) (envelope-from ) id 1P1aDr-0001gf-UH; Fri, 01 Oct 2010 08:40:04 +0100 From: Ike Panhc To: platform-driver-x86@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Matthew Garrett , Len Brown , Corentin Chary , David Woodhouse , Mario.Holbe@TU-Ilmenau.DE Subject: [PATCH 7/9] ideapad: rewrite the sw rfkill set Date: Fri, 1 Oct 2010 15:39:59 +0800 Message-Id: <1285918799-13058-1-git-send-email-ike.pan@canonical.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1285918660-12802-1-git-send-email-ike.pan@canonical.com> References: <1285918660-12802-1-git-send-email-ike.pan@canonical.com> Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Fri, 01 Oct 2010 07:40:31 +0000 (UTC) diff --git a/drivers/platform/x86/ideapad_acpi.c b/drivers/platform/x86/ideapad_acpi.c index 3826686..78ac02a 100644 --- a/drivers/platform/x86/ideapad_acpi.c +++ b/drivers/platform/x86/ideapad_acpi.c @@ -37,18 +37,19 @@ struct ideapad_private { acpi_handle handle; struct rfkill *rfk[5]; -}; +} *ideapad_priv; static struct { char *name; int cfgbit; + int opcode; int type; } ideapad_rfk_data[] = { - { "ideapad_camera", 19, NUM_RFKILL_TYPES }, - { "ideapad_wlan", 18, RFKILL_TYPE_WLAN }, - { "ideapad_bluetooth", 16, RFKILL_TYPE_BLUETOOTH }, - { "ideapad_3g", 17, RFKILL_TYPE_WWAN }, - { "ideapad_killsw", 0, RFKILL_TYPE_WLAN } + { "ideapad_camera", 19, 0x1E, NUM_RFKILL_TYPES }, + { "ideapad_wlan", 18, 0x15, RFKILL_TYPE_WLAN }, + { "ideapad_bluetooth", 16, 0x17, RFKILL_TYPE_BLUETOOTH }, + { "ideapad_3g", 17, 0x20, RFKILL_TYPE_WWAN }, + { "ideapad_killsw", 0, 0, RFKILL_TYPE_WLAN } }; /* @@ -160,24 +161,6 @@ static int write_ec_cmd(acpi_handle handle, int cmd, unsigned long data) } /* the above is ACPI helpers */ -static int ideapad_dev_set_state(int device, int state) -{ - acpi_status status; - union acpi_object in_params[2]; - struct acpi_object_list input = { 2, in_params }; - - in_params[0].type = ACPI_TYPE_INTEGER; - in_params[0].integer.value = device + 1; - in_params[1].type = ACPI_TYPE_INTEGER; - in_params[1].integer.value = state; - - status = acpi_evaluate_object(NULL, "\\_SB_.SECN", &input, NULL); - if (ACPI_FAILURE(status)) { - printk(KERN_WARNING "IdeaPAD \\_SB_.SECN method failed %d\n", status); - return -ENODEV; - } - return 0; -} static ssize_t show_ideapad_cam(struct device *dev, struct device_attribute *attr, char *buf) @@ -217,7 +200,10 @@ static int ideapad_rfk_set(void *data, bool blocked) if (device == IDEAPAD_DEV_KILLSW) return -EINVAL; - return ideapad_dev_set_state(device, !blocked); + + return write_ec_cmd(ideapad_priv->handle, + ideapad_rfk_data[device].opcode, + !blocked); } static struct rfkill_ops ideapad_rfk_ops = { @@ -318,6 +304,7 @@ static int ideapad_acpi_add(struct acpi_device *adevice) priv->handle = adevice->handle; dev_set_drvdata(&adevice->dev, priv); + ideapad_priv = priv; for (i = IDEAPAD_DEV_WLAN; i <= IDEAPAD_DEV_KILLSW; i++) { if (!devs_present[i]) continue;