Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp3989103ybp; Mon, 7 Oct 2019 01:05:02 -0700 (PDT) X-Google-Smtp-Source: APXvYqxjGhEkUBo7lkufppgKGJcq2dFyVvfoUQ6dntUTI8MTkNr1cru5S9LinH+82yjbqkuYwTMb X-Received: by 2002:a05:6402:782:: with SMTP id d2mr27364459edy.296.1570435502059; Mon, 07 Oct 2019 01:05:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570435502; cv=none; d=google.com; s=arc-20160816; b=pZFSPtYs9jcAV1BnWou2kJGl5LTH1+WJVPWKjok1bkjbok2ckFBs3b5mqKQ1BQ0E0P HIeZadVrnzierfbC/Tc1vC4FIoQcHeFar7WEM/VSiiqgSESoqMlfW8TJThhC3lcGByTb r+qD1MIzne0OYkVBjZ1O1vHZ373kDDcJAjDNAmT2NU7Qg1RupwXUUB8CowYBMVBr/oTA 0r7nbwUsTvE6kp13SoLCf37oiUAJn8w18UVfis00Bg6zrSSYI2NjBc5dLJ8Y8KZvcFBk KUWEHBHwTc95NVsYppuCr3A1rK0tHvDnXMoTXjK/VqNSkqCHcJUUGqdxX3J/WpLDhLkc nOSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=u8VJVRDT3OUyLjgNXAgYtCNyTR8O6tuL+6GMwd0XRpk=; b=ojQPXmm18/RDm4DC/MV98f0Uo+zenP1GrrtGwz/Rq+4T7g2f119UU15aF3y4YdpiUp wr2D/syLgwSrwOISSNJ6mB+R2WPA6BEUCl2h7J3SLpvh1+KiMdxKIeg+rePsZrT6Yk2g P9Xl3fIYX5Fl0DVEz1+KPbAa15EuzIKHyj546brriLJiX9RXiZ85Hl7d6MVD8tjHLpDU PBRGJkGCHmQglCb8JT4VKBAVlf5eUbMn6BdmIitOLHG+SPjMXU4JYeH/JUcoV658RWac 9g86cNSazleGTH312xC5lGvFHTqXeM9fj5pakVeBQ/+N7MB6ASeiudPWjB1t0zYKoufE 5A5Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=H+qGvGlE; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b1si8246652edm.271.2019.10.07.01.04.38; Mon, 07 Oct 2019 01:05:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=H+qGvGlE; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727441AbfJGIDj (ORCPT + 99 others); Mon, 7 Oct 2019 04:03:39 -0400 Received: from mail-oi1-f195.google.com ([209.85.167.195]:41270 "EHLO mail-oi1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726889AbfJGIDi (ORCPT ); Mon, 7 Oct 2019 04:03:38 -0400 Received: by mail-oi1-f195.google.com with SMTP id w65so10865371oiw.8 for ; Mon, 07 Oct 2019 01:03:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=u8VJVRDT3OUyLjgNXAgYtCNyTR8O6tuL+6GMwd0XRpk=; b=H+qGvGlEcaQ+IHSaoAsaQZbUszEa1otR3hOTR7ftfNmWzFYDGduMcgUMPUKsWZNSJ5 3Fnw5ij962RVc8pyahylWZ9SAvgpp7/pQuGAsZsWMulWcs9Z0iRt6R0jCTIpGrYacYS+ LBMz19RIy6gjh8l19t0LTCuKqpwBqNKE0V7A2HvDxQab5KrXAkpfQJaen8xzK0ay1/BJ 6kw/qthdKxrLxBxe5aCb48ENorlxg5+SyxB5qsbgLj4epEyjN4nm8xlGXTzHoocjlWpo 1glbHjIG2bdxjI0m1DhrDA5lqjwddhALaZQnu0sF3CVeeMu6bNm52YTyWbSIKRObyFPd sseA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=u8VJVRDT3OUyLjgNXAgYtCNyTR8O6tuL+6GMwd0XRpk=; b=tbjWB3HdBzIbAKxFUiaAkXedWylzv7mxx0C0Zt762rUNu7owMz7m9J03BtpsMY20cG OisBLZaodYr0OnzMrdTcyO3Ymor98i5ENMWkJklXMi7aQdju8Ts8YjNguEi5Dlhipssp 440P33yZZZ3vWVtj2lzszG0szqeM5JOeQZpuTsJ9cww9mnSHSFAn0oO2ODReXlbi5rYH 0mRgJK5u/l7uy1hF8nACHQeEjhqVd87tyxQTLMh1CiL8mO2D3ruzYja9ThCYQ1om+A0N XjuWlrrnbfqa0RrH5W9C88/nvPWLX1x069j3PluBG6EXfUHI5O9qVvVNBcuyd6yMRWqh GTVQ== X-Gm-Message-State: APjAAAUvU025HB2cYnk5SVawLxi5rIHGP6QqQkkg16Q1Qu5ZR3NYcnwX KlAMHoYak0iu9Z+dWlGsBHlE5QT4eltZ18+kcUBfXw== X-Received: by 2002:aca:1308:: with SMTP id e8mr17564514oii.145.1570435417434; Mon, 07 Oct 2019 01:03:37 -0700 (PDT) MIME-Version: 1.0 References: <20191007071610.65714-1-cychiang@chromium.org> In-Reply-To: <20191007071610.65714-1-cychiang@chromium.org> From: Tzung-Bi Shih Date: Mon, 7 Oct 2019 16:03:26 +0800 Message-ID: Subject: Re: [PATCH] firmware: vpd: Add an interface to read VPD value To: Cheng-Yi Chiang Cc: Linux Kernel Mailing List , ALSA development , Guenter Roeck , Hung-Te Lin , Stephen Boyd , Greg Kroah-Hartman , Sean Paul , Mark Brown , dgreid@chromium.org, Tzung-Bi Shih Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Oct 7, 2019 at 3:16 PM Cheng-Yi Chiang wrote: > > Add an interface for other driver to query VPD value. > This will be used for ASoC machine driver to query calibration > data stored in VPD for smart amplifier speaker resistor > calibration. > > Signed-off-by: Cheng-Yi Chiang > --- > drivers/firmware/google/vpd.c | 16 ++++++++++++++++ > include/linux/firmware/google/google_vpd.h | 18 ++++++++++++++++++ > 2 files changed, 34 insertions(+) > create mode 100644 include/linux/firmware/google/google_vpd.h > > diff --git a/drivers/firmware/google/vpd.c b/drivers/firmware/google/vpd.c > index db0812263d46..71e9d2da63be 100644 > --- a/drivers/firmware/google/vpd.c > +++ b/drivers/firmware/google/vpd.c > @@ -65,6 +65,22 @@ static ssize_t vpd_attrib_read(struct file *filp, struct kobject *kobp, > info->bin_attr.size); > } > > +int vpd_attribute_read_value(bool ro, const char *key, > + char **value, u32 value_len) > +{ > + struct vpd_attrib_info *info; > + struct vpd_section *sec = ro ? &ro_vpd : &rw_vpd; > + > + list_for_each_entry(info, &sec->attribs, list) { > + if (strcmp(info->key, key) == 0) { > + *value = kstrndup(info->value, value_len, GFP_KERNEL); Value is not necessary a NULL-terminated string. kmalloc(info->bin_attr.size) and memcpy(...) would make the most sense. The value_len parameter makes less sense. It seems the caller knows the length of the value in advance. Suggest to change the value_len to report the length of value. I.e. *value_len = info->bin_attr.size; Also please check the return value for memory allocation-like functions (e.g. kstrndup, kmalloc) so that *value won't be NULL but the function returned 0. > + return 0; > + } > + } > + return -EINVAL; > +} > +EXPORT_SYMBOL(vpd_attribute_read_value); > + > /* > * vpd_section_check_key_name() > * > diff --git a/include/linux/firmware/google/google_vpd.h b/include/linux/firmware/google/google_vpd.h > new file mode 100644 > index 000000000000..6f1160f28af8 > --- /dev/null > +++ b/include/linux/firmware/google/google_vpd.h > @@ -0,0 +1,18 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +/* > + * Google VPD interface. > + * > + * Copyright 2019 Google Inc. > + */ > + > +/* Interface for reading VPD value on Chrome platform. */ > + > +#ifndef __GOOGLE_VPD_H > +#define __GOOGLE_VPD_H > + > +#include > + > +int vpd_attribute_read_value(bool ro, const char *key, > + char **value, u32 value_len); > + > +#endif /* __GOOGLE_VPD_H */ > -- > 2.23.0.581.g78d2f28ef7-goog >