From patchwork Fri Apr 7 22:00:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Moritz Fischer X-Patchwork-Id: 9670511 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 479A5602B3 for ; Fri, 7 Apr 2017 22:00:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2AA3528663 for ; Fri, 7 Apr 2017 22:00:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1B5FF2866C; Fri, 7 Apr 2017 22:00:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CB99C28663 for ; Fri, 7 Apr 2017 22:00:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754935AbdDGWAj (ORCPT ); Fri, 7 Apr 2017 18:00:39 -0400 Received: from mail-pg0-f41.google.com ([74.125.83.41]:35594 "EHLO mail-pg0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751059AbdDGWAi (ORCPT ); Fri, 7 Apr 2017 18:00:38 -0400 Received: by mail-pg0-f41.google.com with SMTP id 81so77759133pgh.2 for ; Fri, 07 Apr 2017 15:00:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ettus-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=NK6y+d7gwNxMlnMCR5xpYD6c0YiEZbkCuiMiN2htPmQ=; b=rYclfMgDD55GGItG7wTuVyUs7nRn/URgWokLQSryM0Rz1GhOBnSHyIVdzHRVHPEn8+ g9r8BMYZbF5BdwEpng+cAaP1PivwvOyeIrfWaDZWuTNG4wir3CyS1hfTFEJzXhQYzP1K sAPwRPsbfDSf2gjMrCSvNyiGoWjpy3DItFKBmlrLAW+rl1Oxwm/GuNoMj7PzmFL60pWZ h3uTHGe3yJUMlqNboAH3f/WaeoZjo0RpLFBZh5xpeVDYUatpgn4zB1qdEcgxRRivgHbT 0Dzjd8/JyYKhltBJD184Ql06T5pGtveG9ctgcrH7dYM1MNBBvnHBbfzqcekFbEvmcWqr VZkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=NK6y+d7gwNxMlnMCR5xpYD6c0YiEZbkCuiMiN2htPmQ=; b=ZornmIWE1/Ju1j+Xp7ZPjIT8WQ4cChdef1TPLXoR0PWqR8w4yot+WXFmBH3thv5dQ5 oNfZisuGJDK30/1I1ElXXZTFIjKwEa+6Vxrkujh/BkvQDqtIJghJtl2Qs9lDV/heHkgV Vz+qQFBAVoyudVAs5iZeL+v34GFLwlzQr5+a2BLJgI6kz9bu4cApuQx9g36zVe03VVEJ Ftxm1h4FukH1+G4aV61P5nDVnCgv2f49016bumiJJT0semrfwZAkAdgoPs+mPbrqAatw h+n6NeD7fRAne6JnH43mqUfwvV2TIBk12rE9FV9dZl8xjpg3vwFizvDMK7ICjBV07jZC OXuA== X-Gm-Message-State: AFeK/H3SRM/QrfrZ2BgimFCXCeYM0rZx1EE+rcBOtcoiuqMHc8VSo1Pq8OJ4NG6v5bpVpV8d X-Received: by 10.98.218.73 with SMTP id w9mr43960398pfl.100.1491602437338; Fri, 07 Apr 2017 15:00:37 -0700 (PDT) Received: from tyrael.amer.corp.natinst.com (207-114-172-147.static.twtelecom.net. [207.114.172.147]) by smtp.gmail.com with ESMTPSA id i185sm6285569pge.48.2017.04.07.15.00.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 07 Apr 2017 15:00:36 -0700 (PDT) From: Moritz Fischer To: linux-hwmon@vger.kernel.org Cc: moritz.fischer@ettus.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, lee.jones@linaro.org, olof@lixom.net, linux@roeck-us.net, jdelvare@suse.com, robh+dt@kernel.org, mark.rutland@arm.com, Moritz Fischer Subject: [PATCH 1/3] mfd: cros-ec: Add functions to read mapped memory Date: Fri, 7 Apr 2017 15:00:08 -0700 Message-Id: <1491602410-31518-1-git-send-email-moritz.fischer@ettus.com> X-Mailer: git-send-email 2.7.4 Sender: linux-hwmon-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Moritz Fischer The ChromeOS EC has mapped memory regions where things like temperature sensors and fan speed are stored. Provide access to those from the cros-ec mfd device. Signed-off-by: Moritz Fischer --- drivers/platform/chrome/cros_ec_proto.c | 55 +++++++++++++++++++++++++++++++++ include/linux/mfd/cros_ec.h | 39 +++++++++++++++++++++++ 2 files changed, 94 insertions(+) diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c index ed5dee7..28063de 100644 --- a/drivers/platform/chrome/cros_ec_proto.c +++ b/drivers/platform/chrome/cros_ec_proto.c @@ -494,3 +494,58 @@ int cros_ec_get_next_event(struct cros_ec_device *ec_dev) return get_keyboard_state_event(ec_dev); } EXPORT_SYMBOL(cros_ec_get_next_event); + +static int __cros_ec_read_mapped_mem(struct cros_ec_device *ec, uint8_t offset, + void *buf, size_t size) +{ + int ret; + struct ec_params_read_memmap *params; + struct cros_ec_command *msg; + + msg = kzalloc(sizeof(*msg) + max(sizeof(*params), size), GFP_KERNEL); + if (!msg) + return -ENOMEM; + + msg->version = 0; + msg->command = EC_CMD_READ_MEMMAP; + msg->insize = size; + msg->outsize = sizeof(*params); + + params = (struct ec_params_read_memmap *)msg->data; + params->offset = offset; + params->size = size; + + ret = cros_ec_cmd_xfer(ec, msg); + if (ret < 0 || msg->result != EC_RES_SUCCESS) { + dev_warn(ec->dev, "cannot read mapped reg: %d/%d\n", + ret, msg->result); + goto out_free; + } + + memcpy(buf, msg->data, size); + +out_free: + kfree(msg); + return ret; +} + +int cros_ec_read_mapped_mem32(struct cros_ec_device *ec, const uint8_t offset, + uint32_t *data) +{ + return __cros_ec_read_mapped_mem(ec, offset, data, sizeof(*data)); +} +EXPORT_SYMBOL_GPL(cros_ec_read_mapped_mem32); + +int cros_ec_read_mapped_mem16(struct cros_ec_device *ec, const uint8_t offset, + uint16_t *data) +{ + return __cros_ec_read_mapped_mem(ec, offset, data, sizeof(*data)); +} +EXPORT_SYMBOL_GPL(cros_ec_read_mapped_mem16); + +int cros_ec_read_mapped_mem8(struct cros_ec_device *ec, const uint8_t offset, + uint8_t *data) +{ + return __cros_ec_read_mapped_mem(ec, offset, data, sizeof(*data)); +} +EXPORT_SYMBOL_GPL(cros_ec_read_mapped_mem8); diff --git a/include/linux/mfd/cros_ec.h b/include/linux/mfd/cros_ec.h index b3d04de..c2de878 100644 --- a/include/linux/mfd/cros_ec.h +++ b/include/linux/mfd/cros_ec.h @@ -190,6 +190,45 @@ struct cros_ec_dev { }; /** + * cros_ec_read_mapped_mem8 - Read mapped memory in the ChromeOS EC + * + * This can be called by drivers to access the mapped memory in the EC + * + * @ec_dev: Device to read from + * @offset: Offset to read + * @data: Return data + * @return: 0 if Ok, -ve on error + */ +int cros_ec_read_mapped_mem8(struct cros_ec_device *ec, const uint8_t offset, + uint8_t *data); + +/** + * cros_ec_read_mapped_mem16 - Read mapped memory in the ChromeOS EC + * + * This can be called by drivers to access the mapped memory in the EC + * + * @ec_dev: Device to read from + * @offset: Offset to read + * @data: Return data + * @return: 0 if Ok, -ve on error + */ +int cros_ec_read_mapped_mem16(struct cros_ec_device *ec, const uint8_t offset, + uint16_t *data); + +/** + * cros_ec_read_mapped_mem32 - Read mapped memory in the ChromeOS EC + * + * This can be called by drivers to access the mapped memory in the EC + * + * @ec_dev: Device to read from + * @offset: Offset to read + * @data: Return data + * @return: 0 if Ok, -ve on error + */ +int cros_ec_read_mapped_mem32(struct cros_ec_device *ec, const uint8_t offset, + uint32_t *data); + +/** * cros_ec_suspend - Handle a suspend operation for the ChromeOS EC device * * This can be called by drivers to handle a suspend event.