All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mattia Dongili <malattia@linux.it>
To: Matthew Garrett <mjg59@srcf.ucam.org>
Cc: platform-driver-x86@vger.kernel.org,
	Javier Achirica <jachirica@gmail.com>,
	Mattia Dongili <malattia@linux.it>
Subject: [PATCH 08/11] sony-laptop: add smart connect control function
Date: Fri, 21 Mar 2014 08:01:19 +0900	[thread overview]
Message-ID: <1395356482-7446-9-git-send-email-malattia@linux.it> (raw)
In-Reply-To: <1395356482-7446-1-git-send-email-malattia@linux.it>

From: Javier Achirica <jachirica@gmail.com>

The current value is not available through the SNC device and therefore
the attribute is writable only.

Signed-off-by: Javier Achirica <jachirica@gmail.com>
Signed-off-by: Mattia Dongili <malattia@linux.it>
---
 drivers/platform/x86/sony-laptop.c | 67 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)

diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
index 48e7e5b..19d769e 100644
--- a/drivers/platform/x86/sony-laptop.c
+++ b/drivers/platform/x86/sony-laptop.c
@@ -177,6 +177,9 @@ static void sony_nc_usb_charge_cleanup(struct platform_device *pd);
 static int sony_nc_panelid_setup(struct platform_device *pd);
 static void sony_nc_panelid_cleanup(struct platform_device *pd);
 
+static int sony_nc_smart_conn_setup(struct platform_device *pd);
+static void sony_nc_smart_conn_cleanup(struct platform_device *pd);
+
 static int sony_nc_touchpad_setup(struct platform_device *pd,
 				  unsigned int handle);
 static void sony_nc_touchpad_cleanup(struct platform_device *pd);
@@ -1422,6 +1425,12 @@ static void sony_nc_function_setup(struct acpi_device *device,
 				pr_err("couldn't set up panel ID function (%d)\n",
 				       result);
 			break;
+		case 0x0168:
+			result = sony_nc_smart_conn_setup(pf_device);
+			if (result)
+				pr_err("couldn't set up smart connect support (%d)\n",
+						result);
+			break;
 		default:
 			continue;
 		}
@@ -1498,6 +1507,9 @@ static void sony_nc_function_cleanup(struct platform_device *pd)
 		case 0x011D:
 			sony_nc_panelid_cleanup(pd);
 			break;
+		case 0x0168:
+			sony_nc_smart_conn_cleanup(pd);
+			break;
 		default:
 			continue;
 		}
@@ -2885,6 +2897,61 @@ static void sony_nc_panelid_cleanup(struct platform_device *pd)
 	}
 }
 
+/* smart connect function */
+static struct device_attribute *sc_handle;
+
+static ssize_t sony_nc_smart_conn_store(struct device *dev,
+		struct device_attribute *attr,
+		const char *buffer, size_t count)
+{
+	unsigned int result;
+	unsigned long value;
+
+	if (count > 31)
+		return -EINVAL;
+
+	if (kstrtoul(buffer, 10, &value) || value > 1)
+		return -EINVAL;
+
+	if (sony_call_snc_handle(0x0168, value << 0x10, &result))
+		return -EIO;
+
+	return count;
+}
+
+static int sony_nc_smart_conn_setup(struct platform_device *pd)
+{
+	unsigned int result;
+
+	sc_handle = kzalloc(sizeof(struct device_attribute), GFP_KERNEL);
+	if (!sc_handle)
+		return -ENOMEM;
+
+	sysfs_attr_init(&sc_handle->attr);
+	sc_handle->attr.name = "smart_connect";
+	sc_handle->attr.mode = S_IWUSR;
+	sc_handle->show = NULL;
+	sc_handle->store = sony_nc_smart_conn_store;
+
+	result = device_create_file(&pd->dev, sc_handle);
+	if (result) {
+		kfree(sc_handle);
+		sc_handle = NULL;
+		return result;
+	}
+
+	return 0;
+}
+
+static void sony_nc_smart_conn_cleanup(struct platform_device *pd)
+{
+	if (sc_handle) {
+		device_remove_file(&pd->dev, sc_handle);
+		kfree(sc_handle);
+		sc_handle = NULL;
+	}
+}
+
 /* Touchpad enable/disable */
 struct touchpad_control {
 	struct device_attribute attr;
-- 
1.9.0

  parent reply	other threads:[~2014-03-20 23:09 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-20 23:01 [PATCH 00/11] ALS and other new functions Mattia Dongili
2014-03-20 23:01 ` [PATCH 01/11] sony-laptop: add support as Fn+1 as a hot key Mattia Dongili
2014-03-20 23:01 ` [PATCH 02/11] sony-laptop: Add support for lid resume settings on Vaio Pro Mattia Dongili
2014-03-20 23:01 ` [PATCH 03/11] sony-laptop: add panel_id function Mattia Dongili
2014-03-20 23:01 ` [PATCH 04/11] sony-laptop: add usb charge function Mattia Dongili
2014-03-20 23:01 ` [PATCH 05/11] sony-laptop: add fan speed regulation function Mattia Dongili
2014-03-20 23:01 ` [PATCH 06/11] sony-laptop: add hibernate on low battery function Mattia Dongili
2014-03-20 23:01 ` [PATCH 07/11] sony-laptop: adjust keyboard backlight values for off/auto/on Mattia Dongili
2014-03-20 23:01 ` Mattia Dongili [this message]
2014-03-20 23:01 ` [PATCH 09/11] backlight: introduce inter-driver notification of changes Mattia Dongili
     [not found] ` <1395356482-7446-1-git-send-email-malattia-k2GhghHVRtY@public.gmane.org>
2014-03-20 23:01   ` [PATCH 10/11] sony-laptop: als support Mattia Dongili
2014-03-23 19:32     ` Jonathan Cameron
2014-03-24 23:06       ` Mattia Dongili
2014-03-25  6:50         ` Jonathan Cameron
2014-03-25  6:50           ` Jonathan Cameron
2014-03-25 11:57       ` Javier Achirica
2014-03-20 23:01 ` [PATCH 11/11] sony-laptop: remove useless sony-laptop versioning Mattia Dongili
2014-03-27 21:23 ` [PATCH 00/11] ALS and other new functions Mattia Dongili

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1395356482-7446-9-git-send-email-malattia@linux.it \
    --to=malattia@linux.it \
    --cc=jachirica@gmail.com \
    --cc=mjg59@srcf.ucam.org \
    --cc=platform-driver-x86@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.