From nobody Wed Feb 11 03:41:58 2026 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 75A7B1CB337 for ; Mon, 5 May 2025 11:37:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746445049; cv=none; b=UXDWEHnquqS8gUUFqL5GEfsgaLWE0LXTBXBJEjxauJLhesoL8Xv2BuyG/wyJ4P+XYmOn7HFOqVJkDzhcIbzxRKelHn3y6zwkq3vbVnRmkceQL2OmRBGJjnsKKQRWsnI5NkEjvRzHZzf4WzREMX/B7Em1nCMDvW5i2vq3xnBwfvU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746445049; c=relaxed/simple; bh=NGvVaxHT6GAmFiO4/MidCvEywAVxDk7Jl939F55Z0dI=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=olZ8kslp66F56Lry4Otd1OvyObM6q8zKDoV2uaIVRc8rd8XkcV6dUJivZWDuQvqWVbOEES9wQsytIPDAPK43cHHiOonhaqppCIjxo1GUl6GvF0W8+BjG58ECHDXVPbUmnFNxfWxstQiGe0Qzl3BQwg/cCd9E3q3GMwTFQTlszNw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=AAax0nTi; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="AAax0nTi" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-39ee57c0b8cso3898913f8f.0 for ; Mon, 05 May 2025 04:37:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1746445046; x=1747049846; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=X8e0Rkt8jdkgvftQKNoZRYfHGuTcfUv00gpyykQyZ5M=; b=AAax0nTiW9IuezvwhRzm6R1DuiwUbaGGeYNG+j7YCAENkuHuS/EuTScf1PRyavmTDt h6pWuoY3euCyhb+KAgVz1NC6tyF/TwJfECiUneCDbL9ltX8e02ge18Jx0DVFaA3cqdh5 2re3pebPGIUA/8MlziUyNBY5befuE3Qb5pAZQCEPWOfltwo5FNLIbPv+AF46MqnlCdCJ 5RLv8dXvTt/gv6czsyGlC9Pj3a7uHGqL7XulwM+ne9JxtaAaQh9bwYBPj6viOPecPjzq OjWfn9jwnYdcY3GhqaBwDrgg6dtxaug0YrweG1RVsUP8OTGFUHJ1gIOn28NLmjGUQNbz MHgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746445046; x=1747049846; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=X8e0Rkt8jdkgvftQKNoZRYfHGuTcfUv00gpyykQyZ5M=; b=gcWU0Wzkl5SPDLViciGDqv35b0g4gnaPMb/gO1CH23K1uOPoJya9Fcl++sVH495twk TaFEGuKuFyzbA4ZFqaqrDt4gE5W2o+R49Bp7hZCIQIkiDzn6tbaCUvgV3zs2sR08c1wO 2Gnyu3xcXxNr2bylvWTXCTBkViFTQadzz5cYbcUMyYTx6tY1XWqMIUCs6O17rn9K4Ebi sgM88fAUlWrKBAlLDfdf0ySBycslX7UEzVd6FzNjDSZAnlQsfV50oLeKVuPT+JxiufJw O6Cx1x6VwHCWWvuZizzlRliJfaoeC8IpFHgfPDMYOztlDjv+HCURJIJ7T4aZiRaoUGXT s7Lg== X-Forwarded-Encrypted: i=1; AJvYcCXxY5z8cafPoBHPGm3ffOjisbJa7zDClx6vl+5VoY8T9Ao1aPDkL08M66n+6jR0WkhBKXeWxtpKLt60UpI=@vger.kernel.org X-Gm-Message-State: AOJu0Yxm1vE4RcM57ZgtL0nVP1N0k8rLecrWlvx1+AF0fZjuPDhdO1cj /mq+zzZjWOLMBMQdhrzVtX/nxPSVb8c8BjMNYlQDME6/ZTMn6E53q6EGdRPP0k8= X-Gm-Gg: ASbGncuVenQDxLYtKCq32J0CEU6lBD7DrYM45Ag0/fIOrXRohnUciIhdLjzEC/vpkHB N6giGuRP34aenGZPh7LEERtbbi6Dl8KaW0gd9XHiLb4VmZoqCB/805usIBroL4V4zVrEq2drkfo FKkG0rV7aX2yezcfa1NMeJab8mjkHB72uwPrQKCvDXZQyrk9ERbg6sT1nEqpKtb3hCOmFualIDn a1WZwqqFHu3PIJvmtL+/c1sXUJy4RmT4emECobnls/rIFsJ5I3pE052D2/UUvAmQkJC35jSWuZi 9vd0VQ/+upplXveiv6gZG9LDVHIXZ5QL8LnTy12tES4Jlg== X-Google-Smtp-Source: AGHT+IG2R6Ok3o7iGac7nBFNlC46WQLcSy3Kp1MNgBFG8zSUc4nmJCHq5ybXRtOuOQcBVHgNmjqcfw== X-Received: by 2002:adf:fb84:0:b0:3a0:7a90:2702 with SMTP id ffacd0b85a97d-3a09fd827d6mr4633313f8f.35.1746445045686; Mon, 05 May 2025 04:37:25 -0700 (PDT) Received: from localhost ([196.207.164.177]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3a099ae0d3csm9975184f8f.3.2025.05.05.04.37.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 04:37:25 -0700 (PDT) Date: Mon, 5 May 2025 14:37:22 +0300 From: Dan Carpenter To: Sudeep Holla Cc: Cristian Marussi , arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [RFC 1/7] firmware: arm_scmi: move boiler plate code into the get info functions Message-ID: <8bee4505bdc1d74e62533ed9975dc4500b2cfe53.1746443762.git.dan.carpenter@linaro.org> References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This code to check whether the selector is valid and if the item has already been recorded in the array can be moved to the scmi_pinctrl_get_function_info() type functions. That way it's in one place instead of duplicated in each of the callers. I removed the check for if "pi->nr_groups =3D=3D 0" because if that were the case then "selector >=3D pi->nr_groups" would already be true. It already was not checked for pins so this makes things a bit more uniform. I also removed the check for if (!pin) since pin is an offset into the middle of an array and can't be NULL. Signed-off-by: Dan Carpenter Reviewed-by: Cristian Marussi --- drivers/firmware/arm_scmi/pinctrl.c | 108 +++++++++++++--------------- 1 file changed, 48 insertions(+), 60 deletions(-) diff --git a/drivers/firmware/arm_scmi/pinctrl.c b/drivers/firmware/arm_scm= i/pinctrl.c index 3855c98caf06..d18c2d248f04 100644 --- a/drivers/firmware/arm_scmi/pinctrl.c +++ b/drivers/firmware/arm_scmi/pinctrl.c @@ -596,11 +596,19 @@ static int scmi_pinctrl_pin_free(const struct scmi_pr= otocol_handle *ph, u32 pin) } =20 static int scmi_pinctrl_get_group_info(const struct scmi_protocol_handle *= ph, - u32 selector, - struct scmi_group_info *group) + u32 selector) { + struct scmi_pinctrl_info *pi =3D ph->get_priv(ph); + struct scmi_group_info *group; int ret; =20 + if (selector >=3D pi->nr_groups) + return -EINVAL; + + group =3D &pi->groups[selector]; + if (group->present) + return 0; + ret =3D scmi_pinctrl_attributes(ph, GROUP_TYPE, selector, group->name, &group->nr_pins); if (ret) @@ -632,21 +640,14 @@ static int scmi_pinctrl_get_group_name(const struct s= cmi_protocol_handle *ph, u32 selector, const char **name) { struct scmi_pinctrl_info *pi =3D ph->get_priv(ph); + int ret; =20 if (!name) return -EINVAL; =20 - if (selector >=3D pi->nr_groups || pi->nr_groups =3D=3D 0) - return -EINVAL; - - if (!pi->groups[selector].present) { - int ret; - - ret =3D scmi_pinctrl_get_group_info(ph, selector, - &pi->groups[selector]); - if (ret) - return ret; - } + ret =3D scmi_pinctrl_get_group_info(ph, selector); + if (ret) + return ret; =20 *name =3D pi->groups[selector].name; =20 @@ -658,21 +659,14 @@ static int scmi_pinctrl_group_pins_get(const struct s= cmi_protocol_handle *ph, u32 *nr_pins) { struct scmi_pinctrl_info *pi =3D ph->get_priv(ph); + int ret; =20 if (!pins || !nr_pins) return -EINVAL; =20 - if (selector >=3D pi->nr_groups || pi->nr_groups =3D=3D 0) - return -EINVAL; - - if (!pi->groups[selector].present) { - int ret; - - ret =3D scmi_pinctrl_get_group_info(ph, selector, - &pi->groups[selector]); - if (ret) - return ret; - } + ret =3D scmi_pinctrl_get_group_info(ph, selector); + if (ret) + return ret; =20 *pins =3D pi->groups[selector].group_pins; *nr_pins =3D pi->groups[selector].nr_pins; @@ -681,11 +675,19 @@ static int scmi_pinctrl_group_pins_get(const struct s= cmi_protocol_handle *ph, } =20 static int scmi_pinctrl_get_function_info(const struct scmi_protocol_handl= e *ph, - u32 selector, - struct scmi_function_info *func) + u32 selector) { + struct scmi_pinctrl_info *pi =3D ph->get_priv(ph); + struct scmi_function_info *func; int ret; =20 + if (selector >=3D pi->nr_functions) + return -EINVAL; + + func =3D &pi->functions[selector]; + if (func->present) + return 0; + ret =3D scmi_pinctrl_attributes(ph, FUNCTION_TYPE, selector, func->name, &func->nr_groups); if (ret) @@ -716,21 +718,14 @@ static int scmi_pinctrl_get_function_name(const struc= t scmi_protocol_handle *ph, u32 selector, const char **name) { struct scmi_pinctrl_info *pi =3D ph->get_priv(ph); + int ret; =20 if (!name) return -EINVAL; =20 - if (selector >=3D pi->nr_functions || pi->nr_functions =3D=3D 0) - return -EINVAL; - - if (!pi->functions[selector].present) { - int ret; - - ret =3D scmi_pinctrl_get_function_info(ph, selector, - &pi->functions[selector]); - if (ret) - return ret; - } + ret =3D scmi_pinctrl_get_function_info(ph, selector); + if (ret) + return ret; =20 *name =3D pi->functions[selector].name; return 0; @@ -742,21 +737,14 @@ scmi_pinctrl_function_groups_get(const struct scmi_pr= otocol_handle *ph, const u32 **groups) { struct scmi_pinctrl_info *pi =3D ph->get_priv(ph); + int ret; =20 if (!groups || !nr_groups) return -EINVAL; =20 - if (selector >=3D pi->nr_functions || pi->nr_functions =3D=3D 0) - return -EINVAL; - - if (!pi->functions[selector].present) { - int ret; - - ret =3D scmi_pinctrl_get_function_info(ph, selector, - &pi->functions[selector]); - if (ret) - return ret; - } + ret =3D scmi_pinctrl_get_function_info(ph, selector); + if (ret) + return ret; =20 *groups =3D pi->functions[selector].groups; *nr_groups =3D pi->functions[selector].nr_groups; @@ -771,13 +759,19 @@ static int scmi_pinctrl_mux_set(const struct scmi_pro= tocol_handle *ph, } =20 static int scmi_pinctrl_get_pin_info(const struct scmi_protocol_handle *ph, - u32 selector, struct scmi_pin_info *pin) + u32 selector) { + struct scmi_pinctrl_info *pi =3D ph->get_priv(ph); + struct scmi_pin_info *pin; int ret; =20 - if (!pin) + if (selector >=3D pi->nr_pins) return -EINVAL; =20 + pin =3D &pi->pins[selector]; + if (pin->present) + return 0; + ret =3D scmi_pinctrl_attributes(ph, PIN_TYPE, selector, pin->name, NULL); if (ret) return ret; @@ -790,20 +784,14 @@ static int scmi_pinctrl_get_pin_name(const struct scm= i_protocol_handle *ph, u32 selector, const char **name) { struct scmi_pinctrl_info *pi =3D ph->get_priv(ph); + int ret; =20 if (!name) return -EINVAL; =20 - if (selector >=3D pi->nr_pins) - return -EINVAL; - - if (!pi->pins[selector].present) { - int ret; - - ret =3D scmi_pinctrl_get_pin_info(ph, selector, &pi->pins[selector]); - if (ret) - return ret; - } + ret =3D scmi_pinctrl_get_pin_info(ph, selector); + if (ret) + return ret; =20 *name =3D pi->pins[selector].name; =20 --=20 2.47.2 From nobody Wed Feb 11 03:41:58 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A83FE170A0B for ; Mon, 5 May 2025 11:37:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746445063; cv=none; b=iSMnzLUrr6r8bIhUgnrj2VhgorUJjPev//aqG7nVIC+rLo9KdHz393aXpESUrS78Fk8wQyPsumdqrKPwrnoBF24m6CcrmnEGBCfIiw4Oo3jw79898rxse3OYNQ7fnclswj929xqCbu1kIt5T3vP/svRqLD/o/z92DlHfRdkhjcI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746445063; c=relaxed/simple; bh=qtePzRqkZlEs81bNXFOWekKO3l6xt49e6qlCaSj1eq4=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=gYEJVvueBwHhWBcEO6Y5ZOJ2Aa4a8NVWVN+JmiAQEBROGicarBAZvasd60CeaX78Rf0sPUf8PYcXMLMZzWmlsuSm78EDfMJBIyA/Y9M9RHmr4En51ms1Rk7T17Ew3bFCTp6BXyT/AKQfzRR6zRIeEefVK0YFBocEafuSCVeLKIc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=f4jCI14N; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="f4jCI14N" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-43ce71582e9so27610175e9.1 for ; Mon, 05 May 2025 04:37:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1746445060; x=1747049860; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=oKte3VgudbHc3RjluDFuTdUTJFhTrJEHbiUVWp/kvpI=; b=f4jCI14N+DEHv/a9Nw+foFMMN6qhHZB4c2anm/k5QMkIPVT2jQ3SUPTBCANBFboVWc tPYI4oCfa6oQ5iquT3mCKAQl6bjg+8PgVlalx8Ds3ssQxSdIQTx0KSTrTM2zbq4s4rXf DuKBEmJ/YUUIXFgUaUUwc4/l0Jx2CzolSW1bR0OmdijDu3vFKcDdzIE+s0LH12S+2tPR 3NMz1Y3eoWBkk7V5U7mwZbyX9vNgsb0xlSG8f/G0XHvNM4zRqXloVmaqRefIrx4O5rlr kY5ADt27BQzUYoXJBOuEOkuRp712+kL/psQl8IG0Du5N3QrGr3AUpNAdJg6qU82ZfbNP 3kAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746445060; x=1747049860; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=oKte3VgudbHc3RjluDFuTdUTJFhTrJEHbiUVWp/kvpI=; b=iR7V3UKcSFTBiOpIU4LiQOcZwF7hDPhcpdzWcXneXyVl7x179uXDmYavM9bYzUF2qM Hd77w45krQnus5Fco8w+LsCe22Bvy/Wdycj0V21Jc6wEVVWfzfxXJR9Q3FwDoIsAwgvV 56gTOXjOIWjdG86HZo8u5QV8WcGoC2ah0aTra7elAelYO6l7wSY0IeRVmtHngPIHFzxv lddt7FlbtcIv2AabWipaPWcwoguM3kFYFhPrN4CUmbztf/9Oi8cfieVqGGYZMfHTZKGg wnWKOX8OJFBeyeM46I8/0TF+a2zi+Ex+VhU/PFFGhnDrz0E1QdUSWpIb1trwAXyU23pp Ic4A== X-Forwarded-Encrypted: i=1; AJvYcCXVYL+rro1nqYjnGqUP7Pk+NuT6zy8ybtzyu641p9gyuLX7qh36IluXo4uIp/M/gHEfXjcUYiUJ6d3E0G8=@vger.kernel.org X-Gm-Message-State: AOJu0YzAYPWqBmJYPNMJDnQgcDOdX1d8ig0S5+XOB1McZXyMyAoZkLlZ clVSi+a94UyQJb8pgLFft+GRJCxwdczPZjvbqnSUtsy+y9/oJu9nusPd4weG0pU= X-Gm-Gg: ASbGnctXdmmw2MBG4D++h6v16h1NjJP2KESdzZBoRXPwwVdvEvut2g110ZgG1mHTbZE ynNcnCPli3ReOOY1kZ8DztLBVlURoGsBFdvbmrZS9bLXNvqxQpgDnx3NosO2PgX2KfpgN7iKb4h GCq097lkVIuHlTZ0HtQHNtwRP/0jZw1aWw57ecFCA9eW7vUBTylbRyceT3JLxAekjo4b0fi4yu0 W0/8Zn/NAOsjiyeN/tQ5sLHCBzc7rljpyYqZc8wOTEB4+Me8e75Rh0Dz29ol+wnKsOxhEa6kApn 9MhIYT3uPyViExevnxekGbEbmtTmOLWPfcYjYLroY1oCIg== X-Google-Smtp-Source: AGHT+IEgQ2kmvDjquNKG+AlhhBrFBkbkp03G3W97BEk+O8YtzxGREh5AbJQUtjEqUzBOaf89aKK5Bw== X-Received: by 2002:a05:600c:3c90:b0:43c:f44c:72b7 with SMTP id 5b1f17b1804b1-441c48bdfdamr60684065e9.14.1746445060102; Mon, 05 May 2025 04:37:40 -0700 (PDT) Received: from localhost ([196.207.164.177]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-441b2b44474sm178310645e9.29.2025.05.05.04.37.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 04:37:39 -0700 (PDT) Date: Mon, 5 May 2025 14:37:36 +0300 From: Dan Carpenter To: Sudeep Holla Cc: Cristian Marussi , arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [RFC 2/7] firmware: arm_scmi: add is_gpio() function Message-ID: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Parse the GPIO response in scmi_pinctrl_attributes(), set the gpio flag, and create an is_gpio() function pointer so that it can be queried. In SCMI only functions and pins have a GPIO flag so that's why groups are not handled here. Signed-off-by: Dan Carpenter --- drivers/firmware/arm_scmi/pinctrl.c | 38 ++++++++++++++++++++++++++--- include/linux/scmi_protocol.h | 2 ++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/drivers/firmware/arm_scmi/pinctrl.c b/drivers/firmware/arm_scm= i/pinctrl.c index d18c2d248f04..f842bf7fe628 100644 --- a/drivers/firmware/arm_scmi/pinctrl.c +++ b/drivers/firmware/arm_scmi/pinctrl.c @@ -28,6 +28,7 @@ =20 #define EXT_NAME_FLAG(x) le32_get_bits((x), BIT(31)) #define NUM_ELEMS(x) le32_get_bits((x), GENMASK(15, 0)) +#define GPIO_FUNC(x) le32_get_bits((x), BIT(17)) =20 #define REMAINING(x) le32_get_bits((x), GENMASK(31, 16)) #define RETURNED(x) le32_get_bits((x), GENMASK(11, 0)) @@ -107,6 +108,7 @@ struct scmi_group_info { struct scmi_function_info { char name[SCMI_MAX_STR_SIZE]; bool present; + bool gpio; u32 *groups; u32 nr_groups; }; @@ -114,6 +116,7 @@ struct scmi_function_info { struct scmi_pin_info { char name[SCMI_MAX_STR_SIZE]; bool present; + bool gpio; }; =20 struct scmi_pinctrl_info { @@ -189,7 +192,7 @@ static int scmi_pinctrl_validate_id(const struct scmi_p= rotocol_handle *ph, =20 static int scmi_pinctrl_attributes(const struct scmi_protocol_handle *ph, enum scmi_pinctrl_selector_type type, - u32 selector, char *name, + u32 selector, char *name, bool *gpio, u32 *n_elems) { int ret; @@ -217,6 +220,8 @@ static int scmi_pinctrl_attributes(const struct scmi_pr= otocol_handle *ph, =20 ret =3D ph->xops->do_xfer(ph, t); if (!ret) { + if (gpio) + *gpio =3D GPIO_FUNC(rx->attributes); if (n_elems) *n_elems =3D NUM_ELEMS(rx->attributes); =20 @@ -610,7 +615,7 @@ static int scmi_pinctrl_get_group_info(const struct scm= i_protocol_handle *ph, return 0; =20 ret =3D scmi_pinctrl_attributes(ph, GROUP_TYPE, selector, group->name, - &group->nr_pins); + NULL, &group->nr_pins); if (ret) return ret; =20 @@ -679,6 +684,7 @@ static int scmi_pinctrl_get_function_info(const struct = scmi_protocol_handle *ph, { struct scmi_pinctrl_info *pi =3D ph->get_priv(ph); struct scmi_function_info *func; + bool gpio; int ret; =20 if (selector >=3D pi->nr_functions) @@ -689,7 +695,7 @@ static int scmi_pinctrl_get_function_info(const struct = scmi_protocol_handle *ph, return 0; =20 ret =3D scmi_pinctrl_attributes(ph, FUNCTION_TYPE, selector, func->name, - &func->nr_groups); + &gpio, &func->nr_groups); if (ret) return ret; =20 @@ -698,6 +704,7 @@ static int scmi_pinctrl_get_function_info(const struct = scmi_protocol_handle *ph, return -ENODATA; } =20 + func->gpio =3D gpio; func->groups =3D kmalloc_array(func->nr_groups, sizeof(*func->groups), GFP_KERNEL); if (!func->groups) @@ -763,6 +770,7 @@ static int scmi_pinctrl_get_pin_info(const struct scmi_= protocol_handle *ph, { struct scmi_pinctrl_info *pi =3D ph->get_priv(ph); struct scmi_pin_info *pin; + bool gpio; int ret; =20 if (selector >=3D pi->nr_pins) @@ -772,10 +780,12 @@ static int scmi_pinctrl_get_pin_info(const struct scm= i_protocol_handle *ph, if (pin->present) return 0; =20 - ret =3D scmi_pinctrl_attributes(ph, PIN_TYPE, selector, pin->name, NULL); + ret =3D scmi_pinctrl_attributes(ph, PIN_TYPE, selector, pin->name, &gpio, + NULL); if (ret) return ret; =20 + pin->gpio =3D gpio; pin->present =3D true; return 0; } @@ -815,9 +825,29 @@ static int scmi_pinctrl_name_get(const struct scmi_pro= tocol_handle *ph, } } =20 +static int scmi_pinctrl_is_gpio(const struct scmi_protocol_handle *ph, + u32 selector, + enum scmi_pinctrl_selector_type type) +{ + struct scmi_pinctrl_info *pi =3D ph->get_priv(ph); + int ret; + + ret =3D scmi_pinctrl_get_pin_info(ph, selector); + if (ret) + return ret; + + if (type =3D=3D PIN_TYPE) + return pi->pins[selector].gpio; + if (type =3D=3D FUNCTION_TYPE) + return pi->functions[selector].gpio; + + return -EINVAL; +} + static const struct scmi_pinctrl_proto_ops pinctrl_proto_ops =3D { .count_get =3D scmi_pinctrl_count_get, .name_get =3D scmi_pinctrl_name_get, + .is_gpio =3D scmi_pinctrl_is_gpio, .group_pins_get =3D scmi_pinctrl_group_pins_get, .function_groups_get =3D scmi_pinctrl_function_groups_get, .mux_set =3D scmi_pinctrl_mux_set, diff --git a/include/linux/scmi_protocol.h b/include/linux/scmi_protocol.h index 688466a0e816..b4ad32067fc4 100644 --- a/include/linux/scmi_protocol.h +++ b/include/linux/scmi_protocol.h @@ -792,6 +792,8 @@ struct scmi_pinctrl_proto_ops { int (*name_get)(const struct scmi_protocol_handle *ph, u32 selector, enum scmi_pinctrl_selector_type type, const char **name); + int (*is_gpio)(const struct scmi_protocol_handle *ph, u32 selector, + enum scmi_pinctrl_selector_type type); int (*group_pins_get)(const struct scmi_protocol_handle *ph, u32 selector, const unsigned int **pins, unsigned int *nr_pins); --=20 2.47.2 From nobody Wed Feb 11 03:41:58 2026 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5372C1FF60E for ; Mon, 5 May 2025 11:37:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746445077; cv=none; b=KQ0S/LsioWxvAJ9M6oVlyIvp/uJiko7bh7rZWGlIFPGTxGJ3e9Hl7Jzfv9NrIPHwg+dymWgEGutr9TrBsux6vi1ehcEyCecVtxwwaF9RztuxtuvniAcS5baypu7ubgh/iekVI9Kh+G+I+vhjDEqlmrpdrI00h+aVi1Hijko9YGo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746445077; c=relaxed/simple; bh=msIu5pu5l6E3KRgt1qjtII1INljwPzQsjxoJDPpqKng=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=Pl0tpXEiWfv5Zpzp/NEU8U+i+RvJJpdD8olE7RLaE9SFTrdyrTmvrddA6C4NG/ZyfBMARHX52rU/QaT2XQBFCPzTVBp0GeqKy4zh+Y8TMnZpwr+nhsgtp0jFLOTijkjOFJi+e+2iX6LjB0WqvjU257zMA3NilkgWQ1bg6Df7Qdw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=FpDJsqaL; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="FpDJsqaL" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3a07a7b4ac7so1792397f8f.2 for ; Mon, 05 May 2025 04:37:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1746445073; x=1747049873; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=v3kJw4Q1b9fZtWhj0ZAhlfc3rScj6eP/tzzAKRlMKnY=; b=FpDJsqaLx3U+IXm8VUJ94WB9L83Xsx/k42msz5Z8pd+WWa9wvcefdXFnAQKuUbXR3P c4GEOg8hPUrvRIq5GUG0US4wn1ESqvdqnRH+VxL1r88PPPSKJdw2rFcF/Qp2gnTSCniU BdQs9Ty1zkEFTI3fn7QPIjDMljY1dR5olxJmx6yrWyFHu9F2gjGbkrauI9s5XQ6DrLUb QbCtvriTjNvLGFWXEaAHi2LBEqaAwvF/qUSEwxtUd887GpoxRTjIJUyfya9ofsyTTU8j rEA7F5LGWaCwXfHNxZnc/sMSwtzDcurCn4GdIUWJLZRoZHU7V3L3FMS4hL1dTfwt9HvE DhiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746445073; x=1747049873; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=v3kJw4Q1b9fZtWhj0ZAhlfc3rScj6eP/tzzAKRlMKnY=; b=koanSP7WVpUei6hNIbLsVu6s4/HhvhWyWRYqAWW0cXuTntDaA3PJby8Yzb/YN1Qa+8 uHnAn5MXCw3iPReljQLrTw50BP+H7tm6+EwLAKLzn9Nbp052n1uoFliQ+zgQwBD4Vg2E Ov8LQE6y+2nlsVy5r13ec6L5orCmjau4XzQEd/9PS95JgesATxA+BdnlUAeUDFg0aqB7 v803ZPaawRrv0ST/Qoih9Pv31UpgYvTsCg68H83MgNeOyh+kYyMXx8TdsLEJPhRTYTLc j3oHms1V67Zj6aiG+P/3E94CjXrfiefJnjAaCBLzFJqOrjCF72PvqQD7CH4+owM4fi4W XvGQ== X-Forwarded-Encrypted: i=1; AJvYcCX7Lr2RCW8+pEeGN4iVUJgCthGhloJR57WWZn4AFnSdCevAaPvjHPEYfG3s/QVIs6bC8UngTmogrT39GrY=@vger.kernel.org X-Gm-Message-State: AOJu0YxtKxtHmjpLSSmysIWGdtOxHP/tWCYOtHi1+o6Q11D5k1aJCQAX IeOtrvmXE5qvi4Gemw8irDUKX7HNH9+daTSdJn8OjRl1mu9V704+yNvIbBdg9Jc= X-Gm-Gg: ASbGncuprAyEXC0v4p5TrdXSmhl1pnpfwZEeStSDi3123TNLQox5R84HC0SR0wOmk6G M09b9YNS3xRnUrvRbHNdyRbpMz66J7s8d8ewmzXYrOAJ1CgfYKOWe3BcCO88Z88N+lnbD1X13qi iHO2frRNOIffII3cOLWcpHSWQKkHP0NHl8xAJAIxDrl8ptSxVrKqoFkc4hnzVtAsZ1UwSnioutJ kss+LEwuGkwdwRuO64VnO/Ml91hjsaa//dJ3SA9m5g1QmgkAufl84flOMPepnrvcFThLw86htI2 l3lGTLTUph2ONz9lb90ybXAmZOE5lRz9DSj4bnLNZIh7vg== X-Google-Smtp-Source: AGHT+IGPxugxwn+CsjAzxvLOzVE663H1t3E4BLdwFviF5LobM1IDVpFgBNA5rWFTXIgUJVgNZmuhHw== X-Received: by 2002:a05:6000:400e:b0:3a0:839c:271f with SMTP id ffacd0b85a97d-3a09fdbcdfcmr5292749f8f.47.1746445073614; Mon, 05 May 2025 04:37:53 -0700 (PDT) Received: from localhost ([196.207.164.177]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3a099b17260sm10423126f8f.98.2025.05.05.04.37.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 04:37:53 -0700 (PDT) Date: Mon, 5 May 2025 14:37:50 +0300 From: Dan Carpenter To: Linus Walleij Cc: Bartosz Golaszewski , linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Takahiro AKASHI Subject: [RFC 3/7] pinctrl: introduce pinctrl_gpio_get_config() Message-ID: <0e982ace876920162d27a521f5f460b1dd6fc929.1746443762.git.dan.carpenter@linaro.org> References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: AKASHI Takahiro This is a counterpart of pinctrl_gpio_set_config(), which will initially be used to implement gpio_get interface in SCMI pinctrl based GPIO driver. Signed-off-by: AKASHI Takahiro Signed-off-by: Dan Carpenter --- drivers/pinctrl/core.c | 35 ++++++++++++++++++++++++++++++++ include/linux/pinctrl/consumer.h | 9 ++++++++ 2 files changed, 44 insertions(+) diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c index 4bdbf6bb26e2..4310f9e2118b 100644 --- a/drivers/pinctrl/core.c +++ b/drivers/pinctrl/core.c @@ -30,6 +30,7 @@ #include #include #include +#include #include =20 #include "core.h" @@ -937,6 +938,40 @@ int pinctrl_gpio_set_config(struct gpio_chip *gc, unsi= gned int offset, } EXPORT_SYMBOL_GPL(pinctrl_gpio_set_config); =20 +/** + * pinctrl_gpio_get_config() - Get the config for a given GPIO pin + * @gc: GPIO chip structure from the GPIO subsystem + * @offset: hardware offset of the GPIO relative to the controller + * @config: the configuration to query. On success it holds the result + */ +int pinctrl_gpio_get_config(struct gpio_chip *gc, unsigned int offset, uns= igned long *config) +{ + struct pinctrl_gpio_range *range; + const struct pinconf_ops *ops; + struct pinctrl_dev *pctldev; + int ret, pin; + + ret =3D pinctrl_get_device_gpio_range(gc, offset, &pctldev, &range); + if (ret) + return ret; + + ops =3D pctldev->desc->confops; + if (!ops || !ops->pin_config_get) + return -EINVAL; + + mutex_lock(&pctldev->mutex); + pin =3D gpio_to_pin(range, gc, offset); + ret =3D ops->pin_config_get(pctldev, pin, config); + mutex_unlock(&pctldev->mutex); + + if (ret) + return ret; + + *config =3D pinconf_to_config_argument(*config); + return 0; +} +EXPORT_SYMBOL_GPL(pinctrl_gpio_get_config); + static struct pinctrl_state *find_state(struct pinctrl *p, const char *name) { diff --git a/include/linux/pinctrl/consumer.h b/include/linux/pinctrl/consu= mer.h index 73de70362b98..e5815b3382dc 100644 --- a/include/linux/pinctrl/consumer.h +++ b/include/linux/pinctrl/consumer.h @@ -35,6 +35,8 @@ int pinctrl_gpio_direction_output(struct gpio_chip *gc, unsigned int offset); int pinctrl_gpio_set_config(struct gpio_chip *gc, unsigned int offset, unsigned long config); +int pinctrl_gpio_get_config(struct gpio_chip *gc, unsigned int offset, + unsigned long *config); =20 struct pinctrl * __must_check pinctrl_get(struct device *dev); void pinctrl_put(struct pinctrl *p); @@ -96,6 +98,13 @@ pinctrl_gpio_direction_output(struct gpio_chip *gc, unsi= gned int offset) return 0; } =20 +static inline int +pinctrl_gpio_get_config(struct gpio_chip *gc, unsigned int offset, + unsigned long *config) +{ + return 0; +} + static inline int pinctrl_gpio_set_config(struct gpio_chip *gc, unsigned int offset, unsigned long config) --=20 2.47.2 From nobody Wed Feb 11 03:41:58 2026 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EECF7204F90 for ; Mon, 5 May 2025 11:38:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746445089; cv=none; b=TSaM2AHNR1vswEh5xdy/RWdOXGHxL9g6Ij6sylf+Uc72IJCQzzchKQgn464KYf34Dm/05A5C4U3q7bAI1DX+hGYl9ExjwkmOvtUUkDcq9Pa8zPk9m41fyR/mrqZeHaHV4/w68bv7RRkb1W69M2hI/cTUlQWbkAREHriDWweCB2I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746445089; c=relaxed/simple; bh=R/WHlFZFKv+KxPs+9oB1B0r5TXqskrjUVFLrHry2GT4=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=qK0X3wwbjb+87FwW9PGGLDl0PAkJu0WIuDtrqmrMOgFSfNNuowxkLz3zO9YA10HUl+UBzZ+jzLixV5erRUrs5T/Ys6D5C+egPz/vL/BjTAGBQOYQBBQrf5p+Kl9ckrz2j4x0uzNPnxmnLjD1Mt7k71+ccVn6sR8vGw23Ld0Potc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=B2KEd8tn; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="B2KEd8tn" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-39c1efbefc6so3125370f8f.1 for ; Mon, 05 May 2025 04:38:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1746445086; x=1747049886; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=EnfanRT/xnMsGy8H0p32Y/2L5KjP3rCv4iXcBwib1Gc=; b=B2KEd8tnRltXOjFpEuJ6OfklU49ySnIoVTv53sDC0kj8FwlTUA7171/BXaQH3k+1Ws IRnEL3nQ7sKN/iPLKerTQxN8DOEKgxNeH0CuNMc8epiGXEriQMbrRv/w2OlFcMNMlokE NOtHQq2iiVxLn/TC8caxIgYF6e8fExY5e04bn7JBPJOIRXrdo75PBkWrKw0jdAr+o+kS Ds2FBhIi+qXphfRRz4Dypw0pW0345b3Ky20Fqpgqpsusggjl5lVH8QN8sZ8KRESopLNM t6nb3ZwPUnwAXLCvW9bUR4bWJZ7H5Ykl2ifSULVhx75wpA41zSrIKIak2TGV9CrhXDzy sDsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746445086; x=1747049886; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=EnfanRT/xnMsGy8H0p32Y/2L5KjP3rCv4iXcBwib1Gc=; b=G5ETb9B90Se/Fx2lUW3lQ0sGNW5p5Tbgn1auQTsZljN+qlGHzQYCZpxdnw2t95vboB k5kaGgVN5iUx5E95dwIhplQV3pNLZ5jY+EYL3t2UOnaKT3bt2bwMIjnYo2bA53OG6Q1w XS9uecHpi3qP4Kuwdo2nGT8iMjQSKMlPWNvPNRjtmS0Pk251mrHBxZBXkpNMrd1/SXl8 sPB6ZqX8gaiPWhavohZaLxQlTzegRaTKiGHTV7Qb0dOaVh2D9sXMe8UeQ60dBI5Wu+Oa rf5+VmXiIEu4q+8eCKOSQ8X/+Nu7OhitfZTttTaBxfWBdMWhuq0hoDQjJ+xl3QcUmrRh oXvA== X-Forwarded-Encrypted: i=1; AJvYcCUtM9r03jHyBAClS+OWI8xq3X9WMYqM9FvBniclMkeY+DeK5wBXTalZl64IClVWGhsTzYUixRFyMd+66vw=@vger.kernel.org X-Gm-Message-State: AOJu0Yz5d17DFFILkL+rvaBPHa+WbSMwRL+EfRBhWqEd/e5oG0FjkwOY aPOzqNSm/lLsFEDF/Oe09rlEcf9MjBdnGyJcpZQ5yqC9zR2zn83Czvftrjvv03I= X-Gm-Gg: ASbGncuELbPCGPXD/1gBExqhQXOTB8kvCsEcedwkiMW9ACNsqAEsZotlzHuPJjx6WqR PnN+3L+WJr7KruR+hITOq7D3LqVVat4TWQAp5lm4H1qcLCQkHfjHBR/u6phxuzkz/vgyOC8lCQr myhsSgVg3B6Kn2JiqwApjeOctXTmUEk7upnN4pyeARYmpiQZ/nM5lRD0K1fYFw5OzHvzdebt1Zg 3H6a9iJdWNN6mKY1FKeRKSok1HVVs3nIjqNZFyDtBvTKZE2DbDtVLpei9APawe6WCE9nB1CMjiA HznfG5U/K86dYkGLaYS8fzeoVOwId4qjqyQUjY5Bc2gG4A== X-Google-Smtp-Source: AGHT+IF/dmblFRkX7iqKnSY3Ui47NKfre3JcFqznctB9OO4eNwvIWHtPXnnSjPUS4bdilcUbRpgeUw== X-Received: by 2002:a5d:588a:0:b0:39c:30f9:339c with SMTP id ffacd0b85a97d-3a09ceba16amr6598523f8f.28.1746445086315; Mon, 05 May 2025 04:38:06 -0700 (PDT) Received: from localhost ([196.207.164.177]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3a099ae8117sm10276584f8f.56.2025.05.05.04.38.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 04:38:06 -0700 (PDT) Date: Mon, 5 May 2025 14:38:03 +0300 From: Dan Carpenter To: Sudeep Holla Cc: Cristian Marussi , Linus Walleij , arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Takahiro AKASHI , Peng Fan Subject: [RFC 4/7] pinctrl-scmi: add PIN_CONFIG_INPUT_VALUE Message-ID: <855acdd6fcef4856c4fcc59affd3a191f74dbe82.1746443762.git.dan.carpenter@linaro.org> References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In SCMI the value of the pin is just another configuration option. Add this as an option in the pin_config_param enum and creating a mapping to SCMI_PIN_INPUT_VALUE in pinctrl_scmi_map_pinconf_type() Since this is an RFC patch, I'm going to comment that I think the SCMI pinctrl driver misuses the PIN_CONFIG_OUTPUT enum. It should be for enabling and disabling output on pins which can serve as both input and output. Enabling it is supposed to write a 1 and disabling it is supposed to write a 0 but we use that side effect to write 1s and 0s. I did't change this because it would break userspace but I'd like to add a PIN_CONFIG_OUTPUT_VALUE enum as well and use that in the GPIO driver. But in this patchset I just use PIN_CONFIG_OUTPUT. Signed-off-by: Dan Carpenter --- drivers/pinctrl/pinctrl-scmi.c | 3 +++ include/linux/pinctrl/pinconf-generic.h | 3 +++ 2 files changed, 6 insertions(+) diff --git a/drivers/pinctrl/pinctrl-scmi.c b/drivers/pinctrl/pinctrl-scmi.c index df4bbcd7d1d5..362a6d2c3c68 100644 --- a/drivers/pinctrl/pinctrl-scmi.c +++ b/drivers/pinctrl/pinctrl-scmi.c @@ -250,6 +250,9 @@ static int pinctrl_scmi_map_pinconf_type(enum pin_confi= g_param param, case PIN_CONFIG_INPUT_SCHMITT_ENABLE: *type =3D SCMI_PIN_INPUT_MODE; break; + case PIN_CONFIG_INPUT_VALUE: + *type =3D SCMI_PIN_INPUT_VALUE; + break; case PIN_CONFIG_MODE_LOW_POWER: *type =3D SCMI_PIN_LOW_POWER_MODE; break; diff --git a/include/linux/pinctrl/pinconf-generic.h b/include/linux/pinctr= l/pinconf-generic.h index 1bcf071b860e..b37838171581 100644 --- a/include/linux/pinctrl/pinconf-generic.h +++ b/include/linux/pinctrl/pinconf-generic.h @@ -83,6 +83,8 @@ struct pinctrl_map; * schmitt-trigger mode is disabled. * @PIN_CONFIG_INPUT_SCHMITT_UV: this will configure an input pin to run in * schmitt-trigger mode. The argument is in uV. + * @PIN_CONFIG_INPUT_VALUE: This is used in SCMI to read the value from the + * pin. * @PIN_CONFIG_MODE_LOW_POWER: this will configure the pin for low power * operation, if several modes of operation are supported these can be * passed in the argument on a custom form, else just use argument 1 @@ -135,6 +137,7 @@ enum pin_config_param { PIN_CONFIG_INPUT_SCHMITT, PIN_CONFIG_INPUT_SCHMITT_ENABLE, PIN_CONFIG_INPUT_SCHMITT_UV, + PIN_CONFIG_INPUT_VALUE, PIN_CONFIG_MODE_LOW_POWER, PIN_CONFIG_MODE_PWM, PIN_CONFIG_OUTPUT, --=20 2.47.2 From nobody Wed Feb 11 03:41:58 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 158621A316A for ; Mon, 5 May 2025 11:39:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746445174; cv=none; b=McABqqylm5vIK2yspexADvHrs/bSi5TphjiKa2zdu8YXWYpzgRdHdsCqDw1wWBYeI4nA944vDntnYDt0O99WXfzzaVHzqPn7SLjjGEsxEfoNnolGQsilYMu3I4dsem02BCQeYyYedUoQkUUnRMJoudIqE/LTRw+k8uTXs0Gyeis= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746445174; c=relaxed/simple; bh=ivuMF4AiyTS/4JYqXd/Q51GmUAE+wVce2hJ7HRmspx0=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=kaSZ7o9KOpJ9mfLPPN1gFY1uicmpRHUhW/JatdVp5C967hKMMlBZS1GyAE4ST/kx8vRlXW0AamxIZJSmio+ZAAH/NDKpjoTxpamtWn/PbQiAE+bg0C9O/FWocYBhV3hHg3URgfzblfEUrvCEZbeVgFdZr9HOfxk8TNZ0JasEySA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=Yo9G/U4g; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="Yo9G/U4g" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-43d0359b1fcso26616085e9.0 for ; Mon, 05 May 2025 04:39:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1746445171; x=1747049971; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=XnllKV8s3Tx8+pvOlOa62d3loJC0CAU43X1zb3557EY=; b=Yo9G/U4gm5ENY1N56ruYbEY9yTflS7Mb3qHRiK7rIphbVVKBzqyhQWFyJe6sbfLsiv S+9GXlD3x5qI2ENniiOHEpxnC7ge6fDOazIkA4SxLzveGKIQ9Lu22rupbaL+Q/s7uYqH 94t+MNJBPErNEkCuRZbHNqA8OG3xHlEBF4FM1ZystO6tJ8nwCt7ShqVnCGLU+OSSI6Ch MshNUT8awgHOqewzJxVOA/547zFl7IluW38JSi4+eMnY8D2ULEoAMxHyvkZFwo4C8/9j dE9YHB1ZvxETW7rlvV3Qa/mY6P1ewJrAzA7C5bJuMNHvjM5uaJl74OPr/XzXZ9P+XMl4 k0aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746445171; x=1747049971; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=XnllKV8s3Tx8+pvOlOa62d3loJC0CAU43X1zb3557EY=; b=KQx9X3+K4cpIT+udZI3CxaclYlwR8NZnEC/7ZGYuoIaWTJlnDBDeZMW5vDxVfV/hbo PAZ348EVmfCK6bvOVVChLiOxYJ1pS7YSgplxsVGnBrC/a4E+xilgrF31sxTiULoloFmg uK+H9g2/dOdhZTkxa8XTlSRwlZry/l+RC6JIggNuX6/wQM+HBozdQm2HO9fURz7lwJRR 9ZmAYg+CM6cP6bQSSZF8CuKXDJn02e/VC2TH1JzHf1qdjpjanDa/FPjJgyj3k2TTNBwW a0xBFOcspKtL9DH+o+8Gf9Z3f0gpN+M2XIB/z+AL9zAf8Q3bqwpQt8gSBM24VYWOiBWV M8ig== X-Forwarded-Encrypted: i=1; AJvYcCVGcN4Awz6U/Isan/rw6/dhMFmfYPqjxrrwlffYzZ7CxfAS5bjwdF9ap81xXPiDavzn3XU55m8YGTag+Rc=@vger.kernel.org X-Gm-Message-State: AOJu0Ywyc6Mm3CenxEoNuvzl/iAyK9F4sQDHiN8QOL/SNA1vVDqgAaIJ cVnMj61+cyowfpUr208HLp83NkB67s4oLjAyZkpEysEc4u3gI8idzioesTPYbbo= X-Gm-Gg: ASbGncviHWaAXrxXS2vwDnhmFSE+I2gcgRm05vqd6RcgdH0rDYY0fIn9//q4NXkiaw1 vYDNn3QvIdUut0OqV2AAiuYtCSSzakhD479Mj80DKaicsg6stgFvN0r3Z2TZAdEXfIUIveak/z4 58MnMHES9HdzMVG5G/M4JkuwgcFlbi0jPuYYEuAruCizbZJ4lG8tLzBEC0vyZWPB5diczxK34Io XRVAOcp4FHNYgOJTOQmupZjnZ77t5CVgKFTqyQvObCdvvLraY3S5L4s8zSygAiY9i+4voAkKgXB kOW7fRWIzSYN0sNuO4eYh9CIVrDtf+lQU47hL0j7j7lCVA== X-Google-Smtp-Source: AGHT+IEa20MlrBHGITVX3bXAuaInVkSaScwYRHy4y22UhCPjKxK+cq5tGX/c8wkWOhLGOqkhp1PM5g== X-Received: by 2002:a05:600c:4e47:b0:43b:bb72:1dce with SMTP id 5b1f17b1804b1-441b7481655mr136942135e9.5.1746445171320; Mon, 05 May 2025 04:39:31 -0700 (PDT) Received: from localhost ([196.207.164.177]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-441b2b20aa6sm178602255e9.27.2025.05.05.04.39.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 04:39:30 -0700 (PDT) Date: Mon, 5 May 2025 14:39:17 +0300 From: Dan Carpenter To: Sudeep Holla Cc: Cristian Marussi , Linus Walleij , arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Peng Fan Subject: [RFC 5/7] pinctrl: Delete PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS support Message-ID: <81fb0a1b0cf15d73e7635081594d8650bf1a258d.1746443762.git.dan.carpenter@linaro.org> References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The argument for PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS is supposed to be expressed in terms of ohms. But the pinctrl-scmi driver was implementing it the same as PIN_CONFIG_OUTPUT and writing either a zero or one to the pin. The SCMI protocol doesn't have an support configuration type so just delete this code instead of fixing it. Signed-off-by: Dan Carpenter --- drivers/pinctrl/pinctrl-scmi.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/pinctrl/pinctrl-scmi.c b/drivers/pinctrl/pinctrl-scmi.c index 362a6d2c3c68..f369f0354e43 100644 --- a/drivers/pinctrl/pinctrl-scmi.c +++ b/drivers/pinctrl/pinctrl-scmi.c @@ -262,9 +262,6 @@ static int pinctrl_scmi_map_pinconf_type(enum pin_confi= g_param param, case PIN_CONFIG_OUTPUT_ENABLE: *type =3D SCMI_PIN_OUTPUT_MODE; break; - case PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS: - *type =3D SCMI_PIN_OUTPUT_VALUE; - break; case PIN_CONFIG_POWER_SOURCE: *type =3D SCMI_PIN_POWER_SOURCE; break; --=20 2.47.2 From nobody Wed Feb 11 03:41:58 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B6C78204F90 for ; Mon, 5 May 2025 11:39:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746445194; cv=none; b=KSHvJHaBnt5yX0ad0NCXIZ1DSiMS63OVQZAiZfnG41IEArsVbFXzJE80mHxZU6VlG23FhTUfoISY2XT3HFj81uInzMlrsd3C5GXPT4qcRQ9SMvheJSPNb2iNKqOVJE/dpS8BQo8HEiluZmal0tTn6ImDI4lUHY3c71HWRFDkL4I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746445194; c=relaxed/simple; bh=vRN32xZ85C9p5S5NbFDW7sAvcDsmUVdlaouvdtHK2no=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=VajWbwcMR3E4/msJ/taRD7KSUuauqrngoP5J9U7yYwjS0M5CncjCB9PCibVnED2y19BjcYpj9KnzIiAaQWO569pEEN5CIG/AQli+sA1x0VMi/+3+HAGRRNQZ+aiFU7SQDUCnd0DtD1E1/blpnnfR5fNFnIrp6pYlZX0eJdZf28Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=wQPbTG5E; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="wQPbTG5E" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-441c99459e9so7430765e9.3 for ; Mon, 05 May 2025 04:39:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1746445191; x=1747049991; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=upLirTeDgN21tlG/CSaFHFN5b+EY/GrJw53DQ1VbDB4=; b=wQPbTG5EY5UcYBuQ3q1KEabpWuElyFOGLPLeM7/mfCCUdDieQlbbx+fa5Kpha1X9He dVfOyEWTi1zX86D39rj1mkDX2IXp6rgQkpfJWXhkOzq76Vl2hbYJxbmHCOUvdYEz1T25 VOBnXdKVT54346QbIipNlezqUThsFDAAvNQ1c40BqMw4p6MIiUBt4EOv47INtYxENSoS yNCD3SA9D0sFVH2lRN8Dr1ZHzy8cHDuCwPRYCYulhz/2ubj9Deg7Tnzk7DOi+8uPbz8d NrUeUqBkP5113mYtPpE6QpcFrVwxLTxjR7MeFjMhypqtoq23e846p0WF33NBNN2p22um mDAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746445191; x=1747049991; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=upLirTeDgN21tlG/CSaFHFN5b+EY/GrJw53DQ1VbDB4=; b=ZsroeJO3mafn+k41u5qTLt0wIUhZ0UxGflELjknqbKlw2R2fr5Bk9WZgTKAaerKcpR p4yBI1N+aSIg1r9av9YE4l7xX8FmctUslzPi4oJCIqFomolhGMYgfYhhumAIMz9k1u7D cpUJv0+60gnzctGavqqJJBcX/bvoQZ26v5F0tlN7T3CcG0JGYJVG+9+fF16bEQ49GfM0 YNv/xAVKKT7TV8V7XgtJP+ldtGLW+SxdFYfwMd56aqw65brDGhnzm3kmOUZymPrV1f7e 6CqfDbO59EMvbkw2jtJx6KsiboCFWQdb1HTRNDbnntVqZUo6MhxLCEgeUALtWZbvpcuZ jX+Q== X-Forwarded-Encrypted: i=1; AJvYcCXjgFWxwspQubhAOlSf39mx2Op71xywHrWhVnOOep84O1xtxM6Jkq7m7oc91VKHTj/pd1y65+tvjy0Tn7g=@vger.kernel.org X-Gm-Message-State: AOJu0YxhnY1KJ9FLs1ykB9thj1q35lQRdHWWy8/DFxKHetBwulZWPSYk 5uZUnjalr7wFfuSIFUGRsjGC9kXN3UaEZZUoW/VNABLv41NcgUTlf2bvoNFPCmA= X-Gm-Gg: ASbGncuVjfe2XpdRVKJagCxUBLMA9WvwNx4h/svXnkmU7tj/7zMFOvag+ZVQGpfBUyL mBOA7JUY3/czOFohflZzQ9+Y0N9k3BeWKYsf3X32nAJ/LLs4oROficoTSPOYrxcEN8EGokwJbkH jybejxGbE1zZhvFCbfpVcZyHIElCdWfS5TmZwrEMpt4jQCeA+7ZOaIzlneFHXerBC5z10MMxX6D oPtg1EPRCyLL2vMeN/iAud+Gg7vSxzX33KPYd9jmf6cmwiM4+byTsTT/AJPslfTeog5ZpqqcrsS hcvslFazvp2jP/lPT0GwIpQcvks2jmb8r5rxJC2XDwPmjw== X-Google-Smtp-Source: AGHT+IGvkzc1/h1CubNXx94UDKKtRArlm1khwfK49K/JcXsvwL+en0lghy11gufsaBe7uLcgb93WCA== X-Received: by 2002:a05:600c:5022:b0:43c:e6d1:efe7 with SMTP id 5b1f17b1804b1-441bbf34052mr95014525e9.26.1746445191044; Mon, 05 May 2025 04:39:51 -0700 (PDT) Received: from localhost ([196.207.164.177]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-441b8a3113csm129876775e9.33.2025.05.05.04.39.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 04:39:50 -0700 (PDT) Date: Mon, 5 May 2025 14:39:27 +0300 From: Dan Carpenter To: Sudeep Holla Cc: Cristian Marussi , Linus Walleij , Bartosz Golaszewski , arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Takahiro AKASHI Subject: [RFC 6/7] pinctrl-scmi: Add GPIO support Message-ID: <901a636b06f5ef25f8c0021c514bfcc01344c5df.1746443762.git.dan.carpenter@linaro.org> References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This adds GPIO support to the SCMI pin controller driver. It's an RFC patch because I'm not really sure how these are used and so I don't know how they should be configured via devicetree. I've labeled the places where I think devicetree configuration would go with a FIXME. This driver was based on work from Takahiro AKASHI. Signed-off-by: Dan Carpenter --- drivers/pinctrl/pinctrl-scmi.c | 206 ++++++++++++++++++++++++++++++++- 1 file changed, 205 insertions(+), 1 deletion(-) diff --git a/drivers/pinctrl/pinctrl-scmi.c b/drivers/pinctrl/pinctrl-scmi.c index f369f0354e43..40b432aa4756 100644 --- a/drivers/pinctrl/pinctrl-scmi.c +++ b/drivers/pinctrl/pinctrl-scmi.c @@ -6,6 +6,7 @@ * Copyright 2024 NXP */ =20 +#include #include #include #include @@ -16,6 +17,9 @@ #include #include =20 +#include + +#include #include #include #include @@ -42,6 +46,7 @@ struct scmi_pinctrl { unsigned int nr_functions; struct pinctrl_pin_desc *pins; unsigned int nr_pins; + struct gpio_chip *gc; }; =20 static int pinctrl_scmi_get_groups_count(struct pinctrl_dev *pctldev) @@ -505,6 +510,197 @@ static int pinctrl_scmi_get_pins(struct scmi_pinctrl = *pmx, return 0; } =20 +static int pinctrl_gpio_init_valid_mask(struct gpio_chip *gc, + unsigned long *valid_mask, + unsigned int ngpios) +{ + bitmap_fill(valid_mask, ngpios); + return 0; +} + +static int pinctrl_gpio_get_direction(struct gpio_chip *gc, unsigned int o= ffset) +{ + unsigned long config; + bool in, out; + int ret; + + config =3D PIN_CONFIG_INPUT_ENABLE; + ret =3D pinctrl_gpio_get_config(gc, offset, &config); + if (ret) + return ret; + in =3D config; + + config =3D PIN_CONFIG_OUTPUT_ENABLE; + ret =3D pinctrl_gpio_get_config(gc, offset, &config); + if (ret) + return ret; + out =3D config; + + /* Consistency check - in theory both can be enabled! */ + if (in && !out) + return GPIO_LINE_DIRECTION_IN; + if (!in && out) + return GPIO_LINE_DIRECTION_OUT; + + return -EINVAL; +} + +static int pinctrl_gpio_direction_output_wrapper(struct gpio_chip *gc, + unsigned int offset, int val) +{ + return pinctrl_gpio_direction_output(gc, offset); +} + +static int pinctrl_gpio_get(struct gpio_chip *gc, unsigned int offset) +{ + unsigned long config; + int ret; + + config =3D PIN_CONFIG_INPUT_VALUE; + ret =3D pinctrl_gpio_get_config(gc, offset, &config); + if (ret) + return ret; + + return config; +} + +static void pinctrl_gpio_set(struct gpio_chip *gc, unsigned int offset, in= t val) +{ + unsigned long config; + + config =3D PIN_CONF_PACKED(PIN_CONFIG_OUTPUT, val); + pinctrl_gpio_set_config(gc, offset, config); +} + +static int pinctrl_gc_to_func(struct gpio_chip *gc) +{ + struct scmi_pinctrl *pmx =3D gpiochip_get_data(gc); + + return (gc - pmx->gc); +} + +static int gpio_add_pin_ranges(struct gpio_chip *gc) +{ + struct scmi_pinctrl *pmx =3D gpiochip_get_data(gc); + const char * const *p_groups; + unsigned int n_groups; + int func =3D pinctrl_gc_to_func(gc); + int group; + int ret; + + ret =3D pmx->pctl_desc.pmxops->get_function_groups(pmx->pctldev, func, &p= _groups, &n_groups); + if (ret) + return ret; + + // FIXME: fix the correct group from the device tree + for (group =3D 0; group < n_groups; group++) { + ret =3D gpiochip_add_pingroup_range(gc, pmx->pctldev, 0, p_groups[group]= ); + if (ret) + return ret; + } + + return 0; +} + +static int get_nr_pins_in_function(struct scmi_pinctrl *pmx, int func) +{ + const char * const *pin_groups; + unsigned int n_groups; + const unsigned int *pins; + unsigned int n_pins; + int total =3D 0; + int i, ret; + + // FIXME: get the correct number of gc.ngpio + // Find the right group from the device tree + ret =3D pmx->pctl_desc.pmxops->get_function_groups(pmx->pctldev, func, &p= in_groups, &n_groups); + if (ret) + return ret; + + for (i =3D 0; i < n_groups; i++) { + ret =3D pinctrl_get_group_pins(pmx->pctldev, pin_groups[i], &pins, &n_pi= ns); + if (ret) + return ret; + total +=3D n_pins; + } + + return total; +} + +static int register_scmi_pinctrl_gpio_handler(struct device *dev, struct s= cmi_pinctrl *pmx) +{ + struct fwnode_handle *gpio =3D NULL; + int ret, i; + + gpio =3D fwnode_get_named_child_node(dev->fwnode, "gpio"); + if (!gpio) + return 0; + + pmx->gc =3D devm_kcalloc(dev, pmx->nr_functions, sizeof(*pmx->gc), GFP_KE= RNEL); + if (!pmx->gc) + return -ENOMEM; + + for (i =3D 0; i < pmx->nr_functions; i++) { + const char *fn_name; + + ret =3D pinctrl_ops->is_gpio(pmx->ph, i, FUNCTION_TYPE); + if (ret < 0) + return ret; + if (ret =3D=3D false) + continue; + + ret =3D pinctrl_ops->name_get(pmx->ph, i, FUNCTION_TYPE, &fn_name); + if (ret) + return ret; + + pmx->gc[i].label =3D devm_kasprintf(dev, GFP_KERNEL, "%s", fn_name); + if (!pmx->gc[i].label) + return -ENOMEM; + + pmx->gc[i].owner =3D THIS_MODULE; + pmx->gc[i].get =3D pinctrl_gpio_get; + pmx->gc[i].set =3D pinctrl_gpio_set; + pmx->gc[i].get_direction =3D pinctrl_gpio_get_direction; + pmx->gc[i].direction_input =3D pinctrl_gpio_direction_input; + pmx->gc[i].direction_output =3D pinctrl_gpio_direction_output_wrapper; + pmx->gc[i].add_pin_ranges =3D gpio_add_pin_ranges; + + // FIXME: verify that this is correct + pmx->gc[i].can_sleep =3D true; + + ret =3D get_nr_pins_in_function(pmx, i); + if (ret < 0) + return ret; + pmx->gc[i].ngpio =3D ret; + + pmx->gc[i].init_valid_mask =3D pinctrl_gpio_init_valid_mask; + pmx->gc[i].parent =3D dev; + pmx->gc[i].base =3D -1; + } + + return 0; +} + +static int scmi_gpiochip_add_data(struct device *dev, struct scmi_pinctrl = *pmx) +{ + int ret; + int i; + + for (i =3D 0; i < pmx->nr_functions; i++) { + ret =3D pinctrl_ops->is_gpio(pmx->ph, i, FUNCTION_TYPE); + if (ret < 0) + return ret; + if (ret =3D=3D false) + continue; + + ret =3D devm_gpiochip_add_data(dev, &pmx->gc[i], pmx); + if (ret) + return ret; + } + + return 0; +} + static const char * const scmi_pinctrl_blocklist[] =3D { "fsl,imx95", NULL @@ -558,7 +754,15 @@ static int scmi_pinctrl_probe(struct scmi_device *sdev) if (!pmx->functions) return -ENOMEM; =20 - return pinctrl_enable(pmx->pctldev); + ret =3D register_scmi_pinctrl_gpio_handler(dev, pmx); + if (ret) + return ret; + + ret =3D pinctrl_enable(pmx->pctldev); + if (ret) + return ret; + + return scmi_gpiochip_add_data(dev, pmx); } =20 static const struct scmi_device_id scmi_id_table[] =3D { --=20 2.47.2 From nobody Wed Feb 11 03:41:58 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9931F1A316A for ; Mon, 5 May 2025 11:39:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746445188; cv=none; b=WmXu2c9HKO1vEzqk10JeYbzonyl6/3K8znmUSQpe8YofgzO7/IWRBcNOpQ3hH7oQam4juZkRmGTSRAjoi3JsfNDQr1oD6jrWLNqcgZZjSk2tdb8LmLbCiglD7vz79OJxqdEcvcL+7W/++tL+nI+vdSUpgh29gnNd82TFwIPCgFk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746445188; c=relaxed/simple; bh=4bKLvDsMPtH7EF9AXDSmtoiw8jurLha7GghprHG3BvM=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=H/MQndwX9FDCuvsft3nQV0WYrGeyuejfXuPII8/JWigsxcErpybMV30G+dcTqF3UvMhZTlCkwrREv/SFSsQtS51RfaYxPX6RrjhzZqV9pHuhiBV09iESTLMYR3N2Tu67t/4KYITrStSlRKtgBI9HW/v5VPQ5FJg4vqVJB8nG9kQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=TN6+LJud; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="TN6+LJud" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-43ede096d73so25201645e9.2 for ; Mon, 05 May 2025 04:39:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1746445184; x=1747049984; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=mJ5GcmEYYVhQR96gxyM5WKIfvUizOn+pM0wiDy3cDmQ=; b=TN6+LJud85Ylkf8tXRdSjuWZCMG+R80wAhlGd9Q9RRCjzeuZ1s/C3xpVXpkxYUvuFK iJL9DH7KK987kWAtrQ+TtJj9lyQCOmih7JRBjdHUFIVJUQ42MZw6/LD2cWqInT1jdXEB D3BB1OH3mOUmnD6+aj2OXUJEYhwpm2kogzQZofcHWAlpkmo6czoYn0R0I+K6AoXmUlTC +IJX5eQIg5a6iNe0faQkR2/xHOkPadnevNuQ+I3E7Nj/OnSltEapQ0+mscncGe1kHUtc xF3dnT+u7bg/K1eMpMTbm0sEQ7caHL6OxU6t/sqV7QmwwMXZcifcXQudScPqmTKqCIjZ M1yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746445184; x=1747049984; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=mJ5GcmEYYVhQR96gxyM5WKIfvUizOn+pM0wiDy3cDmQ=; b=h393lq+SwXvWg51IHPoaXi4hQN4pJsx5PugJFrtB96Essfg7jJrWdkLMRrVeMxTil6 WiXmd5FOsI1ODf9yiqYBnfRW+Wk/bFHKDnwd0hjfw6KpQvWWAeEVi9bKdmuehWu+4EBv hSw/PoXJ416+kQfWbKBiCUJlBmjcItjGVTh3hURSrSAyNBhUKEvooYsrqC/LskVDwJG8 vd+wR1Beb1Z0FxcUiA9q+UNp81R2DkkE7Dv4+3R7QN5zWxzYdEaZ4qJK2M2dSq9Bv+Np Ur1T0GLgYZuLB2z36WXeFtXyHFFIX9bNuCKTZ0D3bsz2IuXe5KAjewWgNWeuUFp/dNeS 3iHw== X-Forwarded-Encrypted: i=1; AJvYcCVY66iag/EuCE1H52Hl4k7Uj3OPlYzUdhnXHXEPVVZdDfBEVwo0aF6KdU8ifuJ2/ZMYulq/NHdGD3iqIIs=@vger.kernel.org X-Gm-Message-State: AOJu0Yx6SdTC9IxfQ4zvv1c+Lb8r1A8PHA1TaugVr/7vECUn4NcK4o5Q eLWy3LW5jw6jmxTCDuaQYoRaoz+YHVC+SMyY2Lwqjl7b5mIXucWBqVKLl0EnA7I= X-Gm-Gg: ASbGnctL5C74Gov80K9ZatDvHNg2Fmi3oHHZ3giroVM8fqDswZ9PY1eYXCZflnit8b+ DlPR5TkNDmbbybc0D1g1opyCJe+5hCKbJwdN1+vEc1DilRWuXnGnuO5cPzNmyxiID8HWHp+z8mF gxIvYIyG790GXrmtm3RvIrtMv9heAveclmIRyZ0L0gG72SjsyRxV4A8FZbqNXaM/HnR5ZEPJsMu h2JKIHof9ZSDe5+VHnnbhzf6dH3AhAMqQsc/ORGu7aU8xj2nGqp9vdMuqPOvt6SG94qKkH7NyGl TJ26mNKVDeEYCyqFZBKdZLF1+U2gssJyenegMP0eLY/10g== X-Google-Smtp-Source: AGHT+IF691cbKdNi4eo7oEzfSp9l49WgI8HMTDJbfgYt7c7D7g1nuGGELzTh8vYSZBETmpZ7y7TCVA== X-Received: by 2002:a05:600c:500b:b0:43c:f050:fed3 with SMTP id 5b1f17b1804b1-441c48bdfb7mr51792235e9.11.1746445183903; Mon, 05 May 2025 04:39:43 -0700 (PDT) Received: from localhost ([196.207.164.177]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-441b89ee37dsm129618395e9.22.2025.05.05.04.39.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 04:39:43 -0700 (PDT) Date: Mon, 5 May 2025 14:39:35 +0300 From: Dan Carpenter To: Sudeep Holla Cc: Cristian Marussi , Linus Walleij , arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC 7/7] pinctrl-scmi: remove unused struct member Message-ID: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The ->nr_pins is not used so delete that. Signed-off-by: Dan Carpenter --- drivers/pinctrl/pinctrl-scmi.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/pinctrl/pinctrl-scmi.c b/drivers/pinctrl/pinctrl-scmi.c index 40b432aa4756..d1f3c126c3cb 100644 --- a/drivers/pinctrl/pinctrl-scmi.c +++ b/drivers/pinctrl/pinctrl-scmi.c @@ -45,7 +45,6 @@ struct scmi_pinctrl { struct pinfunction *functions; unsigned int nr_functions; struct pinctrl_pin_desc *pins; - unsigned int nr_pins; struct gpio_chip *gc; }; =20 --=20 2.47.2