From nobody Sat Jul 25 23:03:45 2026 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (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 178203672B2 for ; Sun, 12 Jul 2026 02:13:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822382; cv=none; b=QVCnZ50FzwtU1wM2M45q76AW4yCrQx3yC+cpGrLfRvytPy7RjqTcAZ0wAD21XzARjnDVu24RFsnJPLWNEBk1NtkpC0SYWLIxbAwt1r0t3PxqVqFJciMJetWvoOPPTUanDkcL50OG6QBkGyIOczSqukHcQKCCUAoxCqoJunegKXM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822382; c=relaxed/simple; bh=inHrGenU9l5rc/MsDfy36HBy3TFchQ5sRRxPsmZvATI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sYa+gbCSTHCDfbT0xeFDGoqg/SIAIDtuC2sb/Js+EFDCZIzYoTl4W/EYBVcQzxsMjOA3CTA5l6uurQ7MumujwHkLpZ4z66X+1potlL48mjpxt0IO/4OtTkROXoFzY6/H7BOQRHK+Dq8py6Vb0dlvNsxpIDiiHnqP+or2XSeKNm8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VepO+Y3F; arc=none smtp.client-ip=209.85.216.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VepO+Y3F" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-3847e8b0f3aso1820528a91.3 for ; Sat, 11 Jul 2026 19:13:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783822380; x=1784427180; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=GPnxdbYjtS3rIw4TZCTR8RjPhBMqf8pgHE5GaqnnX44=; b=VepO+Y3Fe8JWUxzFuZPAdI/3Kw+5kgRcrc3ZliQuUTCjrXq7ESI0JDPc05uROO4Run ykUFBvNE37uhSqkCd6VIbu3BrqVdnlw18dUv3+pWRTrPOGdrwCf9l28Mx9tIlVgtEw3w dThDLF3fC1MQYeETky+f1RiEzCo7mKLXOqehz3PGeWLiLeiZdMLw6idI/jW9sfa3X1xf orq/kMygT330gQ5LmFrHtIbHDysqqbkJji3DpMr1FBEwS0+VtkNoJt2fwkxSTztFTicr 9WXxDhYfyPGtCQXKmp9oS8bolzd4a5tCyHOtW1lS0K23HAkyBDXn+z7Qii2NAXI0VUnz Pbtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783822380; x=1784427180; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=GPnxdbYjtS3rIw4TZCTR8RjPhBMqf8pgHE5GaqnnX44=; b=nwhqDFmjBBU1LKm+kBG6hmfgY57i5COubectNsclBJEts6WyOqYju1nqFpWixqCEp0 dCr+MFJQjsRx8IQe4J9cn53Podm+mP6lDjKL35v2LqySmkZaUpAeQqwmCSS+RT+F+r3W X9Hy1OHq6uP9aILuQyN5TZp3hGQg1YQ0OIFMCxn35kVgWzGglAhMKAhyLxzOEdkfgp/q vMCZfGWNGyyF0eqZT78jnMSgvaAYe2CAD/T8+PdnfQjWJWZ48wHmxBN1wwIjSCPpkz6X u0bywosP6H1OvPjVupG697tZlboZl894VYCefAhorCwihfx0mj9b5hCD1o1ykv+sKcR2 xNaw== X-Forwarded-Encrypted: i=1; AHgh+RqDikkSFBjVeMPrIl7v0VobTTwu8h+Z/yza32TnX7gAOv19ADQrzRqYategFDbFO0itFGlfSHwMkGPb2CM=@vger.kernel.org X-Gm-Message-State: AOJu0Yz+zDVJW8k+AwVJpDJSYwJkaB9C5IxhUEiHvUd28jH5i5NvVKCo ln/Wr8rMMPxFD3irW3gqBFpxQjPocv7EtVy9cO1WEoS0C5bEoi9zcy8k X-Gm-Gg: AfdE7cnQrURvlp0zZ8MFp8LOB5Irna98gGiJinI/Kf14sozCrJzWq+ZT+qkIwPw/Qfl htlfsxoYfkJwaURD8XRWuLwS4ZlsELCRN3Yv1KXSonPC3m33rauQVqXqhsmqt18+4no7/ZrarAq IITYIwLc0r/QfwG3UqvCrJp5tIYbtN2v+hKf5BzSs7H1bdauEI0BPM44RY2KIorbdZfRMu9IMdk yUU3sZDsBI2nd049dGX3XEG1oSCb3T8y9lPwAmD/mqn3MjCfSz5drYcI5ROfs3jEtvPoLP3rXp1 W8gAsUdHuSiDHgqPyOACnfu2kRG0BO09QQTFfB0k7u7FmNBFMxKnnjQek8c43iBxPI5VCcmzpuj sXi49XH4zWcdV0WN/SHBQgJZytw/hxNKUurBwvAtN5U7PwjX7LUzEguDNkzkA4L1Q3cjpcQxnlV cExc91gZaEh+c8Df+5oZqhXfvY37/DlmWzkVbM3ugGWqN9EtocoXkYQ9V73sTGh56bK5tRJJs2s Wo= X-Received: by 2002:a17:90b:28d0:b0:381:a766:efcc with SMTP id 98e67ed59e1d1-38dc75d1e58mr4349557a91.14.1783822380321; Sat, 11 Jul 2026 19:13:00 -0700 (PDT) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:c63e:9756:a95c:c75]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3117d847e17sm54796692eec.18.2026.07.11.19.12.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 19:12:59 -0700 (PDT) From: Dmitry Torokhov Date: Sat, 11 Jul 2026 19:12:42 -0700 Subject: [PATCH v3 01/10] dt-bindings: input: samsung,s3c6410-keypad: introduce compact binding Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-samsung-kp-v3-1-b2fcaba77aff@gmail.com> References: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> In-Reply-To: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peter Griffin , Alim Akhtar , Russell King , Mark Brown , Linus Walleij , Charles Keepax , Sam Protsenko , Arnd Bergmann , Bartosz Golaszewski Cc: Krzysztof Kozlowski , linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, patches@opensource.cirrus.com, Conor Dooley , Bartosz Golaszewski X-Mailer: b4 0.16-dev-b242f The binding with a sub-node per each key is very verbose and is hard to use with static device properties. Allow standard matrix keymap binding in addition to the verbose one. Acked-by: Conor Dooley Acked-by: Bartosz Golaszewski Reviewed-by: Linus Walleij Signed-off-by: Dmitry Torokhov --- .../bindings/input/samsung,s3c6410-keypad.yaml | 53 ++++++++++++++++++= ++-- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/input/samsung,s3c6410-keypad= .yaml b/Documentation/devicetree/bindings/input/samsung,s3c6410-keypad.yaml index a53569aa0ee7..2498c62444a1 100644 --- a/Documentation/devicetree/bindings/input/samsung,s3c6410-keypad.yaml +++ b/Documentation/devicetree/bindings/input/samsung,s3c6410-keypad.yaml @@ -37,6 +37,10 @@ properties: =20 wakeup-source: true =20 + keypad,num-columns: true + keypad,num-rows: true + linux,keymap: true + linux,input-no-autorepeat: type: boolean description: @@ -81,12 +85,33 @@ patternProperties: - keypad,row - linux,code =20 +dependencies: + linux,keymap: [ "keypad,num-columns", "keypad,num-rows" ] + required: - compatible - reg - interrupts - - samsung,keypad-num-columns - - samsung,keypad-num-rows + +allOf: + - $ref: input.yaml# + - $ref: matrix-keymap.yaml# + - if: + required: + - linux,keymap + then: + properties: + samsung,keypad-num-columns: false + samsung,keypad-num-rows: false + patternProperties: + '^key-[0-9a-z]+$': false + else: + properties: + keypad,num-columns: false + keypad,num-rows: false + required: + - samsung,keypad-num-columns + - samsung,keypad-num-rows =20 additionalProperties: false =20 @@ -94,8 +119,9 @@ examples: - | #include #include + #include =20 - keypad@100a0000 { + keypad1@100a0000 { compatible =3D "samsung,s5pv210-keypad"; reg =3D <0x100a0000 0x100>; interrupts =3D ; @@ -119,3 +145,24 @@ examples: linux,code =3D <3>; }; }; + - | + #include + #include + #include + + keypad2@100a0000 { + compatible =3D "samsung,s5pv210-keypad"; + reg =3D <0x100a0000 0x100>; + interrupts =3D ; + clocks =3D <&clock CLK_KEYIF>; + clock-names =3D "keypad"; + + keypad,num-rows =3D <2>; + keypad,num-columns =3D <8>; + linux,keymap =3D < + MATRIX_KEY(0, 3, 2) + MATRIX_KEY(0, 4, 3) + >; + linux,input-no-autorepeat; + wakeup-source; + }; --=20 2.55.0.795.g602f6c329a-goog From nobody Sat Jul 25 23:03:45 2026 Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.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 8C232367293 for ; Sun, 12 Jul 2026 02:13:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822385; cv=none; b=dHh21i5I1S708YwQZniTEW4cekmezOPiZYHHPntYo6p2QNyV9Oyel6DyXOVzq2o2a2dUgNTeeLKXpiU8ukx7uOSiitNeg3otH8K3si2FBDSH9mU5rQIAXhW3qs0xlqyYwpfpLAGk/ySD9eHsFZ53AqR0HsEJtcTcHVT9Jv9jx78= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822385; c=relaxed/simple; bh=Fg2KtAXDCXXyltSoF8WHknhmYOpPlfFwduvTzcAsQoY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tUljSR+OjhZ4KtLahvr8muE/pdowOx2iy1MWXVSkZ337cEweRGLFsNVUk2YgRs+wWojTXIxD7RIMsqhKf9nQXZ2Zxjx+Wns51ThHlZphZZ4PGYDt298vinOzl7EIU2hjsTuj/OGlowYGjXWPEL01l5yFVLwJU+APYdLpQs+vrDY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=PAF/kEkJ; arc=none smtp.client-ip=209.85.216.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PAF/kEkJ" Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-37df72c9984so3671351a91.3 for ; Sat, 11 Jul 2026 19:13:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783822383; x=1784427183; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=JKukckWpY+orPNsziCIsLI7E7zxitxT1NiWuLx/R2I4=; b=PAF/kEkJnwurFstloIClJLTZVjQ02VAMtSU8vtyjucVKlgAaYTNVPhwVI5udfBUah3 l8GrzBMpKWeTpjn+9GJYhwLy+pJus1kTX3H+p4L6pEv54klxINi9M3i2mpaN3VyWY2np FtTg/A8gRte6hUPXemZ9m8Vs7fwoYW0iUEFddU3b8c+JXmi/MehDeagi+yqXptUiX23M G6gHJnwVyqUZwi5uHAK5AThXpm+O7e5AuxuqgPAlcKq6U9YEvZ/WP6SOzv+iDMQ3Oxxw dxd2rF4cVF7qcxU8GBrLZduu8QRdSHOv4IWaMiQxIM1fugKmaolXDi64gnEmpg9r8k+C e9NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783822383; x=1784427183; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=JKukckWpY+orPNsziCIsLI7E7zxitxT1NiWuLx/R2I4=; b=euUUoZNcWNfswXfpcfk0VO0EB7O3yDEak0Wsj/HhIdSYaE5jtpVrB1N+ivqOIuFKRt nN2eWKo1F7ONZ5pQS971TDSDsf65rUClokev4QHDbIZX0eIqWAdMi5XMPJ6z6/N7x2Gn KT+QCkzB+KDh62GwW6K703dsZdv7dqnxFN0ZvDwaaJ6SpAeuT4W5Pgvq8WGThEL/iD6G HQIpjZmNnXu05aQqT79MHPoAH4UyDoKGCWt2JYsPrjFu9PydoCWEuvuxEXrXLWr4SJFH Qef1LKkDbziqFqe7l/ufIzKKTGAGRAk4FdB0ztn8Myzcbg8rTp+ty+QN1nRUsliCZd8K 3K1w== X-Forwarded-Encrypted: i=1; AHgh+RoB600mcRQOGdIzvEfBbUNO5li5U79Lx5+FSVeG/f4UBWPxXU1kGYB+rsx+6YtDg80ofMLuy2bvKrjAOz4=@vger.kernel.org X-Gm-Message-State: AOJu0Yx1gLmPfnZ/wp9tjNYdEJR8xQDYEXq45qbxCv+WtuNSwhVWSaff Om7dz92nh9pZLpw17tjGNloJmV9FkBp52AnxTUFGurMc/A6gI7P13Far X-Gm-Gg: AfdE7cmU1J5rwAzViRfda7Jl3HrHoNnpN/GzBfmYsmRdAWFMUU4/FgEU+9684vxNJfm Tr5du/M29ZPMS3PaZjthVk6N37C9DeLLWm2GxjI5lJjdb8G6cOhQFpcFs7GKAZ8GixXu67HJ1fu LMHp8UzLXso6YxftzG8R0X5rNEqL/1ovz0jTRZcMFNqmxh2PKArDEZYe8XGoVlo/PXXhGELQETI pyKkSWqMX2gMUTxOr3ySSL9xeoTO0bgS1SAhrdJvHUIDo6wBFGk33JO+RsrQHUCwQ/g+iX8bbNH BMtGiY5nImIHwTNIDvaSFJxUFr0WD4Yx2V9k2hm0nwvDU5T3td7imR/9Ro0RJoWMBEW2g2ujNCG pVAhIP+P0Ty2gWuvlippBlxRygHrmEPAI3S8yi/JvcnR4o1ZbihLMtAO5D4xL/C1mc/S7YsdBGq FggO3e5lO6u3Y7IZHyqCwNXxL4RgLRepR/WZazaaxe+EEI9RkRLEnZVTddnj0Fqa1bwMUa2VxsY qI= X-Received: by 2002:a17:90a:e7c9:b0:387:e0cb:7f7 with SMTP id 98e67ed59e1d1-38dc784ae88mr4308970a91.43.1783822382978; Sat, 11 Jul 2026 19:13:02 -0700 (PDT) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:c63e:9756:a95c:c75]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3117d847e17sm54796692eec.18.2026.07.11.19.13.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 19:13:01 -0700 (PDT) From: Dmitry Torokhov Date: Sat, 11 Jul 2026 19:12:43 -0700 Subject: [PATCH v3 02/10] Input: samsung-keypad - handle compact binding Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-samsung-kp-v3-2-b2fcaba77aff@gmail.com> References: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> In-Reply-To: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peter Griffin , Alim Akhtar , Russell King , Mark Brown , Linus Walleij , Charles Keepax , Sam Protsenko , Arnd Bergmann , Bartosz Golaszewski Cc: Krzysztof Kozlowski , linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, patches@opensource.cirrus.com, Bartosz Golaszewski X-Mailer: b4 0.16-dev-b242f Add support for standard matrix keymap binding (in addition to the existing verbose binding with a sub-node for each key). This will allow easier conversions from platform data to device properties when using static device properties. Acked-by: Bartosz Golaszewski Assisted-by: Antigravity:gemini-3.5-flash Signed-off-by: Dmitry Torokhov --- drivers/input/keyboard/samsung-keypad.c | 134 +++++++++++++++++-----------= ---- 1 file changed, 71 insertions(+), 63 deletions(-) diff --git a/drivers/input/keyboard/samsung-keypad.c b/drivers/input/keyboa= rd/samsung-keypad.c index 17127269e3f0..cc34f0146161 100644 --- a/drivers/input/keyboard/samsung-keypad.c +++ b/drivers/input/keyboard/samsung-keypad.c @@ -231,83 +231,89 @@ static void samsung_keypad_close(struct input_dev *in= put_dev) samsung_keypad_stop(keypad); } =20 -#ifdef CONFIG_OF -static struct samsung_keypad_platdata * -samsung_keypad_parse_dt(struct device *dev) +static const struct matrix_keymap_data * +samsung_parse_verbose_keymap(struct device *dev) { - struct samsung_keypad_platdata *pdata; struct matrix_keymap_data *keymap_data; - uint32_t *keymap, num_rows =3D 0, num_cols =3D 0; - struct device_node *np =3D dev->of_node, *key_np; + struct fwnode_handle *child; + u32 *keymap; unsigned int key_count; =20 - if (!np) { - dev_err(dev, "missing device tree data\n"); - return ERR_PTR(-EINVAL); + keymap_data =3D devm_kzalloc(dev, sizeof(*keymap_data), GFP_KERNEL); + if (!keymap_data) + return ERR_PTR(-ENOMEM); + + key_count =3D device_get_child_node_count(dev); + keymap =3D devm_kcalloc(dev, key_count, sizeof(*keymap), GFP_KERNEL); + if (!keymap) + return ERR_PTR(-ENOMEM); + + keymap_data->keymap_size =3D key_count; + keymap_data->keymap =3D keymap; + + device_for_each_child_node(dev, child) { + u32 row, col, key_code; + + fwnode_property_read_u32(child, "keypad,row", &row); + fwnode_property_read_u32(child, "keypad,column", &col); + fwnode_property_read_u32(child, "linux,code", &key_code); + + *keymap++ =3D KEY(row, col, key_code); } =20 + return keymap_data; +} + +static const struct samsung_keypad_platdata * +samsung_keypad_parse_properties(struct device *dev) +{ + const struct matrix_keymap_data *keymap_data; + struct samsung_keypad_platdata *pdata; + u32 num_rows =3D 0, num_cols =3D 0; + int error; + pdata =3D devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); - if (!pdata) { - dev_err(dev, "could not allocate memory for platform data\n"); + if (!pdata) return ERR_PTR(-ENOMEM); - } =20 - of_property_read_u32(np, "samsung,keypad-num-rows", &num_rows); - of_property_read_u32(np, "samsung,keypad-num-columns", &num_cols); - if (!num_rows || !num_cols) { - dev_err(dev, "number of keypad rows/columns not specified\n"); - return ERR_PTR(-EINVAL); + if (device_property_present(dev, "linux,keymap")) { + error =3D matrix_keypad_parse_properties(dev, &num_rows, &num_cols); + if (error) + return ERR_PTR(error); + } else { + device_property_read_u32(dev, "samsung,keypad-num-rows", &num_rows); + device_property_read_u32(dev, "samsung,keypad-num-columns", &num_cols); + if (!num_rows || !num_cols) { + dev_err(dev, "number of keypad rows/columns not specified\n"); + return ERR_PTR(-EINVAL); + } } + pdata->rows =3D num_rows; pdata->cols =3D num_cols; =20 - keymap_data =3D devm_kzalloc(dev, sizeof(*keymap_data), GFP_KERNEL); - if (!keymap_data) { - dev_err(dev, "could not allocate memory for keymap data\n"); - return ERR_PTR(-ENOMEM); - } - pdata->keymap_data =3D keymap_data; + if (!device_property_present(dev, "linux,keymap")) { + keymap_data =3D samsung_parse_verbose_keymap(dev); + if (IS_ERR(keymap_data)) + return ERR_CAST(keymap_data); =20 - key_count =3D of_get_child_count(np); - keymap_data->keymap_size =3D key_count; - keymap =3D devm_kcalloc(dev, key_count, sizeof(uint32_t), GFP_KERNEL); - if (!keymap) { - dev_err(dev, "could not allocate memory for keymap\n"); - return ERR_PTR(-ENOMEM); + pdata->keymap_data =3D keymap_data; } - keymap_data->keymap =3D keymap; =20 - for_each_child_of_node(np, key_np) { - u32 row, col, key_code; - of_property_read_u32(key_np, "keypad,row", &row); - of_property_read_u32(key_np, "keypad,column", &col); - of_property_read_u32(key_np, "linux,code", &key_code); - *keymap++ =3D KEY(row, col, key_code); - } =20 - pdata->no_autorepeat =3D of_property_read_bool(np, "linux,input-no-autore= peat"); + pdata->no_autorepeat =3D + device_property_read_bool(dev, "linux,input-no-autorepeat"); =20 - pdata->wakeup =3D of_property_read_bool(np, "wakeup-source") || + pdata->wakeup =3D device_property_read_bool(dev, "wakeup-source") || /* legacy name */ - of_property_read_bool(np, "linux,input-wakeup"); - + device_property_read_bool(dev, "linux,input-wakeup"); =20 return pdata; } -#else -static struct samsung_keypad_platdata * -samsung_keypad_parse_dt(struct device *dev) -{ - dev_err(dev, "no platform data defined\n"); - - return ERR_PTR(-EINVAL); -} -#endif =20 static int samsung_keypad_probe(struct platform_device *pdev) { const struct samsung_keypad_platdata *pdata; - const struct matrix_keymap_data *keymap_data; const struct platform_device_id *id; struct samsung_keypad *keypad; struct resource *res; @@ -316,18 +322,17 @@ static int samsung_keypad_probe(struct platform_devic= e *pdev) int error; =20 pdata =3D dev_get_platdata(&pdev->dev); - if (!pdata) { - pdata =3D samsung_keypad_parse_dt(&pdev->dev); + if (pdata) { + if (!pdata->keymap_data) { + dev_err(&pdev->dev, "no keymap data defined\n"); + return -EINVAL; + } + } else { + pdata =3D samsung_keypad_parse_properties(&pdev->dev); if (IS_ERR(pdata)) return PTR_ERR(pdata); } =20 - keymap_data =3D pdata->keymap_data; - if (!keymap_data) { - dev_err(&pdev->dev, "no keymap data defined\n"); - return -EINVAL; - } - if (!pdata->rows || pdata->rows > SAMSUNG_MAX_ROWS) return -EINVAL; =20 @@ -391,7 +396,7 @@ static int samsung_keypad_probe(struct platform_device = *pdev) input_dev->open =3D samsung_keypad_open; input_dev->close =3D samsung_keypad_close; =20 - error =3D matrix_keypad_build_keymap(keymap_data, NULL, + error =3D matrix_keypad_build_keymap(pdata->keymap_data, NULL, pdata->rows, pdata->cols, keypad->keycodes, input_dev); if (error) { @@ -430,11 +435,14 @@ static int samsung_keypad_probe(struct platform_devic= e *pdev) if (error) return error; =20 - if (pdev->dev.of_node) { - devm_kfree(&pdev->dev, (void *)pdata->keymap_data->keymap); - devm_kfree(&pdev->dev, (void *)pdata->keymap_data); + if (!dev_get_platdata(&pdev->dev)) { + if (pdata->keymap_data) { + devm_kfree(&pdev->dev, (void *)pdata->keymap_data->keymap); + devm_kfree(&pdev->dev, (void *)pdata->keymap_data); + } devm_kfree(&pdev->dev, (void *)pdata); } + return 0; } =20 --=20 2.55.0.795.g602f6c329a-goog From nobody Sat Jul 25 23:03:45 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.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 C4638366831 for ; Sun, 12 Jul 2026 02:13:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822387; cv=none; b=uTuFWisEtMU58+2H4pPayFhYrwoJtx5oFNOAPdW60a5gd2ImuzWVHfaT95ROE4OF+HUff59dL9tiwAjq32k8gmwq5Vquj2UrII4icyI9y4WIMTRlQnHzR0h//hkn8IPLajRjM19klM7GNp2ct2yyjlPy7pM3D7PyhumiWnvjsuw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822387; c=relaxed/simple; bh=GE6WrGfyy9P4IMx6v0tVdKrd6b48cdMay86cwwuTjQ4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rUjP4crOSJQd+2MclViK8oI+MvdArNj2jhHwktT7roE4mgHrzZ3hNAyntuX4y+nwrttWuop9ei5tWnqFYTZ7tlNSkINTZckLM8JMasmMb1tAZQNJJaEskVmfLBC1rE4WabG2J7eEu1qb0mlLcX/m51poUx/+YCYhcJefPBKUHt8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=l3d5yAXE; arc=none smtp.client-ip=209.85.216.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="l3d5yAXE" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-381b831d535so2554589a91.0 for ; Sat, 11 Jul 2026 19:13:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783822385; x=1784427185; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=n/De877qrc3LI5SOFOCYuqXrG3akE0R4KYm/cFtv2XA=; b=l3d5yAXEOdoK4Rf5RQZsGeNxFD2OcNxclnTiw6Wf/xQhikng1+0LB7qlbcGd7F0l8Y +cQXK+TjV3+vFYQhRgw5cxXaVS0wcPl2XkhptBS6rgeLaVJrdQ+NmFbFvDEuFEPfRalv ZrCZUAiHjIbWZA8hs12Gw0nNHSH7F2UA5mPlUEiw79RP9ejP1znyAIA4pVaWjUvIc0W0 fdqaTL0ZNYqTJURVWagtS2Zm5w61NIg74vZ9P3jNdN1gqcfvwkufHTJA7nWHHLyDKn/U eyKMz+Xjg6CxJjCmFcmr8CGsYZsJs7uDY3dSkcFvGYthqAxrFaXFTSGPcdfyLRfRbwR4 Pcmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783822385; x=1784427185; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=n/De877qrc3LI5SOFOCYuqXrG3akE0R4KYm/cFtv2XA=; b=sW/9LTz3Bt5dhkzmBZq3nj6Ndlm6KvPpFfRgoBGQdh1vVBexZRZjsr9TeuYUi2muQ4 kl1gu9pkiO2jzO/FvEuQqG9TOgUgrMdRsjksVXwEYD91TWgAFPDnGTAVFHOfjr9Y3avR qLc60KENXryku5QFF42//VtVgo1ocUzYKkgMwday0oGMdtB2ztqGlQOjewvd9SfTLCp1 e6WtnZQlauu8fGbtjSuMolPO5VvTVTO8qf4Hj7hawV5oUxiZI+aGv1swES36pf5Iyjx7 dL87fnYpz7HQAOzr+SYsM0qO0M7279KZNWy636w0CiqJoYL57DSz0jGzeq6+kTafWO4e PR+Q== X-Forwarded-Encrypted: i=1; AHgh+RqjYLDlgcdtkXne8jN60Y5Nf9XqA75BzZlPZljoSjmaset4V2IPN9bDVlyQtY2EQVi5IU+z4Ev8BgDIhdE=@vger.kernel.org X-Gm-Message-State: AOJu0YwYD454yar+t1/IMbM63WcwAaLa7het3hn6pSbqptxcDEXAKNTI qT1y/pCJtlQJBCPEdm2rPgKKaW3vBUJ2mTVNnATEqnMOzNr6iVMP7uSv X-Gm-Gg: AfdE7cmi4P5ikGT5A0xjgD954rGzXa1RToCXf10r/zwfC7LBeZKUNf+WBG2/Cd4U+HH W6j3mYyzASv/BQnXDA4KBAnITgzjEw0ZH3h5MamSUH7X9FRpDU36+V20LkxO/YqflyX2livsYnq CbLGhSiAStxNq2i/47ZazxZ/ymLQ2QaJNtU6OUW/4FnhbCK4vLvXb8NL7DY9tM06+vLK9Txfu30 FVmuvVocdwCv8VQbokUsh2QPkksgQKSXj8wp97B6opQxHu5pgjJll1fFiWpJDHrV8JsqXDIgDQB 1YHO3D9ajnfeDceRVzmYbWXUxw5uS1aNDD8cX3r1b2KweKIxsYfNln+VeJCu0uQ2lnj/DdvJHJp sEUzAp+eC/frcnogtsHZ+MPqOaJpahWBG/Imjw6CM9ZkaktPu0mizcshico+s0Np1RMjNuh3Z+o hfWXnTq3MVrG+7ue5IEdiRzkA0IhX2pFF1D++J/nBAcn8xJ7hF59LH6vo65bQL7gzdbj+/0La6e 7Q= X-Received: by 2002:a17:90b:3908:b0:384:a641:3fe with SMTP id 98e67ed59e1d1-38dc7737215mr4573280a91.21.1783822385166; Sat, 11 Jul 2026 19:13:05 -0700 (PDT) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:c63e:9756:a95c:c75]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3117d847e17sm54796692eec.18.2026.07.11.19.13.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 19:13:04 -0700 (PDT) From: Dmitry Torokhov Date: Sat, 11 Jul 2026 19:12:44 -0700 Subject: [PATCH v3 03/10] ARM: s3c: register and attach software nodes for Samsung gpio_chips Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-samsung-kp-v3-3-b2fcaba77aff@gmail.com> References: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> In-Reply-To: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peter Griffin , Alim Akhtar , Russell King , Mark Brown , Linus Walleij , Charles Keepax , Sam Protsenko , Arnd Bergmann , Bartosz Golaszewski Cc: Krzysztof Kozlowski , linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, patches@opensource.cirrus.com, Bartosz Golaszewski X-Mailer: b4 0.16-dev-b242f Define and register software nodes for the Samsung GPIO chips on legacy (non-DT) platforms. Attach the matching software node to each gpio_chip's fwnode during registration, using the bank label to calculate the index. This provides the infrastructure for converting board files and drivers to use software nodes/properties instead of legacy platform data or GPIO lookup tables. Assisted-by: Antigravity:gemini-3.5-flash Acked-by: Bartosz Golaszewski Reviewed-by: Linus Walleij Signed-off-by: Dmitry Torokhov --- arch/arm/mach-s3c/gpio-core.h | 3 ++ arch/arm/mach-s3c/gpio-samsung-s3c64xx.h | 5 +++ arch/arm/mach-s3c/gpio-samsung.c | 72 ++++++++++++++++++++++++----= ---- 3 files changed, 63 insertions(+), 17 deletions(-) diff --git a/arch/arm/mach-s3c/gpio-core.h b/arch/arm/mach-s3c/gpio-core.h index 6801c85fb9da..464b0d02f102 100644 --- a/arch/arm/mach-s3c/gpio-core.h +++ b/arch/arm/mach-s3c/gpio-core.h @@ -14,6 +14,8 @@ #include "gpio-samsung.h" #include =20 +struct software_node; + #define GPIOCON_OFF (0x00) #define GPIODAT_OFF (0x04) =20 @@ -66,6 +68,7 @@ struct samsung_gpio_cfg; */ struct samsung_gpio_chip { struct gpio_chip chip; + const struct software_node *swnode; struct samsung_gpio_cfg *config; struct samsung_gpio_pm *pm; void __iomem *base; diff --git a/arch/arm/mach-s3c/gpio-samsung-s3c64xx.h b/arch/arm/mach-s3c/g= pio-samsung-s3c64xx.h index 8ed144a0d474..fc21d3f50ce9 100644 --- a/arch/arm/mach-s3c/gpio-samsung-s3c64xx.h +++ b/arch/arm/mach-s3c/gpio-samsung-s3c64xx.h @@ -13,6 +13,8 @@ =20 #ifdef CONFIG_GPIO_SAMSUNG =20 +#include + /* GPIO bank sizes */ #define S3C64XX_GPIO_A_NR (8) #define S3C64XX_GPIO_B_NR (7) @@ -89,6 +91,9 @@ enum s3c_gpio_number { /* define the number of gpios we need to the one after the GPQ() range */ #define GPIO_BOARD_START (S3C64XX_GPQ(S3C64XX_GPIO_Q_NR) + 1) =20 +extern const struct software_node samsung_gpiochip_nodes[]; +#define SAMSUNG_GPIO_NODE(node) (&samsung_gpiochip_nodes[(node) - 'A']) + #endif /* GPIO_SAMSUNG */ #endif /* GPIO_SAMSUNG_S3C64XX_H */ =20 diff --git a/arch/arm/mach-s3c/gpio-samsung.c b/arch/arm/mach-s3c/gpio-sams= ung.c index 81e198e5a6d3..b35cf62a9157 100644 --- a/arch/arm/mach-s3c/gpio-samsung.c +++ b/arch/arm/mach-s3c/gpio-samsung.c @@ -37,6 +37,28 @@ #include "gpio-cfg-helpers.h" #include "pm.h" =20 +const struct software_node samsung_gpiochip_nodes[] =3D { + SOFTWARE_NODE("GPA", NULL, NULL), + SOFTWARE_NODE("GPB", NULL, NULL), + SOFTWARE_NODE("GPC", NULL, NULL), + SOFTWARE_NODE("GPD", NULL, NULL), + SOFTWARE_NODE("GPE", NULL, NULL), + SOFTWARE_NODE("GPF", NULL, NULL), + SOFTWARE_NODE("GPG", NULL, NULL), + SOFTWARE_NODE("GPH", NULL, NULL), + SOFTWARE_NODE("GPI", NULL, NULL), + SOFTWARE_NODE("GPJ", NULL, NULL), + SOFTWARE_NODE("GPK", NULL, NULL), + SOFTWARE_NODE("GPL", NULL, NULL), + SOFTWARE_NODE("GPM", NULL, NULL), + SOFTWARE_NODE("GPN", NULL, NULL), + SOFTWARE_NODE("GPO", NULL, NULL), + SOFTWARE_NODE("GPP", NULL, NULL), + SOFTWARE_NODE("GPQ", NULL, NULL), +}; + +#define NUM_SAMSUNG_GPIOCHIPS ARRAY_SIZE(samsung_gpiochip_nodes) + static int samsung_gpio_setpull_updown(struct samsung_gpio_chip *chip, unsigned int off, samsung_gpio_pull_t pull) { @@ -491,6 +513,16 @@ static __init void s3c_gpiolib_track(struct samsung_gp= io_chip *chip) } #endif /* CONFIG_S3C_GPIO_TRACK */ =20 +static void __init samsung_setup_gpiochip_nodes(void) +{ + const struct software_node *group[NUM_SAMSUNG_GPIOCHIPS + 1] =3D { 0 }; + + for (unsigned int i =3D 0; i < NUM_SAMSUNG_GPIOCHIPS; i++) + group[i] =3D &samsung_gpiochip_nodes[i]; + + software_node_register_node_group(group); +} + /* * samsung_gpiolib_add() - add the Samsung gpio_chip. * @chip: The chip to register @@ -506,12 +538,16 @@ static void __init samsung_gpiolib_add(struct samsung= _gpio_chip *chip) struct gpio_chip *gc =3D &chip->chip; int ret; =20 + gc->label =3D chip->swnode->name; + BUG_ON(!chip->base); BUG_ON(!gc->label); BUG_ON(!gc->ngpio); =20 spin_lock_init(&chip->lock); =20 + gc->fwnode =3D software_node_fwnode(chip->swnode); + if (!gc->direction_input) gc->direction_input =3D samsung_gpiolib_2bit_input; if (!gc->direction_output) @@ -659,49 +695,49 @@ static struct samsung_gpio_chip s3c64xx_gpios_4bit[] = =3D { .chip =3D { .base =3D S3C64XX_GPA(0), .ngpio =3D S3C64XX_GPIO_A_NR, - .label =3D "GPA", }, + .swnode =3D SAMSUNG_GPIO_NODE('A'), }, { .chip =3D { .base =3D S3C64XX_GPB(0), .ngpio =3D S3C64XX_GPIO_B_NR, - .label =3D "GPB", }, + .swnode =3D SAMSUNG_GPIO_NODE('B'), }, { .chip =3D { .base =3D S3C64XX_GPC(0), .ngpio =3D S3C64XX_GPIO_C_NR, - .label =3D "GPC", }, + .swnode =3D SAMSUNG_GPIO_NODE('C'), }, { .chip =3D { .base =3D S3C64XX_GPD(0), .ngpio =3D S3C64XX_GPIO_D_NR, - .label =3D "GPD", }, + .swnode =3D SAMSUNG_GPIO_NODE('D'), }, { .config =3D &samsung_gpio_cfgs[0], .chip =3D { .base =3D S3C64XX_GPE(0), .ngpio =3D S3C64XX_GPIO_E_NR, - .label =3D "GPE", }, + .swnode =3D SAMSUNG_GPIO_NODE('E'), }, { .base =3D S3C64XX_GPG_BASE, .chip =3D { .base =3D S3C64XX_GPG(0), .ngpio =3D S3C64XX_GPIO_G_NR, - .label =3D "GPG", }, + .swnode =3D SAMSUNG_GPIO_NODE('G'), }, { .base =3D S3C64XX_GPM_BASE, .config =3D &samsung_gpio_cfgs[1], .chip =3D { .base =3D S3C64XX_GPM(0), .ngpio =3D S3C64XX_GPIO_M_NR, - .label =3D "GPM", .to_irq =3D s3c64xx_gpiolib_mbank_to_irq, }, + .swnode =3D SAMSUNG_GPIO_NODE('M'), }, }; =20 @@ -711,25 +747,25 @@ static struct samsung_gpio_chip s3c64xx_gpios_4bit2[]= =3D { .chip =3D { .base =3D S3C64XX_GPH(0), .ngpio =3D S3C64XX_GPIO_H_NR, - .label =3D "GPH", }, + .swnode =3D SAMSUNG_GPIO_NODE('H'), }, { .base =3D S3C64XX_GPK_BASE + 0x4, .config =3D &samsung_gpio_cfgs[0], .chip =3D { .base =3D S3C64XX_GPK(0), .ngpio =3D S3C64XX_GPIO_K_NR, - .label =3D "GPK", }, + .swnode =3D SAMSUNG_GPIO_NODE('K'), }, { .base =3D S3C64XX_GPL_BASE + 0x4, .config =3D &samsung_gpio_cfgs[1], .chip =3D { .base =3D S3C64XX_GPL(0), .ngpio =3D S3C64XX_GPIO_L_NR, - .label =3D "GPL", .to_irq =3D s3c64xx_gpiolib_lbank_to_irq, }, + .swnode =3D SAMSUNG_GPIO_NODE('L'), }, }; =20 @@ -740,43 +776,43 @@ static struct samsung_gpio_chip s3c64xx_gpios_2bit[] = =3D { .chip =3D { .base =3D S3C64XX_GPF(0), .ngpio =3D S3C64XX_GPIO_F_NR, - .label =3D "GPF", }, + .swnode =3D SAMSUNG_GPIO_NODE('F'), }, { .config =3D &samsung_gpio_cfgs[7], .chip =3D { .base =3D S3C64XX_GPI(0), .ngpio =3D S3C64XX_GPIO_I_NR, - .label =3D "GPI", }, + .swnode =3D SAMSUNG_GPIO_NODE('I'), }, { .config =3D &samsung_gpio_cfgs[7], .chip =3D { .base =3D S3C64XX_GPJ(0), .ngpio =3D S3C64XX_GPIO_J_NR, - .label =3D "GPJ", }, + .swnode =3D SAMSUNG_GPIO_NODE('J'), }, { .config =3D &samsung_gpio_cfgs[6], .chip =3D { .base =3D S3C64XX_GPO(0), .ngpio =3D S3C64XX_GPIO_O_NR, - .label =3D "GPO", }, + .swnode =3D SAMSUNG_GPIO_NODE('O'), }, { .config =3D &samsung_gpio_cfgs[6], .chip =3D { .base =3D S3C64XX_GPP(0), .ngpio =3D S3C64XX_GPIO_P_NR, - .label =3D "GPP", }, + .swnode =3D SAMSUNG_GPIO_NODE('P'), }, { .config =3D &samsung_gpio_cfgs[6], .chip =3D { .base =3D S3C64XX_GPQ(0), .ngpio =3D S3C64XX_GPIO_Q_NR, - .label =3D "GPQ", }, + .swnode =3D SAMSUNG_GPIO_NODE('Q'), }, { .base =3D S3C64XX_GPN_BASE, .irq_base =3D IRQ_EINT(0), @@ -784,9 +820,9 @@ static struct samsung_gpio_chip s3c64xx_gpios_2bit[] = =3D { .chip =3D { .base =3D S3C64XX_GPN(0), .ngpio =3D S3C64XX_GPIO_N_NR, - .label =3D "GPN", .to_irq =3D samsung_gpiolib_to_irq, }, + .swnode =3D SAMSUNG_GPIO_NODE('N'), }, }; =20 @@ -803,6 +839,8 @@ static __init int samsung_gpiolib_init(void) return 0; =20 if (soc_is_s3c64xx()) { + samsung_setup_gpiochip_nodes(); + samsung_gpiolib_set_cfg(samsung_gpio_cfgs, ARRAY_SIZE(samsung_gpio_cfgs)); samsung_gpiolib_add_2bit_chips(s3c64xx_gpios_2bit, --=20 2.55.0.795.g602f6c329a-goog From nobody Sat Jul 25 23:03:45 2026 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (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 D7906367B7B for ; Sun, 12 Jul 2026 02:13:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822393; cv=none; b=lPOrsNZgUWdvWhB98MdZFmArdPUMz7EDvNES/sAvl5iXI2cTC6LKbFzi1XLzYyPqV7jAJcl938so7/z90nFV2dypMl0g0nHNnCakiafXpsDyYTY0V9MVdRNcg6q3HOqUsOK273nPLajGMrWQ0Gp7k4laEiocjC30uBIfTlhiusM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822393; c=relaxed/simple; bh=MbHlbYKPDPXngEv5b2cf7bYHnBjY1dG/nTATjVUAvcY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SSbnATx8Tfwcn+K7VgRUVlcoymhhvDkT1yyxmXf/rbQSMDXO4Jpgrq4pjJCN3Q4WL+wHQ0H2Jw2AhBIy1PidxOMWvEK/Hj0dYhiyLT2C0Z1yQYio5gPUXie952rsTQADp7r2097K41T2TZhi/gbVPztxayZ/WPSZuqK26r/nD5w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=IckXT8aQ; arc=none smtp.client-ip=209.85.216.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IckXT8aQ" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-381ed661712so2550273a91.2 for ; Sat, 11 Jul 2026 19:13:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783822387; x=1784427187; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=gQ4PU66CTnBXQAzr6PHBDQyKEYKs9ioZmr93h8ngf+E=; b=IckXT8aQImmqrso9oMx61C2RjvuLXJwQ7XqMOcAakT97vVobu5muRvNsYjAq1LiLOT MM2jQpk/8Y2gGt1MjD3VjbwDADaJFBNmBxiDObBwyGyNR/01RbDKxOPexSAJVrmjuLWJ JCbkSlIYNJW7McIxypquyS2NmAQVBEyX5zJgcwqx4q7w3zHsbGz/jK7ha22mXXuEdwE2 agHx3bQt9+W4XQsBxm9LIn37LfnZBbwl3IDa6mIh/hcNgnHQyjxp2J36I94QaZAxJna0 tIBMDUkHlp22U88fCKtkKjQDqbSoLHyVBQO7gV21hldHN/U9ocGp+mLTBgD/9wc7JoOk rf2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783822387; x=1784427187; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=gQ4PU66CTnBXQAzr6PHBDQyKEYKs9ioZmr93h8ngf+E=; b=GTBQe9J3dBtrX+Ui2vWg+XGDypmKitzqyH6+9limpbrw+fUmAhsgbhgzWRYyEZZ/pD vMj7cuyHA7Dwi6VZVMCNT3DH7OlP49OLr3B7i+a/dhdSjkdcI3eALb75qhcuJs2tc5kq mqqdPYPB6/SmBBpg8d6vCn5NUwNHB1i4K81HesL//UrYDaN4Pc0x3in2Y8hdRkgj+Kn8 MsxkMhVeP8zZwI+3uF7PGLTBY6yi32Mv+mgpcCd7N7J+wDrikEoL2tS9AXEeKEH06MPG PbO5TK81SnV30Tn8pjsOhkpmjklFZz1APXR596S3sMe3LEP+U305HUeTbuRcUiV6tdho s4jg== X-Forwarded-Encrypted: i=1; AHgh+RqavaoCjN0CGg1WhVrJre+vrO10KqRoc8iUUcgNv0pbOHHqkTp0H1+1oBM4dmGOSe7b43GpJbI9whVtgmU=@vger.kernel.org X-Gm-Message-State: AOJu0Yxl1wZRhji65JPUavxiZEmXy7DZHfRZYEB/c46WoYTM6CrpFYYw npkzjqzjxpL11K/V8PYqIGlE53JfJBAPc7C0GrqdTfxSCDNzXen/cnJj X-Gm-Gg: AfdE7cln/AlqEvRKJH7A9hNKvggEBmC+ZcmiWDZznaoStGdNoZJu5WHxmmNMO6N9ABJ 4JBbraljEyEFGzvNBAYYgHXdO0tJ4ppaKtX5AmjOsDqkcUzdD5xkX4jJN1Bz20eES1u6aLD4t11 5S0XbvW0F5UJuh761wb4QKNkkw0WSBRCr6kCREDCLrCey0I2xe+Ip4e3c2mVD6P37UDqnahDLPy 5qoLxGaLCY/wUcLr7qEVHGUJYskUIdSymR3UsFp/l1OA99YqJmUtEv9OWctc3o8rMNgCIrcowEE v3Qcr+kAQyWYTuRPiAgVhxoIyYRpowTq+1BijQf4A4JINyoq5Dbueo/xQDNKyLLQAaey3fOr0hl 9bG5TFtktjB80ReBrTU4WMMevKeu0TZNg9MVFCaaECv/AcVEvz3dMdkuZmOGWZeccuzZ/Hrk1ss cFM7etqLA/prmZPkkwl6DRpGDwmLBGcwjbXqcBxA7fOym9qXxuunLDf8zxzTUJqfwZsqVC8BV18 14= X-Received: by 2002:a17:90b:5343:b0:37f:9ce1:7369 with SMTP id 98e67ed59e1d1-38dc777486cmr4384818a91.31.1783822387067; Sat, 11 Jul 2026 19:13:07 -0700 (PDT) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:c63e:9756:a95c:c75]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3117d847e17sm54796692eec.18.2026.07.11.19.13.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 19:13:06 -0700 (PDT) From: Dmitry Torokhov Date: Sat, 11 Jul 2026 19:12:45 -0700 Subject: [PATCH v3 04/10] ARM: s3c: crag6410: switch keypad device to software properties Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-samsung-kp-v3-4-b2fcaba77aff@gmail.com> References: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> In-Reply-To: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peter Griffin , Alim Akhtar , Russell King , Mark Brown , Linus Walleij , Charles Keepax , Sam Protsenko , Arnd Bergmann , Bartosz Golaszewski Cc: Krzysztof Kozlowski , linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, patches@opensource.cirrus.com, Krzysztof Kozlowski X-Mailer: b4 0.16-dev-b242f Switch the keypad device to use software properties to describe the keypad. This will allow dropping support for platform data from the samsung-keypad driver. Acked-by: Krzysztof Kozlowski Signed-off-by: Dmitry Torokhov --- arch/arm/mach-s3c/Kconfig | 5 --- arch/arm/mach-s3c/Kconfig.s3c64xx | 7 ---- arch/arm/mach-s3c/Makefile.s3c64xx | 1 - arch/arm/mach-s3c/devs.c | 27 --------------- arch/arm/mach-s3c/devs.h | 1 - arch/arm/mach-s3c/keypad.h | 27 --------------- arch/arm/mach-s3c/mach-crag6410.c | 56 ++++++++++++++++++++++++----= ---- arch/arm/mach-s3c/setup-keypad-s3c64xx.c | 20 ------------ 8 files changed, 42 insertions(+), 102 deletions(-) diff --git a/arch/arm/mach-s3c/Kconfig b/arch/arm/mach-s3c/Kconfig index b3656109f1f7..2e77bb4f3a8c 100644 --- a/arch/arm/mach-s3c/Kconfig +++ b/arch/arm/mach-s3c/Kconfig @@ -111,11 +111,6 @@ config S3C64XX_DEV_SPI0 Compile in platform device definitions for S3C64XX's type SPI controller 0 =20 -config SAMSUNG_DEV_KEYPAD - bool - help - Compile in platform device definitions for keypad - config SAMSUNG_DEV_PWM bool help diff --git a/arch/arm/mach-s3c/Kconfig.s3c64xx b/arch/arm/mach-s3c/Kconfig.= s3c64xx index 3f97fba8e4f5..aef97cc5d195 100644 --- a/arch/arm/mach-s3c/Kconfig.s3c64xx +++ b/arch/arm/mach-s3c/Kconfig.s3c64xx @@ -74,11 +74,6 @@ config S3C64XX_SETUP_FB_24BPP help Common setup code for S3C64XX with an 24bpp RGB display helper. =20 -config S3C64XX_SETUP_KEYPAD - bool - help - Common setup code for S3C64XX KEYPAD GPIO configurations - config S3C64XX_SETUP_SDHCI_GPIO bool help @@ -106,7 +101,6 @@ config MACH_WLF_CRAGG_6410 select S3C64XX_DEV_SPI0 select S3C64XX_SETUP_FB_24BPP select S3C64XX_SETUP_I2C1 - select S3C64XX_SETUP_KEYPAD select S3C64XX_SETUP_SDHCI select S3C64XX_SETUP_SPI select S3C64XX_SETUP_USB_PHY @@ -117,7 +111,6 @@ config MACH_WLF_CRAGG_6410 select S3C_DEV_I2C1 select S3C_DEV_USB_HOST select S3C_DEV_USB_HSOTG - select SAMSUNG_DEV_KEYPAD select SAMSUNG_DEV_PWM help Machine support for the Wolfson Cragganmore S3C6410 variant. diff --git a/arch/arm/mach-s3c/Makefile.s3c64xx b/arch/arm/mach-s3c/Makefil= e.s3c64xx index 61287ad2ea42..1686b1f344f8 100644 --- a/arch/arm/mach-s3c/Makefile.s3c64xx +++ b/arch/arm/mach-s3c/Makefile.s3c64xx @@ -32,7 +32,6 @@ obj-y +=3D dev-audio-s3c64xx.o obj-$(CONFIG_S3C64XX_SETUP_FB_24BPP) +=3D setup-fb-24bpp-s3c64xx.o obj-$(CONFIG_S3C64XX_SETUP_I2C0) +=3D setup-i2c0-s3c64xx.o obj-$(CONFIG_S3C64XX_SETUP_I2C1) +=3D setup-i2c1-s3c64xx.o -obj-$(CONFIG_S3C64XX_SETUP_KEYPAD) +=3D setup-keypad-s3c64xx.o obj-$(CONFIG_S3C64XX_SETUP_SDHCI_GPIO) +=3D setup-sdhci-gpio-s3c64xx.o obj-$(CONFIG_S3C64XX_SETUP_SPI) +=3D setup-spi-s3c64xx.o obj-$(CONFIG_S3C64XX_SETUP_USB_PHY) +=3D setup-usb-phy-s3c64xx.o diff --git a/arch/arm/mach-s3c/devs.c b/arch/arm/mach-s3c/devs.c index bab2abd8a34a..0237307b9238 100644 --- a/arch/arm/mach-s3c/devs.c +++ b/arch/arm/mach-s3c/devs.c @@ -39,7 +39,6 @@ #include "devs.h" #include "fb.h" #include -#include "keypad.h" #include "pwm-core.h" #include "sdhci.h" #include "usb-phy.h" @@ -265,32 +264,6 @@ void __init s3c_i2c1_set_platdata(struct s3c2410_platf= orm_i2c *pd) } #endif /* CONFIG_S3C_DEV_I2C1 */ =20 -/* KEYPAD */ - -#ifdef CONFIG_SAMSUNG_DEV_KEYPAD -static struct resource samsung_keypad_resources[] =3D { - [0] =3D DEFINE_RES_MEM(SAMSUNG_PA_KEYPAD, SZ_32), - [1] =3D DEFINE_RES_IRQ(IRQ_KEYPAD), -}; - -struct platform_device samsung_device_keypad =3D { - .name =3D "samsung-keypad", - .id =3D -1, - .num_resources =3D ARRAY_SIZE(samsung_keypad_resources), - .resource =3D samsung_keypad_resources, -}; - -void __init samsung_keypad_set_platdata(struct samsung_keypad_platdata *pd) -{ - struct samsung_keypad_platdata *npd; - - npd =3D s3c_set_platdata(pd, sizeof(*npd), &samsung_device_keypad); - - if (!npd->cfg_gpio) - npd->cfg_gpio =3D samsung_keypad_cfg_gpio; -} -#endif /* CONFIG_SAMSUNG_DEV_KEYPAD */ - /* PWM Timer */ =20 #ifdef CONFIG_SAMSUNG_DEV_PWM diff --git a/arch/arm/mach-s3c/devs.h b/arch/arm/mach-s3c/devs.h index 21c00786c264..2737990063b1 100644 --- a/arch/arm/mach-s3c/devs.h +++ b/arch/arm/mach-s3c/devs.h @@ -39,7 +39,6 @@ extern struct platform_device s3c_device_i2c1; extern struct platform_device s3c_device_ohci; extern struct platform_device s3c_device_usb_hsotg; =20 -extern struct platform_device samsung_device_keypad; extern struct platform_device samsung_device_pwm; =20 /** diff --git a/arch/arm/mach-s3c/keypad.h b/arch/arm/mach-s3c/keypad.h deleted file mode 100644 index 9754b9a29945..000000000000 --- a/arch/arm/mach-s3c/keypad.h +++ /dev/null @@ -1,27 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ -/* - * Samsung Platform - Keypad platform data definitions - * - * Copyright (C) 2010 Samsung Electronics Co.Ltd - * Author: Joonyoung Shim - */ - -#ifndef __PLAT_SAMSUNG_KEYPAD_H -#define __PLAT_SAMSUNG_KEYPAD_H - -#include - -/** - * samsung_keypad_set_platdata - Set platform data for Samsung Keypad devi= ce. - * @pd: Platform data to register to device. - * - * Register the given platform data for use with Samsung Keypad device. - * The call will copy the platform data, so the board definitions can - * make the structure itself __initdata. - */ -extern void samsung_keypad_set_platdata(struct samsung_keypad_platdata *pd= ); - -/* defined by architecture to configure gpio. */ -extern void samsung_keypad_cfg_gpio(unsigned int rows, unsigned int cols); - -#endif /* __PLAT_SAMSUNG_KEYPAD_H */ diff --git a/arch/arm/mach-s3c/mach-crag6410.c b/arch/arm/mach-s3c/mach-cra= g6410.c index c4040aad1ed3..c2df5dcb3368 100644 --- a/arch/arm/mach-s3c/mach-crag6410.c +++ b/arch/arm/mach-s3c/mach-crag6410.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -22,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -53,7 +55,6 @@ #include "gpio-cfg.h" #include =20 -#include "keypad.h" #include "devs.h" #include "cpu.h" #include @@ -176,7 +177,7 @@ static struct s3c_fb_platdata crag6410_lcd_pdata =3D { =20 /* 2x6 keypad */ =20 -static uint32_t crag6410_keymap[] =3D { +static const u32 crag6410_keymap[] __initconst =3D { /* KEY(row, col, keycode) */ KEY(0, 0, KEY_VOLUMEUP), KEY(0, 1, KEY_HOME), @@ -192,17 +193,41 @@ static uint32_t crag6410_keymap[] =3D { KEY(1, 5, KEY_CAMERA), }; =20 -static struct matrix_keymap_data crag6410_keymap_data =3D { - .keymap =3D crag6410_keymap, - .keymap_size =3D ARRAY_SIZE(crag6410_keymap), +static const struct property_entry crag6410_keypad_props[] __initconst =3D= { + PROPERTY_ENTRY_U32("keypad,num-columns", 6), + PROPERTY_ENTRY_U32("keypad,num-rows", 2), + PROPERTY_ENTRY_U32_ARRAY("linux,keymap", crag6410_keymap), + { } +}; + +static const struct resource crag6410_keypad_resources[] __initconst =3D { + [0] =3D DEFINE_RES_MEM(SAMSUNG_PA_KEYPAD, SZ_32), + [1] =3D DEFINE_RES_IRQ(IRQ_KEYPAD), }; =20 -static struct samsung_keypad_platdata crag6410_keypad_data =3D { - .keymap_data =3D &crag6410_keymap_data, - .rows =3D 2, - .cols =3D 6, +static const struct platform_device_info crag6410_keypad_info __initconst = =3D { + .name =3D "samsung-keypad", + .id =3D PLATFORM_DEVID_NONE, + .res =3D crag6410_keypad_resources, + .num_res =3D ARRAY_SIZE(crag6410_keypad_resources), + .properties =3D crag6410_keypad_props, }; =20 +static void __init crag6410_setup_keypad(void) +{ + struct platform_device *pd; + + /* Set all the necessary GPK pins to special-function 3: KP_ROW[x] */ + s3c_gpio_cfgrange_nopull(S3C64XX_GPK(8), 2, S3C_GPIO_SFN(3)); + + /* Set all the necessary GPL pins to special-function 3: KP_COL[x] */ + s3c_gpio_cfgrange_nopull(S3C64XX_GPL(0), 6, S3C_GPIO_SFN(3)); + + pd =3D platform_device_register_full(&crag6410_keypad_info); + if (IS_ERR(pd)) + pr_err("failed to instantiate keypad device\n"); +} + static struct gpio_keys_button crag6410_gpio_keys[] =3D { [0] =3D { .code =3D KEY_SUSPEND, @@ -361,7 +386,7 @@ static struct platform_device wallvdd_device =3D { }, }; =20 -static struct platform_device *crag6410_devices[] __initdata =3D { +static struct platform_device *crag6410_devs0[] __initdata =3D { &s3c_device_hsmmc0, &s3c_device_hsmmc2, &s3c_device_i2c0, @@ -372,8 +397,10 @@ static struct platform_device *crag6410_devices[] __in= itdata =3D { &samsung_device_pwm, &s3c64xx_device_iis0, &s3c64xx_device_iis1, - &samsung_device_keypad, &crag6410_gpio_keydev, +}; + +static struct platform_device *crag6410_devs1[] __initdata =3D { &crag6410_dm9k_device, &s3c64xx_device_spi0, &crag6410_lcd_powerdev, @@ -873,16 +900,17 @@ static void __init crag6410_machine_init(void) gpiod_add_lookup_table(&crag_wm1250_ev1_gpiod_table); i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1)); =20 - samsung_keypad_set_platdata(&crag6410_keypad_data); - gpiod_add_lookup_table(&crag_spi0_gpiod_table); s3c64xx_spi0_set_platdata(0, 2); =20 pwm_add_table(crag6410_pwm_lookup, ARRAY_SIZE(crag6410_pwm_lookup)); - platform_add_devices(crag6410_devices, ARRAY_SIZE(crag6410_devices)); + platform_add_devices(crag6410_devs0, ARRAY_SIZE(crag6410_devs0)); platform_device_register_full(&crag6410_mmgpio_devinfo); =20 gpiod_add_lookup_table(&crag_leds_table); + crag6410_setup_keypad(); + + platform_add_devices(crag6410_devs1, ARRAY_SIZE(crag6410_devs1)); gpio_led_register_device(-1, &gpio_leds_pdata); =20 regulator_has_full_constraints(); diff --git a/arch/arm/mach-s3c/setup-keypad-s3c64xx.c b/arch/arm/mach-s3c/s= etup-keypad-s3c64xx.c deleted file mode 100644 index 8463ad37c6ab..000000000000 --- a/arch/arm/mach-s3c/setup-keypad-s3c64xx.c +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -// -// Copyright (c) 2010 Samsung Electronics Co., Ltd. -// http://www.samsung.com/ -// -// GPIO configuration for S3C64XX KeyPad device - -#include -#include "gpio-cfg.h" -#include "keypad.h" -#include "gpio-samsung.h" - -void samsung_keypad_cfg_gpio(unsigned int rows, unsigned int cols) -{ - /* Set all the necessary GPK pins to special-function 3: KP_ROW[x] */ - s3c_gpio_cfgrange_nopull(S3C64XX_GPK(8), rows, S3C_GPIO_SFN(3)); - - /* Set all the necessary GPL pins to special-function 3: KP_COL[x] */ - s3c_gpio_cfgrange_nopull(S3C64XX_GPL(0), cols, S3C_GPIO_SFN(3)); -} --=20 2.55.0.795.g602f6c329a-goog From nobody Sat Jul 25 23:03:45 2026 Received: from mail-pg1-f175.google.com (mail-pg1-f175.google.com [209.85.215.175]) (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 F2A863672A0 for ; Sun, 12 Jul 2026 02:13:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822391; cv=none; b=TJrYHly0RXLCnGACxqedc5eQqY9rwd/sPia+yh7nxhMSqj8Qk4hUPdNoHXcwAtjwSISS2Vs7dXWIc4u1URP12mJ+B0gWjyZcWMetJxy4WpMeFe2YP6VgNXPq2E6mST5qc/dpg+cmq5UEuNFZXJGV8zUekcmbYjmQJyzhtJBn9ik= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822391; c=relaxed/simple; bh=Ho25qvyScNsB+serwTNt0Bp3ZOd7cm6luU6beUPMWGI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lEiUmnE1ftQczHnsGEXTUzeGZS5xoOzcdQcuXkG9F+LLL538iX5IVDlQ9pNiq1c/pdhshaggR9BbLbDMUhZP0hH0PRnhL4gRJoH/MBfg9dUFP15/0ib3kPWn/nHOjb9CfHZyUkrX3D0wad0y3FxTUy+uHddd+PG3u9QgJ5RfX4M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VJUAr1rU; arc=none smtp.client-ip=209.85.215.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VJUAr1rU" Received: by mail-pg1-f175.google.com with SMTP id 41be03b00d2f7-c85b73ffb52so1024341a12.3 for ; Sat, 11 Jul 2026 19:13:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783822389; x=1784427189; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=RtYcoZBXkE+h9uNyvUP8OwkMXsP5YIQmdPT0+QpRd2Q=; b=VJUAr1rUfzwEu1qVdBZ1wH7Wy4+lQ5AOW8fDr9+VMWr3d/Qwnh20uTCsS0dWNTNxVa 7zagcdE1ZfLLs6ArpRu8qdTtn7oy34ChjDA5ht6CoEL8INyQI1jf/VUtCRrYsy1WxyVh 3I3gvUftBr3Mc7Znd/4e3/42C/sb627ch8RPNNfu/ifwtoLgbsgm+NpCEabFyEj8Jt4d 6Hggi1UwAEuV6Amcnft4ugxVB+TMg0IlIfi7+OUJye79f3e0sfnpuG8lIWIfNLL/p8ej D4rYjNjSzFWIFPwKr78iwcHQ9r/scwgiAx78PCyzrEXP72Vq0M56LrRXIhxSBtm9JSPU PBaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783822389; x=1784427189; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=RtYcoZBXkE+h9uNyvUP8OwkMXsP5YIQmdPT0+QpRd2Q=; b=an0288doXyM+vURZVx702RCQWOzGdhz705P+jeU8lO7zJ4MKhbJXzHFNs+4hN6MJ9t Icpbhgp7sKo4mUKjCElcp/lkXYDu1uxOoOhvvYxTkv3PAe5uW9AobWOMojAn6lldTAo0 OC9U4njU8d0lYkbzvM9g3ODpVGz9OBO+KncRWUEk8Sn/1OXzXH899rzsSBz/nuDq/JAl IQIckBkZk0HlTJs2jPW6E0IMCHSGeLXLN6IE9rnsdXBuK6ChWO2Ipdv1e3hP1XsymFFX IkujIJS0ewC7OCJ8ilZw7A9mT9AtRWNJHGIONIuCdrK8h1nIHu/2YCJocuCUcyXSUGjt zEyg== X-Forwarded-Encrypted: i=1; AHgh+RpclIbr6sqZ2Y0V4bw+Ig2i5253C4Y4kO1An465md82uGILdyXHY3W/ncLQyfvnlH3gArcoYeZhbwIpuzU=@vger.kernel.org X-Gm-Message-State: AOJu0YwTEmpYaEwbTdhKLGVFeZtnC102+aOCBEM5WX6wPIG9/TYrb4Ai syHtQly39IFk3in9J0CDT8fd+ZVI4YIFwUkQEvB4OfGXLq7e8lP1dMaF X-Gm-Gg: AfdE7ckUVZI99SnIeAzqk8L10G6Yg0xzGSbbPPwDh+4XNgE2nfjlfsd1m1+X2MkaNX2 ShiO2e3Zd2wfDTb2pNyc5ZMU8ks20zxuEkhlXD9h03s/hDZDOGyU3jkSzDmQTiHFUayc3M8mTJT a5W495ArQ7VX0stLEIIqDubEm7BlFm/fgo6utdnRRrok9MUO+3reJcjNCCkfjSUxaU+t6bKOz5v 95KMkA1JeLbEIlfJMmPRbR1LSzgphjJRTUPWfSy55VU27lKHBpjao0f/WxLtwPrhotj3J3wzksU gRlTAceblyZJHMl3atUyUEWkBk3SIuIo0373mf+0JeXIf1Yu1Z6qzil32oltkE7Uq2EFZ5xjJwe fBe5QyVVtL4xBQO1H1jn04Rzr8IYrb/PWXIgWiZwiMfV78xs7ECgirk+9hZTeFfq9hqen18FX62 ivlCuo3Is5zKo6gsfhAZxsejpw0aQm271GcPTg0g3WUlw4BL/YHxPhttm9rScbKrBIev8NQCPzc eE= X-Received: by 2002:a05:6a21:9d48:b0:3bf:5ff5:2b0f with SMTP id adf61e73a8af0-3c11062f658mr4861795637.12.1783822389307; Sat, 11 Jul 2026 19:13:09 -0700 (PDT) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:c63e:9756:a95c:c75]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3117d847e17sm54796692eec.18.2026.07.11.19.13.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 19:13:08 -0700 (PDT) From: Dmitry Torokhov Date: Sat, 11 Jul 2026 19:12:46 -0700 Subject: [PATCH v3 05/10] Input: samsung-keypad - remove support for platform data Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-samsung-kp-v3-5-b2fcaba77aff@gmail.com> References: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> In-Reply-To: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peter Griffin , Alim Akhtar , Russell King , Mark Brown , Linus Walleij , Charles Keepax , Sam Protsenko , Arnd Bergmann , Bartosz Golaszewski Cc: Krzysztof Kozlowski , linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, patches@opensource.cirrus.com, Bartosz Golaszewski X-Mailer: b4 0.16-dev-b242f Because there are no more users of samsung_keypad_platdata left in the kernel remove support for it from the driver. The driver supports generic device properties so all configuration should be done using them instead of a custom platform data. Acked-by: Bartosz Golaszewski Signed-off-by: Dmitry Torokhov --- drivers/input/keyboard/samsung-keypad.c | 184 +++++++++++++---------------= ---- include/linux/input/samsung-keypad.h | 39 ------- 2 files changed, 72 insertions(+), 151 deletions(-) diff --git a/drivers/input/keyboard/samsung-keypad.c b/drivers/input/keyboa= rd/samsung-keypad.c index cc34f0146161..e54b3b9f2cf2 100644 --- a/drivers/input/keyboard/samsung-keypad.c +++ b/drivers/input/keyboard/samsung-keypad.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -21,7 +22,9 @@ #include #include #include -#include + +#define SAMSUNG_MAX_ROWS 8 +#define SAMSUNG_MAX_COLS 8 =20 #define SAMSUNG_KEYIFCON 0x00 #define SAMSUNG_KEYIFSTSCLR 0x04 @@ -231,26 +234,22 @@ static void samsung_keypad_close(struct input_dev *in= put_dev) samsung_keypad_stop(keypad); } =20 -static const struct matrix_keymap_data * -samsung_parse_verbose_keymap(struct device *dev) +static int samsung_parse_verbose_keymap(struct samsung_keypad *keypad) { - struct matrix_keymap_data *keymap_data; + struct matrix_keymap_data keymap_data =3D { 0 }; + struct device *dev =3D &keypad->pdev->dev; struct fwnode_handle *child; - u32 *keymap; - unsigned int key_count; - - keymap_data =3D devm_kzalloc(dev, sizeof(*keymap_data), GFP_KERNEL); - if (!keymap_data) - return ERR_PTR(-ENOMEM); + unsigned int key_count =3D device_get_child_node_count(dev); + unsigned int i; =20 - key_count =3D device_get_child_node_count(dev); - keymap =3D devm_kcalloc(dev, key_count, sizeof(*keymap), GFP_KERNEL); + u32 *keymap __free(kfree) =3D kcalloc(key_count, sizeof(*keymap), GFP_KER= NEL); if (!keymap) - return ERR_PTR(-ENOMEM); + return -ENOMEM; =20 - keymap_data->keymap_size =3D key_count; - keymap_data->keymap =3D keymap; + keymap_data.keymap_size =3D key_count; + keymap_data.keymap =3D keymap; =20 + i =3D 0; device_for_each_child_node(dev, child) { u32 row, col, key_code; =20 @@ -258,123 +257,69 @@ samsung_parse_verbose_keymap(struct device *dev) fwnode_property_read_u32(child, "keypad,column", &col); fwnode_property_read_u32(child, "linux,code", &key_code); =20 - *keymap++ =3D KEY(row, col, key_code); + keymap[i++] =3D KEY(row, col, key_code); } =20 - return keymap_data; + return matrix_keypad_build_keymap(&keymap_data, NULL, + keypad->rows, keypad->cols, + keypad->keycodes, + keypad->input_dev); } =20 -static const struct samsung_keypad_platdata * -samsung_keypad_parse_properties(struct device *dev) +static int samsung_keypad_parse_keymap(struct samsung_keypad *keypad) { - const struct matrix_keymap_data *keymap_data; - struct samsung_keypad_platdata *pdata; - u32 num_rows =3D 0, num_cols =3D 0; - int error; - - pdata =3D devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); - if (!pdata) - return ERR_PTR(-ENOMEM); - - if (device_property_present(dev, "linux,keymap")) { - error =3D matrix_keypad_parse_properties(dev, &num_rows, &num_cols); - if (error) - return ERR_PTR(error); - } else { - device_property_read_u32(dev, "samsung,keypad-num-rows", &num_rows); - device_property_read_u32(dev, "samsung,keypad-num-columns", &num_cols); - if (!num_rows || !num_cols) { - dev_err(dev, "number of keypad rows/columns not specified\n"); - return ERR_PTR(-EINVAL); - } - } - - pdata->rows =3D num_rows; - pdata->cols =3D num_cols; - - if (!device_property_present(dev, "linux,keymap")) { - keymap_data =3D samsung_parse_verbose_keymap(dev); - if (IS_ERR(keymap_data)) - return ERR_CAST(keymap_data); - - pdata->keymap_data =3D keymap_data; - } - - - pdata->no_autorepeat =3D - device_property_read_bool(dev, "linux,input-no-autorepeat"); + struct device *dev =3D &keypad->pdev->dev; =20 - pdata->wakeup =3D device_property_read_bool(dev, "wakeup-source") || - /* legacy name */ - device_property_read_bool(dev, "linux,input-wakeup"); + if (device_property_present(dev, "linux,keymap")) + return matrix_keypad_build_keymap(NULL, NULL, + keypad->rows, keypad->cols, + keypad->keycodes, + keypad->input_dev); =20 - return pdata; + return samsung_parse_verbose_keymap(keypad); } =20 static int samsung_keypad_probe(struct platform_device *pdev) { - const struct samsung_keypad_platdata *pdata; const struct platform_device_id *id; + struct device *dev =3D &pdev->dev; struct samsung_keypad *keypad; struct resource *res; struct input_dev *input_dev; unsigned int row_shift; + u32 num_rows =3D 0, num_cols =3D 0; + bool wakeup; int error; =20 - pdata =3D dev_get_platdata(&pdev->dev); - if (pdata) { - if (!pdata->keymap_data) { - dev_err(&pdev->dev, "no keymap data defined\n"); + if (device_property_present(dev, "linux,keymap")) { + error =3D matrix_keypad_parse_properties(dev, &num_rows, &num_cols); + if (error) + return error; + } else { + device_property_read_u32(dev, "samsung,keypad-num-rows", &num_rows); + device_property_read_u32(dev, "samsung,keypad-num-columns", &num_cols); + if (!num_rows || !num_cols) { + dev_err(dev, "number of keypad rows/columns not specified\n"); return -EINVAL; } - } else { - pdata =3D samsung_keypad_parse_properties(&pdev->dev); - if (IS_ERR(pdata)) - return PTR_ERR(pdata); } =20 - if (!pdata->rows || pdata->rows > SAMSUNG_MAX_ROWS) - return -EINVAL; - - if (!pdata->cols || pdata->cols > SAMSUNG_MAX_COLS) + if (num_rows > SAMSUNG_MAX_ROWS || num_cols > SAMSUNG_MAX_COLS) return -EINVAL; =20 - /* initialize the gpio */ - if (pdata->cfg_gpio) - pdata->cfg_gpio(pdata->rows, pdata->cols); - - row_shift =3D get_count_order(pdata->cols); + row_shift =3D get_count_order(num_cols); =20 keypad =3D devm_kzalloc(&pdev->dev, struct_size(keypad, keycodes, - pdata->rows << row_shift), + num_rows << row_shift), GFP_KERNEL); if (!keypad) return -ENOMEM; =20 - input_dev =3D devm_input_allocate_device(&pdev->dev); - if (!input_dev) - return -ENOMEM; - - res =3D platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) - return -ENODEV; - - keypad->base =3D devm_ioremap(&pdev->dev, res->start, resource_size(res)); - if (!keypad->base) - return -EBUSY; - - keypad->clk =3D devm_clk_get_prepared(&pdev->dev, "keypad"); - if (IS_ERR(keypad->clk)) { - dev_err(&pdev->dev, "failed to get keypad clk\n"); - return PTR_ERR(keypad->clk); - } - - keypad->input_dev =3D input_dev; keypad->pdev =3D pdev; keypad->row_shift =3D row_shift; - keypad->rows =3D pdata->rows; - keypad->cols =3D pdata->cols; + keypad->rows =3D num_rows; + keypad->cols =3D num_cols; keypad->stopped =3D true; init_waitqueue_head(&keypad->wait); =20 @@ -390,26 +335,45 @@ static int samsung_keypad_probe(struct platform_devic= e *pdev) return -EINVAL; } =20 + input_dev =3D devm_input_allocate_device(&pdev->dev); + if (!input_dev) + return -ENOMEM; + + keypad->input_dev =3D input_dev; + input_dev->name =3D pdev->name; input_dev->id.bustype =3D BUS_HOST; =20 input_dev->open =3D samsung_keypad_open; input_dev->close =3D samsung_keypad_close; =20 - error =3D matrix_keypad_build_keymap(pdata->keymap_data, NULL, - pdata->rows, pdata->cols, - keypad->keycodes, input_dev); + error =3D samsung_keypad_parse_keymap(keypad); if (error) { dev_err(&pdev->dev, "failed to build keymap\n"); return error; } =20 input_set_capability(input_dev, EV_MSC, MSC_SCAN); - if (!pdata->no_autorepeat) + + if (!device_property_read_bool(&pdev->dev, "linux,input-no-autorepeat")) __set_bit(EV_REP, input_dev->evbit); =20 input_set_drvdata(input_dev, keypad); =20 + res =3D platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!res) + return -ENODEV; + + keypad->base =3D devm_ioremap(&pdev->dev, res->start, resource_size(res)); + if (!keypad->base) + return -EBUSY; + + keypad->clk =3D devm_clk_get_prepared(&pdev->dev, "keypad"); + if (IS_ERR(keypad->clk)) { + dev_err(&pdev->dev, "failed to get keypad clk\n"); + return PTR_ERR(keypad->clk); + } + keypad->irq =3D platform_get_irq(pdev, 0); if (keypad->irq < 0) { error =3D keypad->irq; @@ -424,7 +388,11 @@ static int samsung_keypad_probe(struct platform_device= *pdev) return error; } =20 - device_init_wakeup(&pdev->dev, pdata->wakeup); + wakeup =3D device_property_read_bool(dev, "wakeup-source") || + /* legacy name */ + device_property_read_bool(dev, "linux,input-wakeup"); + device_init_wakeup(&pdev->dev, wakeup); + platform_set_drvdata(pdev, keypad); =20 error =3D devm_pm_runtime_enable(&pdev->dev); @@ -435,14 +403,6 @@ static int samsung_keypad_probe(struct platform_device= *pdev) if (error) return error; =20 - if (!dev_get_platdata(&pdev->dev)) { - if (pdata->keymap_data) { - devm_kfree(&pdev->dev, (void *)pdata->keymap_data->keymap); - devm_kfree(&pdev->dev, (void *)pdata->keymap_data); - } - devm_kfree(&pdev->dev, (void *)pdata); - } - return 0; } =20 diff --git a/include/linux/input/samsung-keypad.h b/include/linux/input/sam= sung-keypad.h deleted file mode 100644 index ab6b97114c08..000000000000 --- a/include/linux/input/samsung-keypad.h +++ /dev/null @@ -1,39 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ -/* - * Samsung Keypad platform data definitions - * - * Copyright (C) 2010 Samsung Electronics Co.Ltd - * Author: Joonyoung Shim - */ - -#ifndef __SAMSUNG_KEYPAD_H -#define __SAMSUNG_KEYPAD_H - -#include - -#define SAMSUNG_MAX_ROWS 8 -#define SAMSUNG_MAX_COLS 8 - -/** - * struct samsung_keypad_platdata - Platform device data for Samsung Keypa= d. - * @keymap_data: pointer to &matrix_keymap_data. - * @rows: number of keypad row supported. - * @cols: number of keypad col supported. - * @no_autorepeat: disable key autorepeat. - * @wakeup: controls whether the device should be set up as wakeup source. - * @cfg_gpio: configure the GPIO. - * - * Initialisation data specific to either the machine or the platform - * for the device driver to use or call-back when configuring gpio. - */ -struct samsung_keypad_platdata { - const struct matrix_keymap_data *keymap_data; - unsigned int rows; - unsigned int cols; - bool no_autorepeat; - bool wakeup; - - void (*cfg_gpio)(unsigned int rows, unsigned int cols); -}; - -#endif /* __SAMSUNG_KEYPAD_H */ --=20 2.55.0.795.g602f6c329a-goog From nobody Sat Jul 25 23:03:45 2026 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (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 EF21636729C for ; Sun, 12 Jul 2026 02:13:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822394; cv=none; b=s8rRio1uakt5jQlOZWcHfixHfiEL1rZSlJXa7cjPr6ni6ofH/RUo7TEuJlz3fNksZFFmGiqykJMx9nQ3mAhOJxxP0DlN6EemXIYYCStkUd24AkMbCVR0HbB196uTapsr1MA3SesaAgEOLNk2XfLs25txNNyh8EfA6bsAbg93Fd4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822394; c=relaxed/simple; bh=o14WWo5qJFt+cooxn41hVY96/Zqncd1xZ05HOGgFc/U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=huyGrsUHFuGm6ePJe3rxUX/W7NM3m5bZ3IyPlX/PiFF2w/h2mnRoPUKTRWyeA9X3Fad3y1mzsLlE344SnEe0GnuapCIIwzqHeAkhWinw8DsQJw1U7lWY7CHRXTXVqT/NiUhEyEfhdbqCeD9wDSM/UgM/1gXpHfF2N+NRMPkeY1Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dOoMgTjw; arc=none smtp.client-ip=209.85.214.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dOoMgTjw" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2c6b67d5fa1so34086795ad.2 for ; Sat, 11 Jul 2026 19:13:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783822391; x=1784427191; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=5FHjUZQYADUT6bCIy3JjzfiUR27NaQqxGvamZew7Xmw=; b=dOoMgTjw10WINSyMQDQpScfZNUm791DTIb1xvcHd1+Rx0zvGrG70Y6Zknmbo5TTcTl APkHatjg8/aoOYScAueBIBLoW7h4EYz9C+drZnspf3D42G4suXqoWziOrO5iNYhs6GvG +qF8BTnlvt3Au+K4bCLhmF+2PFszbX2IQHs1m9X78FRudn5B91QhIacq5i+sMZktUcs8 UpqxZeiXf3bd30rfR8iBXtBg+WVIYOkU2r/ZjTMDnOzfrnYo9lYVMsS3b9mu+nSDiAkt nhGUqWEEAghrhNnKCtAEarcOpf5jbYRymKYcBN/JYcNPnwdBwZJZ2mK/O1zNGQkcRot7 vj6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783822391; x=1784427191; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=5FHjUZQYADUT6bCIy3JjzfiUR27NaQqxGvamZew7Xmw=; b=Mq6lsshcA/woGjaUjZi0bCSHsaHWYx5ykZ9b8FynURk6bJrzL383O3NKd7jKhqc1NP e+u3PBJYEg92XiFXH49wQwa288XJa8nvlKWlY6XgA6C4hdDl3mDBenrKugHVDB+h06++ YBv9cEAcgDsjBKUzU9aO+tVfR1UTTr/31xVhk5LbWh1Elso+Ow+tm3FvV5GGo1oUKml0 Uss2V+Q+EnTQInLxWYXIn2AVaQp67oRAbEmM2gwgJJP9YPd1/aC+PpjBoJTzr/gc3/gT 9mIx39CEhIovC3T+Tv8OBYn8Hi+ihILZpQZ+CdSBfQ2nrV/A6e7kJ2cUTssE+V16Uex3 Mp7A== X-Forwarded-Encrypted: i=1; AHgh+RoNZrbmKEmW0Uk1oAZ8xD8O68RBhUZ4KTTj4BbUlZMG31dCxqZ25Rypga8A9zBgJOAMFMAe+HdlhdCF+cc=@vger.kernel.org X-Gm-Message-State: AOJu0YzftpSp8Tp8GX88XFDmVA7bM2S0cCUhvKfu/aHBMK6ZE4Z3R8HH 0+/7KcfklOJyT+6rKKbmhBs2vGQg/kin4Om0XWyoV54zyXfJsS350Uwz X-Gm-Gg: AfdE7clAThxOOVLWning/wxUGqgrjB7BosAqoAVvxhJmMISxm4BqP8swnavtMH49Iiy 4X8sbkyzGTZXBpQbOiHzxh/WXr8u/SyQ5zSZwNpOMWx1GCZYKx6tBuAfXklw0hsHymgyPVVhrT1 NVFfsvJwzn1Z1fcvmt3MLNTyF853ob971q66Avb1twJBWg6uEkRQtmv7n1BRKRXHbYBkrYCC1E5 Wmjqd/bWniaTI8Jd5VT/d0u/w7DoTh8X4XDKWzUwO6XzZ2EqojTKpFhwgOV7WYQB3e6sIj1bwQH cC/oA7F7UvX/zdnJR2R6rpKI4jzkkpIftyPPvPouWpO8qvkTqPgR0GbVv9ilssEf6Gcnk0ca2IN 9h37lv6p/Q8HNYIaUY8YE/japKthbm6oph0o+oAJH1iONdqWp+rcTUniJ0k+BDFXP7hxbg0QmK9 mM4Fx1H86xVDA82LR7qPRjHYo4u7ny3v3D7PiFEZEk+XZST4QaWEMgTDJRQbE3ih9zuYKPm+2B4 gE= X-Received: by 2002:a05:6300:2290:b0:3b5:4fff:fa0f with SMTP id adf61e73a8af0-3c1109ecda0mr4245973637.14.1783822391326; Sat, 11 Jul 2026 19:13:11 -0700 (PDT) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:c63e:9756:a95c:c75]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3117d847e17sm54796692eec.18.2026.07.11.19.13.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 19:13:10 -0700 (PDT) From: Dmitry Torokhov Date: Sat, 11 Jul 2026 19:12:47 -0700 Subject: [PATCH v3 06/10] ARM: s3c: crag6410: use software nodes/properties to set up GPIO keys Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-samsung-kp-v3-6-b2fcaba77aff@gmail.com> References: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> In-Reply-To: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peter Griffin , Alim Akhtar , Russell King , Mark Brown , Linus Walleij , Charles Keepax , Sam Protsenko , Arnd Bergmann , Bartosz Golaszewski Cc: Krzysztof Kozlowski , linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, patches@opensource.cirrus.com, Krzysztof Kozlowski X-Mailer: b4 0.16-dev-b242f Switch the gpio-keys device to use software nodes/properties to describe the buttons and switches. This will allow dropping support for platform data from the gpio-keys driver in the future. Acked-by: Krzysztof Kozlowski Signed-off-by: Dmitry Torokhov --- arch/arm/mach-s3c/mach-crag6410.c | 79 ++++++++++++++++++++++++++++-------= ---- 1 file changed, 58 insertions(+), 21 deletions(-) diff --git a/arch/arm/mach-s3c/mach-crag6410.c b/arch/arm/mach-s3c/mach-cra= g6410.c index c2df5dcb3368..757c0f383ff1 100644 --- a/arch/arm/mach-s3c/mach-crag6410.c +++ b/arch/arm/mach-s3c/mach-crag6410.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -228,32 +229,68 @@ static void __init crag6410_setup_keypad(void) pr_err("failed to instantiate keypad device\n"); } =20 -static struct gpio_keys_button crag6410_gpio_keys[] =3D { - [0] =3D { - .code =3D KEY_SUSPEND, - .gpio =3D S3C64XX_GPL(10), /* EINT 18 */ - .type =3D EV_KEY, - .wakeup =3D 1, - .active_low =3D 1, - }, - [1] =3D { - .code =3D SW_FRONT_PROXIMITY, - .gpio =3D S3C64XX_GPN(11), /* EINT 11 */ - .type =3D EV_SW, - }, +static const struct software_node crag6410_gpio_keys_node =3D { + .name =3D "crag6410-gpio-keys", }; =20 -static struct gpio_keys_platform_data crag6410_gpio_keydata =3D { - .buttons =3D crag6410_gpio_keys, - .nbuttons =3D ARRAY_SIZE(crag6410_gpio_keys), +static const struct property_entry crag6410_suspend_key_props[] =3D { + PROPERTY_ENTRY_U32("linux,code", KEY_SUSPEND), + PROPERTY_ENTRY_GPIO("gpios", + SAMSUNG_GPIO_NODE('L'), 10, /* EINT 18 */ + GPIO_ACTIVE_LOW), + PROPERTY_ENTRY_BOOL("wakeup-source"), + { } }; =20 -static struct platform_device crag6410_gpio_keydev =3D { - .name =3D "gpio-keys", - .id =3D 0, - .dev.platform_data =3D &crag6410_gpio_keydata, +static const struct software_node crag6410_suspend_key_node =3D { + .parent =3D &crag6410_gpio_keys_node, + .properties =3D crag6410_suspend_key_props, +}; + +static const struct property_entry crag6410_prox_sw_props[] =3D { + PROPERTY_ENTRY_U32("linux,input-type", EV_SW), + PROPERTY_ENTRY_U32("linux,code", SW_FRONT_PROXIMITY), + PROPERTY_ENTRY_GPIO("gpios", + SAMSUNG_GPIO_NODE('N'), 11, /* EINT 11 */ + GPIO_ACTIVE_HIGH), + { } +}; + +static const struct software_node crag6410_prox_sw_node =3D { + .parent =3D &crag6410_gpio_keys_node, + .properties =3D crag6410_prox_sw_props, }; =20 +static const struct software_node *crag6410_gpio_keys_swnodes[] =3D { + &crag6410_gpio_keys_node, + &crag6410_suspend_key_node, + &crag6410_prox_sw_node, + NULL +}; + +static void __init crag6410_setup_gpio_keys(void) +{ + struct platform_device_info keys_info =3D { + .name =3D "gpio-keys", + .id =3D 0, + }; + struct platform_device *pd; + int err; + + err =3D software_node_register_node_group(crag6410_gpio_keys_swnodes); + if (err) { + pr_err("failed to register gpio-keys software nodes: %d\n", err); + return; + } + + keys_info.fwnode =3D software_node_fwnode(&crag6410_gpio_keys_node); + + pd =3D platform_device_register_full(&keys_info); + err =3D PTR_ERR_OR_ZERO(pd); + if (err) + pr_err("failed to create gpio-keys device: %d\n", err); +} + static struct resource crag6410_dm9k_resource[] =3D { [0] =3D DEFINE_RES_MEM(S3C64XX_PA_XM0CSN5, 2), [1] =3D DEFINE_RES_MEM(S3C64XX_PA_XM0CSN5 + (1 << 8), 2), @@ -397,7 +434,6 @@ static struct platform_device *crag6410_devs0[] __initd= ata =3D { &samsung_device_pwm, &s3c64xx_device_iis0, &s3c64xx_device_iis1, - &crag6410_gpio_keydev, }; =20 static struct platform_device *crag6410_devs1[] __initdata =3D { @@ -909,6 +945,7 @@ static void __init crag6410_machine_init(void) =20 gpiod_add_lookup_table(&crag_leds_table); crag6410_setup_keypad(); + crag6410_setup_gpio_keys(); =20 platform_add_devices(crag6410_devs1, ARRAY_SIZE(crag6410_devs1)); gpio_led_register_device(-1, &gpio_leds_pdata); --=20 2.55.0.795.g602f6c329a-goog From nobody Sat Jul 25 23:03:45 2026 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 48FEE366820 for ; Sun, 12 Jul 2026 02:13:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822400; cv=none; b=kEBwfWFe5QgQjDPjfY9rxs0YlAg1AU3BNYZx/2RczP58GXE9SlC4GrrJbeb/KkB/l4mvNAd9YVcfl298xw92f16pqrQ6gmFgCzRrgGFP9NSv8jbTsFyK23qBbA+K0IAOl4+J2dVDvx9dlk7sQ23yKZtcJGws6bpb04IOwRNebfg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822400; c=relaxed/simple; bh=eq12R7NB8g3dejJk3OC3R9HbUZCictTcSDAGjAXeTbg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=k2O7CxqCWFBCioEWOB0IDoE4vpwQqwgmUv8vWHroXNPBJT3+aIaRjKntWGM3/4rjfx+EQ3yFxUYXNehFka1p5Ul2+SPHKPuU2hpF/nCbSPqXcY9uS5nuwGFmrtt95txJhmjNXQlujyuXdUhlqaC1nzTWiiLlYySnbtdjvWaanh0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VnymHQC1; arc=none smtp.client-ip=209.85.216.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VnymHQC1" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-381ed661712so2550311a91.2 for ; Sat, 11 Jul 2026 19:13:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783822393; x=1784427193; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=qnUG3JskAqM/JfRrK06JJsIVlYwHJ11zw3wV0jbg0eU=; b=VnymHQC1/GvrV99w5LqAdZD7lX1dTHrXdJ7A2gPFkzJUo0ZKkH0qlDJyZsejLt0fmN QqekvZLdlAJywHierQWTZ16XxJhA7WC/yzaiCt/FrS2J3O1PIScSatfzDgDhTg8R/wEt 87XFGFmSlL35BrfT5GiAr62pnK+ImiPno8JEU1KsFu0xcoxE2DsKsLVEo+L15wh424nD ZwRXoBVM343Jb8UVngyhfCHvQ4Eap8CQj1u7wHYd/gHU+eZxEZh4aVvSlY35E9KLtEbD jYRm7dybVQQXq6qmLQQbDmeoWqe/2YrmdFgx/aqclHqElSLurn+LXC20UualzWL5ecih z9eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783822393; x=1784427193; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=qnUG3JskAqM/JfRrK06JJsIVlYwHJ11zw3wV0jbg0eU=; b=YeWAnoKOXDBdTmPInHAVIqToFk9VlB7qJzj4GW7lhiecwYTuz0Wk6jFmin+oAEHTzl DKz5tmfUyCAaJQpOR5BSmQP3ug7sUZYPkRkeqibHD57GCj7o4hgfUYQ2dRmzhPLe/X5K LQh9bg2iJyQcbMWu3suKVSqNS+CSutuAP3NOI7LtVVBzEIk/gIYChxU1cLZbZ3gVRHun WvvtXcJMv+YPq6BKOyxdOKv0cAbTMjeszeDg8GjIoPc/BuKaZHDj57o3U2u4X/h8pK92 9YuEtmJd2fD7iURk+pDrOJf+kbIb+Q0LWulnq6T4yNvYZIXC8sQEuJiVlhXAcPaxQYJ+ 0lfQ== X-Forwarded-Encrypted: i=1; AHgh+RqlWbKSp4Gvc6dgPCabxyYDT12rFmszqMVFG7ROZR1StgmFUlm/JCsZbHQ2enCAMD1HW36lUK13tcBKlrU=@vger.kernel.org X-Gm-Message-State: AOJu0YyNJnSPvkgNviJVX5TV19r2KXKn5IJ3oF3HByGVrHXxZ06AZDJE zZbw6KCOQNRP19JqH7awzN4Pus00V4MfizZljAyvtVGFmj9O2aUboxrk X-Gm-Gg: AfdE7cnm++VKmhQ+MkrDCUdX9zitvLXBlGchyhIhgnrecvEAm6IyflalIBlRv+KeIja fK3la0Ak8YKkWfjWORH/MGjBYlJtLkGL45hbc/G64ROcn5Y2SMGze48ovaQK9h38i8BkBjsFnTz YCc6zRDj2T7MgVRfzYiGuNacBuUF7br52MB5o4MYjMothk3+A1kEA5ZVe8tgmifn5P9KaiS53+O 9jhaVPUB/HIjwmgO90Sz0gKg3GEIhrBJKPY5Ahdc3PbF7UC4bNlrFSsfhxo+W+t5msa5ghTITnU i5bNnTyJKaZvjEL5dMDp5oHwW0NRoTDi9iizUnN95mMSISr0gAZcG1MMvrujV+362gn/uErSUkE rEIe/ESA5TH7P5L4yxqCHxKZ16pko79Bfj0RUSyOF+AHKBIkptMG/gG1DTXcjGCVb1c9fyK0lxt X7x7eEalaOoURPEbcZzTN2XiI2f5fuqM75LjjTL25KUZqIX7MArSLPLBE8tKnB/b+M7WfKCRNHh Nw= X-Received: by 2002:a17:90b:5545:b0:36d:9e0b:3801 with SMTP id 98e67ed59e1d1-38dc74c4a32mr4437207a91.8.1783822393449; Sat, 11 Jul 2026 19:13:13 -0700 (PDT) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:c63e:9756:a95c:c75]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3117d847e17sm54796692eec.18.2026.07.11.19.13.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 19:13:12 -0700 (PDT) From: Dmitry Torokhov Date: Sat, 11 Jul 2026 19:12:48 -0700 Subject: [PATCH v3 07/10] mfd: wm831x: support software nodes for DCDC regulators Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-samsung-kp-v3-7-b2fcaba77aff@gmail.com> References: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> In-Reply-To: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peter Griffin , Alim Akhtar , Russell King , Mark Brown , Linus Walleij , Charles Keepax , Sam Protsenko , Arnd Bergmann , Bartosz Golaszewski Cc: Krzysztof Kozlowski , linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, patches@opensource.cirrus.com X-Mailer: b4 0.16-dev-b242f Allow passing software nodes to wm831x DCDC regulators via PMIC platform data. This is useful for non-DT/non-ACPI platforms that want to associate device properties (like DVS GPIOs) with the regulator devices using software nodes. We add 'dcdc_swnodes' to the PMIC platform data 'struct wm831x_pdata' and have the MFD core assign these software nodes to the buckv cells. Assisted-by: Antigravity:gemini-3.5-flash Signed-off-by: Dmitry Torokhov --- drivers/mfd/wm831x-core.c | 47 ++++++++++++++++++++++++++++++------= ---- include/linux/mfd/wm831x/pdata.h | 2 ++ 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/drivers/mfd/wm831x-core.c b/drivers/mfd/wm831x-core.c index df8e76e000cc..c4793be419ba 100644 --- a/drivers/mfd/wm831x-core.c +++ b/drivers/mfd/wm831x-core.c @@ -14,6 +14,7 @@ #include #include #include +#include #include =20 #include @@ -1449,6 +1450,32 @@ const struct of_device_id wm831x_of_match[] =3D { }; EXPORT_SYMBOL_GPL(wm831x_of_match); =20 +static int wm831x_add_devices(struct wm831x *wm831x, int wm831x_num, + const struct mfd_cell *cells, int num_cells) +{ + struct wm831x_pdata *pdata =3D &wm831x->pdata; + int i; + + struct mfd_cell *local_cells __free(kfree) =3D + kmemdup_array(cells, num_cells, sizeof(*cells), GFP_KERNEL); + if (!local_cells) + return -ENOMEM; + + for (i =3D 0; i < num_cells; i++) { + struct mfd_cell *cell =3D &local_cells[i]; + + if (strcmp(cell->name, "wm831x-buckv") =3D=3D 0) { + int id =3D cell->id - 1; + + if (id >=3D 0 && id < WM831X_MAX_DCDC) + cell->swnode =3D pdata->dcdc_swnodes[id]; + } + } + + return mfd_add_devices(wm831x->dev, wm831x_num, local_cells, num_cells, + NULL, 0, NULL); +} + /* * Instantiate the generic non-control parts of the device. */ @@ -1620,15 +1647,13 @@ int wm831x_device_init(struct wm831x *wm831x, int i= rq) /* The core device is up, instantiate the subdevices. */ switch (parent) { case WM8310: - ret =3D mfd_add_devices(wm831x->dev, wm831x_num, - wm8310_devs, ARRAY_SIZE(wm8310_devs), - NULL, 0, NULL); + ret =3D wm831x_add_devices(wm831x, wm831x_num, + wm8310_devs, ARRAY_SIZE(wm8310_devs)); break; =20 case WM8311: - ret =3D mfd_add_devices(wm831x->dev, wm831x_num, - wm8311_devs, ARRAY_SIZE(wm8311_devs), - NULL, 0, NULL); + ret =3D wm831x_add_devices(wm831x, wm831x_num, + wm8311_devs, ARRAY_SIZE(wm8311_devs)); if (!pdata->disable_touch) mfd_add_devices(wm831x->dev, wm831x_num, touch_devs, ARRAY_SIZE(touch_devs), @@ -1636,9 +1661,8 @@ int wm831x_device_init(struct wm831x *wm831x, int irq) break; =20 case WM8312: - ret =3D mfd_add_devices(wm831x->dev, wm831x_num, - wm8312_devs, ARRAY_SIZE(wm8312_devs), - NULL, 0, NULL); + ret =3D wm831x_add_devices(wm831x, wm831x_num, + wm8312_devs, ARRAY_SIZE(wm8312_devs)); if (!pdata->disable_touch) mfd_add_devices(wm831x->dev, wm831x_num, touch_devs, ARRAY_SIZE(touch_devs), @@ -1649,9 +1673,8 @@ int wm831x_device_init(struct wm831x *wm831x, int irq) case WM8321: case WM8325: case WM8326: - ret =3D mfd_add_devices(wm831x->dev, wm831x_num, - wm8320_devs, ARRAY_SIZE(wm8320_devs), - NULL, 0, NULL); + ret =3D wm831x_add_devices(wm831x, wm831x_num, + wm8320_devs, ARRAY_SIZE(wm8320_devs)); break; =20 default: diff --git a/include/linux/mfd/wm831x/pdata.h b/include/linux/mfd/wm831x/pd= ata.h index 75aa94dadf1c..d5d9d9600756 100644 --- a/include/linux/mfd/wm831x/pdata.h +++ b/include/linux/mfd/wm831x/pdata.h @@ -12,6 +12,7 @@ =20 struct wm831x; struct regulator_init_data; +struct software_node; =20 struct wm831x_backlight_pdata { int isink; /** ISINK to use, 1 or 2 */ @@ -132,6 +133,7 @@ struct wm831x_pdata { struct wm831x_status_pdata *status[WM831X_MAX_STATUS]; /** DCDC1 =3D 0 and so on */ struct regulator_init_data *dcdc[WM831X_MAX_DCDC]; + const struct software_node *dcdc_swnodes[WM831X_MAX_DCDC]; /** EPE1 =3D 0 and so on */ struct regulator_init_data *epe[WM831X_MAX_EPE]; /** LDO1 =3D 0 and so on */ --=20 2.55.0.795.g602f6c329a-goog From nobody Sat Jul 25 23:03:45 2026 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (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 3CC50367B6D for ; Sun, 12 Jul 2026 02:13:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822400; cv=none; b=oaS0PmJjlmpAeb0N4hxnTvyo0tzeLs6XyQ8NfC1QLhPLZvQYQnukV/6z8/fZk86VTFZ9SrxlKVPcUUXJyZ2FiFDLyU4pLr92M1WG2wJMbI9cjC7MQEYeFHJETErEtxD+PVXUtIJt2dVNZXm9is+z84Kml2M2CeiE8yqhfgZ7oHQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822400; c=relaxed/simple; bh=N5rky33EdvhViGwsioGmj36G2N6vGTwasrTYZZH/8o4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QF/8NrmFEqO1PImDMxVsXcKU3Zb1whE5WZCYVaqnDTu69f29JGCRsAwPuM9AZuNYHOQta3S2DVVzwDTvUgyEtT8pQ6xnTpf+TbgaqzGeusvqZGDMyOm11Sizogolw1C1ClT0xc8T7AFVk3Nm5j3zJX6ppYjoE0zJ1mDEPE/3EAc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=alll0lai; arc=none smtp.client-ip=209.85.216.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="alll0lai" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-38125cebfdaso2785654a91.1 for ; Sat, 11 Jul 2026 19:13:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783822395; x=1784427195; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=IeKrQCOQwCtSB3eQzRia+4BzTdZbJgllKrvOfao2+VE=; b=alll0laitPrNKGPiujKduM5WO6O6cOcbDYHlocGjKgyqoC9vcxhRqnywxj15jtQLuk gWJOcfOuTxUyqJmYpe69Qtv01GmUjh0d6RGNTXVLU5BOTFVtdC4AoOIhAfT4KIVGyH31 e/auX9J53Nqay9VZW6dzwam5pVa5Ht91FEywDRHEBHONh7aRkf1+5AGEFEQjkgLKDl6p bsfoF8JODmeZVMrepKi8QazubhJ+Dudu3Lk83dI8arrseZ7h/N1c63QleTNYqy/2Ah75 HspG/dCSWIURYIuJb60S0MuP9yqTfJ/h1QLbzNT5YRHLMHV7dgKSlEJaPB5l739ZNsRy vu6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783822395; x=1784427195; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=IeKrQCOQwCtSB3eQzRia+4BzTdZbJgllKrvOfao2+VE=; b=h8eOX/illbcHryr9Tcu3ndIR331uQ/kx8eJCDnwqvRpTvcmOwWY9pxOF9AwXcb3qxw 1MebXpBQ/3U8UecmO6G7BE5jOctNkzRCBsf9uwiPwF3pfBoEkY1UkT9UePQF5oAYoQba TlIS9YZudxy9wG7R4BrhcJYeeSE2FWc+dTwhPOT89CTQQ7a5wkdhbRR76oQfjYSY87FB y4Y5PaFbSCq0yJDk5kkNGE/Si1vbyq6oUwJDW1W2XthkkwPU7oh+n4XtDCOXOJJz67wE lNcIslPxqsiOTvtpeLMoiJZMXdLySjyl4lemYhGpeBUG3/PpLkIk2wpqny+caCg3Tgfs AxxQ== X-Forwarded-Encrypted: i=1; AHgh+Ro96o8nUnikPZNWBD0fMsi2ooKPXJxlyNuTrEWm9XndsqHqGdvNGHAJ3jhAZitBPT2DMq5/kUn8xvIVeYk=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4eeYoZpw5ioPx/MRVGXdKD+UkWxFFjq8zqGFd9YT/rzGsA3aB X38S1yrkeghc2IVcyUi0YGWCURWK/M6dLmi4Sehp8Gb1xaSqN9l5gm+B X-Gm-Gg: AfdE7cn5d8bFeFAqhhcCOqspmWpnZOcEcoNVjlSuTjwEu7kwVpSR/2s7jmwRDiMW4HP eYXif1lcsK0UvM7Pf2qJt7DY6O+EjewpLHZEfV65zuCP17twPsWvj7Jx4ZGL06zUTtvR5iruuoK 3eHcOl66+7i+3q/GGGlpDm4OPHKMQ5k/48JFaMiI36I29RgpAUhqTMujnwKXGzOzky5d4uZCZnj gDs7rdlLBbvIFlAbFrTQYt/xX44RbMPoYhi/LBIjxzH9H5szD7CRLO47wkuKbynFR1lDALAHCDf zq9ymxiqKnIRXKx8UcTBnk2W6WGsqXk6+J1mSxJ6UxY0/g5FpBDfYns5MKELdv+ufAFvJ8QSg2S 0KLF12aOC+kNAGydO2+sIOOetWCx6Fyb6OVXodybd3Qz3FV5pMEOFGRhW/cTg21a3mOSBuP+uYf XVtSYQN71dDOwFDThh5qKAU+iOm1PhX55p3DMJEtjWEtoFwYJjxBv54H+81vw/Odkv6n7+y5wP+ XI= X-Received: by 2002:a17:90b:3c4d:b0:37f:d70a:9605 with SMTP id 98e67ed59e1d1-38dc73bccedmr4361831a91.9.1783822395623; Sat, 11 Jul 2026 19:13:15 -0700 (PDT) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:c63e:9756:a95c:c75]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3117d847e17sm54796692eec.18.2026.07.11.19.13.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 19:13:14 -0700 (PDT) From: Dmitry Torokhov Date: Sat, 11 Jul 2026 19:12:49 -0700 Subject: [PATCH v3 08/10] ARM: s3c: crag6410: convert PMIC DVS GPIO to software properties Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-samsung-kp-v3-8-b2fcaba77aff@gmail.com> References: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> In-Reply-To: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peter Griffin , Alim Akhtar , Russell King , Mark Brown , Linus Walleij , Charles Keepax , Sam Protsenko , Arnd Bergmann , Bartosz Golaszewski Cc: Krzysztof Kozlowski , linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, patches@opensource.cirrus.com X-Mailer: b4 0.16-dev-b242f Convert the PMIC DVS GPIO configuration from a legacy lookup table to software properties. We use the new 'dcdc_swnodes' field in 'struct wm831x_pdata' to pass the software node to the regulator driver. We keep the DVS configuration parameters (control source, startup state) in the platform data. Assisted-by: Antigravity:gemini-3.5-flash Signed-off-by: Dmitry Torokhov --- arch/arm/mach-s3c/mach-crag6410.c | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/arch/arm/mach-s3c/mach-crag6410.c b/arch/arm/mach-s3c/mach-cra= g6410.c index 757c0f383ff1..1abf08fdb543 100644 --- a/arch/arm/mach-s3c/mach-crag6410.c +++ b/arch/arm/mach-s3c/mach-crag6410.c @@ -456,6 +456,17 @@ static struct pca953x_platform_data crag6410_pca_data = =3D { .irq_base =3D -1, }; =20 +static const struct property_entry crag_dcdc1_properties[] =3D { + PROPERTY_ENTRY_GPIO("dvs-gpios", + SAMSUNG_GPIO_NODE('K'), 0, GPIO_ACTIVE_HIGH), + { } +}; + +static const struct software_node crag_dcdc1_swnode =3D { + .name =3D "wm831x-buckv-dcdc1", + .properties =3D crag_dcdc1_properties, +}; + /* VDDARM is controlled by DVS1 connected to GPK(0) */ static struct wm831x_buckv_pdata vddarm_pdata =3D { .dvs_control_src =3D 1, @@ -633,6 +644,9 @@ static struct wm831x_pdata crag_pmic_pdata =3D { &vddint, /* DCDC2 */ &vddmem, /* DCDC3 */ }, + .dcdc_swnodes =3D { + &crag_dcdc1_swnode, + }, =20 .ldo =3D { &vddsys, /* LDO1 */ @@ -656,24 +670,6 @@ static struct wm831x_pdata crag_pmic_pdata =3D { .touch =3D &touch_pdata, }; =20 -/* - * VDDARM is eventually ending up as a regulator hanging on the MFD cell d= evice - * "wm831x-buckv.1" spawn from drivers/mfd/wm831x-core.c. - * - * From the note on the platform data we can see that this is clearly DVS1 - * and assigned as dcdc1 resource to the MFD core which sets .id of the ce= ll - * spawning the DVS1 platform device to 1, then the cell platform device - * name is calculated from 10*instance + id resulting in the device name - * "wm831x-buckv.11" - */ -static struct gpiod_lookup_table crag_pmic_gpiod_table =3D { - .dev_id =3D "wm831x-buckv.11", - .table =3D { - GPIO_LOOKUP("GPIOK", 0, "dvs", GPIO_ACTIVE_HIGH), - { }, - }, -}; - static struct i2c_board_info i2c_devs0[] =3D { { I2C_BOARD_INFO("24c08", 0x50), }, { I2C_BOARD_INFO("tca6408", 0x20), @@ -931,7 +927,7 @@ static void __init crag6410_machine_init(void) s3c_fb_set_platdata(&crag6410_lcd_pdata); dwc2_hsotg_set_platdata(&crag6410_hsotg_pdata); =20 - gpiod_add_lookup_table(&crag_pmic_gpiod_table); + software_node_register(&crag_dcdc1_swnode); i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0)); gpiod_add_lookup_table(&crag_wm1250_ev1_gpiod_table); i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1)); --=20 2.55.0.795.g602f6c329a-goog From nobody Sat Jul 25 23:03:45 2026 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 11B39367B68 for ; Sun, 12 Jul 2026 02:13:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822403; cv=none; b=QBRE38zgVhx2NMwMCaJjcmXWBCzXDLMS88BrrGiolZtaW2ydzT7/C4hIHoRjhr58dXyRjeE6ATOSunlOS0+AfAYJbaPZIsxlzqDeDJE3RtQAtXXXjxlmMogy9xib6uYGNP69L1F7g1cjE7FaRp4NCgeV8yrP8bspHJvYm3YUj4s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822403; c=relaxed/simple; bh=pmB1LThOcInNAZpQUCAtiEt2zBXBXKrElnYapsWXDNc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qOBKzWETrauLQSrZ0C89LMtjyL1Q6IHuI44QAI4BUZVT/BZ4ajQ7Ai4oq0do9I82vts486HwjMeRRva+AsZUC1qDBoTdSCuMsyalB12nx4/BCwzMSmCoABZerka14DCqQEf6Yza0rdqhsJ+aH3yE2L82oxDP30475+pCjOt5oEg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Qkr8Kl8f; arc=none smtp.client-ip=209.85.216.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Qkr8Kl8f" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-3847e8b0f3aso1820627a91.3 for ; Sat, 11 Jul 2026 19:13:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783822397; x=1784427197; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=D66XWjgtUCsx9ojkNcJlPyxMEJV2A88EMZ1xU4Y6xY8=; b=Qkr8Kl8ft7bX78aIbXcFrAflWLjsCDAiBl6Rg8CcpRAYdgbrN1AFXIkUxtWay4IbBk ML8139CccmJ+wldJBul2daIBhjIpLDAZ8ZmvOwaAhv2u61SF4FShKKLc9Kc4GFKAMWyV 3yGdapoi8DV2fM2PPQs4dRQ8K6KfWfJ4TYF+XPTorrXZ6WY3dyY4w2X0UUn1pVietQrp o7nkDEbRNmD+/3PQ4k7Kl8vHdLvry9CCutVP7B7ICv4Zx7pxWO95U8z/5/rdZx3G9ol3 MQiVwCX6oxvQhgI+22pgyIUvhrUvMwujVyZ3C4zsNVXPmwa4NOOTOOC5CPg2tztUZU+z wRVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783822397; x=1784427197; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=D66XWjgtUCsx9ojkNcJlPyxMEJV2A88EMZ1xU4Y6xY8=; b=auMrPDUQecsmx/b+p1KCfNc36VlDjy2OUN/tyrtlDLkhO677O94k8FQUIFazZ4zIlW NG8smS/p0PeRI+iBwkm8e9nv4DxPnyGdAe8LoHaZFqcs1cn5SW+rTwvCkz9Z0+BhsHXB fXfqPeI+PmZ4z0Oz4VryA0e5H6kL2VUWafFAUzVcwPyMNshSziR4EJPKrpRre2T6nQ2p kttXbwP8SJEAlepMscl3QanL87/nYmxsAY0lmRGw369f7/T0Tld09BVAeg/vqh/jUa8b 94AYS5QEFUG83V15vwOe+MdnW9alPyrt9lUxFBphwwSe06C3RJJxYLn7vvLVvakbvldB tZ6Q== X-Forwarded-Encrypted: i=1; AHgh+Ro6Nl5HnWbrDFpZUnAOp7IvannFMIVOwZM0KdC2PFPj/pDh3vQp6gvNy8Q9tBBS/iZCvCitOth+y15q7Z0=@vger.kernel.org X-Gm-Message-State: AOJu0YzBK7olVISentMX1Bq7qBHA1326PtetU4rV8oG/mEq/9h+FM3Jl q0OcrubWMex3/h2xyhb69HXIZjJCc3xa08LYnexbNwe6WH8TFuXtgSVX X-Gm-Gg: AfdE7cmLp01sr7DC2acZqZFn0tvAAEOcJJBDf+ABxuWoyresokgS8i0VVyiVFgSXe1s vIyDa1XMFFk/T5Uoh8bRFsYu/MZ6iQQUk0azGAHz5+bRUoOK1ycpc8N5GWUfOaahR5pdLy1KcWk uUpSbnx8n44KcpwqJjhAeksMownEMvZ7AblxnuGBVAuCEPSxu1UapZeCX8bGFSFg4CUOBuhmsvE cL8bX9hGmK+MAuYmZXBmalapAQHnCRy8GsTEUM2i43Uq11uKENC5hlsdrzidfauV4RkZO/3vcz9 dDNSbsRE956noj8x0tsXmWfMtJVtNpbigZX0ZrrqQM7iobbsVdHlrTwTpRoHhrTBOxtVIoOy1zS wAsyulhkzWbDBM3B4IHKOXP50G57ChjVCbqNuKuUIfqD4yIe+gv8qk1MzjoXeWXaw0Du38n54Sm 67ougq488Ebe0xbL9vGTFlTCWrp0RaFvHtyZmB9GJDhzYwA+aCoQWsKbFpyhNqKndO4nR18s5cB Nw= X-Received: by 2002:a17:90b:5686:b0:37f:9ce1:cdb3 with SMTP id 98e67ed59e1d1-38dc77993ecmr4169672a91.33.1783822397411; Sat, 11 Jul 2026 19:13:17 -0700 (PDT) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:c63e:9756:a95c:c75]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3117d847e17sm54796692eec.18.2026.07.11.19.13.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 19:13:16 -0700 (PDT) From: Dmitry Torokhov Date: Sat, 11 Jul 2026 19:12:50 -0700 Subject: [PATCH v3 09/10] ARM: s3c: crag6410: convert basic-mmio-gpio and LEDs to software properties Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-samsung-kp-v3-9-b2fcaba77aff@gmail.com> References: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> In-Reply-To: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peter Griffin , Alim Akhtar , Russell King , Mark Brown , Linus Walleij , Charles Keepax , Sam Protsenko , Arnd Bergmann , Bartosz Golaszewski Cc: Krzysztof Kozlowski , linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, patches@opensource.cirrus.com, Bartosz Golaszewski X-Mailer: b4 0.16-dev-b242f Convert the basic-mmio-gpio device and the GPIO-controlled LEDs on the Cragganmore 6410 board to use software nodes/properties. This allows removing the crag_leds_table GPIO lookup table. Assisted-by: Antigravity:gemini-3.5-flash Acked-by: Bartosz Golaszewski Signed-off-by: Dmitry Torokhov --- arch/arm/mach-s3c/mach-crag6410.c | 117 +++++++++++++++++++++-------------= ---- 1 file changed, 64 insertions(+), 53 deletions(-) diff --git a/arch/arm/mach-s3c/mach-crag6410.c b/arch/arm/mach-s3c/mach-cra= g6410.c index 1abf08fdb543..1ba3d47d85b7 100644 --- a/arch/arm/mach-s3c/mach-crag6410.c +++ b/arch/arm/mach-s3c/mach-crag6410.c @@ -319,12 +319,17 @@ static const struct property_entry crag6410_mmgpio_pr= ops[] =3D { { } }; =20 +static const struct software_node crag6410_mmgpio_node =3D { + .name =3D "basic-mmio-gpio", + .properties =3D crag6410_mmgpio_props, +}; + static struct platform_device_info crag6410_mmgpio_devinfo =3D { .name =3D "basic-mmio-gpio", .id =3D -1, .res =3D crag6410_mmgpio_resource, .num_res =3D ARRAY_SIZE(crag6410_mmgpio_resource), - .properties =3D crag6410_mmgpio_props, + .swnode =3D &crag6410_mmgpio_node, }; =20 static struct platform_device speyside_device =3D { @@ -835,61 +840,68 @@ static struct s3c_sdhci_platdata crag6410_hsmmc0_pdat= a =3D { .host_caps =3D MMC_CAP_POWER_OFF_CARD, }; =20 -static const struct gpio_led gpio_leds[] =3D { - { - .name =3D "d13:green:", - .default_state =3D LEDS_GPIO_DEFSTATE_ON, - }, - { - .name =3D "d14:green:", - .default_state =3D LEDS_GPIO_DEFSTATE_ON, - }, - { - .name =3D "d15:green:", - .default_state =3D LEDS_GPIO_DEFSTATE_ON, - }, - { - .name =3D "d16:green:", - .default_state =3D LEDS_GPIO_DEFSTATE_ON, - }, - { - .name =3D "d17:green:", - .default_state =3D LEDS_GPIO_DEFSTATE_ON, - }, - { - .name =3D "d18:green:", - .default_state =3D LEDS_GPIO_DEFSTATE_ON, - }, - { - .name =3D "d19:green:", - .default_state =3D LEDS_GPIO_DEFSTATE_ON, - }, - { - .name =3D "d20:green:", - .default_state =3D LEDS_GPIO_DEFSTATE_ON, - }, +static const struct software_node crag6410_leds_node =3D { + .name =3D "leds-gpio", }; =20 -static struct gpiod_lookup_table crag_leds_table =3D { - .dev_id =3D "leds-gpio", - .table =3D { - GPIO_LOOKUP_IDX("basic-mmio-gpio", 0, "cs", 0, GPIO_ACTIVE_LOW), - GPIO_LOOKUP_IDX("basic-mmio-gpio", 1, "cs", 1, GPIO_ACTIVE_LOW), - GPIO_LOOKUP_IDX("basic-mmio-gpio", 2, "cs", 2, GPIO_ACTIVE_LOW), - GPIO_LOOKUP_IDX("basic-mmio-gpio", 3, "cs", 3, GPIO_ACTIVE_LOW), - GPIO_LOOKUP_IDX("basic-mmio-gpio", 4, "cs", 4, GPIO_ACTIVE_LOW), - GPIO_LOOKUP_IDX("basic-mmio-gpio", 5, "cs", 5, GPIO_ACTIVE_LOW), - GPIO_LOOKUP_IDX("basic-mmio-gpio", 6, "cs", 6, GPIO_ACTIVE_LOW), - GPIO_LOOKUP_IDX("basic-mmio-gpio", 7, "cs", 7, GPIO_ACTIVE_LOW), - { }, - }, -}; +#define CRAG6410_LED_NODE(_idx, _name) \ +static const struct property_entry crag6410_led##_idx##_props[] =3D { \ + PROPERTY_ENTRY_STRING("label", _name), \ + PROPERTY_ENTRY_GPIO("gpios", &crag6410_mmgpio_node, \ + _idx, GPIO_ACTIVE_LOW), \ + PROPERTY_ENTRY_STRING("default-state", "on"), \ + { } \ +}; \ +static const struct software_node crag6410_led##_idx##_node =3D { \ + .parent =3D &crag6410_leds_node, \ + .properties =3D crag6410_led##_idx##_props, \ +} =20 -static const struct gpio_led_platform_data gpio_leds_pdata =3D { - .leds =3D gpio_leds, - .num_leds =3D ARRAY_SIZE(gpio_leds), +CRAG6410_LED_NODE(0, "d13:green:"); +CRAG6410_LED_NODE(1, "d14:green:"); +CRAG6410_LED_NODE(2, "d15:green:"); +CRAG6410_LED_NODE(3, "d16:green:"); +CRAG6410_LED_NODE(4, "d17:green:"); +CRAG6410_LED_NODE(5, "d18:green:"); +CRAG6410_LED_NODE(6, "d19:green:"); +CRAG6410_LED_NODE(7, "d20:green:"); + +static const struct software_node *crag6410_leds_swnodes[] =3D { + &crag6410_leds_node, + &crag6410_led0_node, + &crag6410_led1_node, + &crag6410_led2_node, + &crag6410_led3_node, + &crag6410_led4_node, + &crag6410_led5_node, + &crag6410_led6_node, + &crag6410_led7_node, + NULL }; =20 +static void __init crag6410_setup_leds(void) +{ + struct platform_device_info leds_info =3D { + .name =3D "leds-gpio", + .id =3D PLATFORM_DEVID_NONE, + }; + struct platform_device *pd; + int err; + + err =3D software_node_register_node_group(crag6410_leds_swnodes); + if (err) { + pr_err("failed to register leds software nodes: %d\n", err); + return; + } + + leds_info.fwnode =3D software_node_fwnode(&crag6410_leds_node); + + pd =3D platform_device_register_full(&leds_info); + err =3D PTR_ERR_OR_ZERO(pd); + if (err) + pr_err("failed to create leds-gpio device: %d\n", err); +} + static struct dwc2_hsotg_plat crag6410_hsotg_pdata; =20 static struct gpiod_lookup_table crag_spi0_gpiod_table =3D { @@ -939,12 +951,11 @@ static void __init crag6410_machine_init(void) platform_add_devices(crag6410_devs0, ARRAY_SIZE(crag6410_devs0)); platform_device_register_full(&crag6410_mmgpio_devinfo); =20 - gpiod_add_lookup_table(&crag_leds_table); crag6410_setup_keypad(); crag6410_setup_gpio_keys(); =20 platform_add_devices(crag6410_devs1, ARRAY_SIZE(crag6410_devs1)); - gpio_led_register_device(-1, &gpio_leds_pdata); + crag6410_setup_leds(); =20 regulator_has_full_constraints(); =20 --=20 2.55.0.795.g602f6c329a-goog From nobody Sat Jul 25 23:03:45 2026 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (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 15A4A366831 for ; Sun, 12 Jul 2026 02:13:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822413; cv=none; b=AIX7Nr0d71NfddV7UYUeTGSIyaMwHJ5I1ZS8il7Sqi30zIjKsV0z0NBjoQwo70EYmxZrMRv7H+/rtVSu7Kh+K6egtnnED7St5Eo4h7W2LjgdQkIHqvy9nHjZctGKBQGQ+3T9FIdDrk6qIZQA/sp7Mg3OzLjTNX5ZlLaWzTrK7u4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783822413; c=relaxed/simple; bh=EYs1cAQYrxKtJFmAc2+/heSToHPC1pab4g1v6irxLGE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=In2ZWcH7QaekRGs0WzlDyeBpkYDUZxqbrPxYuX0/MzwNDJ/3iPbcZKBrDsko4BLLm+SwSKtvrorwlMczLdn1HAk0DGq0McEQbBF3MsHBAfJFLfzkz8AAk+Gw95EN9vAatVwDnGp9CQvKQJulj4UTyYojHLSv6JI4MWm4RnzYLl4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JKX1gEis; arc=none smtp.client-ip=209.85.216.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JKX1gEis" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-385ea3ce80dso2365361a91.2 for ; Sat, 11 Jul 2026 19:13:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783822399; x=1784427199; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=5AFVwN6iVzF4B4uVu1QcDeH3p0cXhfS2t6vqHL4txKQ=; b=JKX1gEisD6+DPf0N22IU55YgCHw26SBj8lUF+6kIuj8/2cwKiC4YqBoMmt/jl5PDJn ieShNco9qSSNODx4iWxzRC3Lksl3rdRNPlgUCjUSgWNvJmavEYGkE63qND1Seb0dWIGu Fjk2JTfbsXgrYSHBYQ5uGc6kw7/ai3v2BQGnHyNJIBCGfAn1kHx8j21c79NA1F4IfsRU ffw6Fu81WH26VX/cBl4JB0YDzukLT3OgnzAZnwCg2NYBweqw1RaSFuMw3IH+yQGa1PkZ jB3WnD/ah89HHyhkQB11uM+odLkhhKoKdsWJHsfrw3j8Bp8ujRleB959KNsrodtw0/zO amyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783822399; x=1784427199; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=5AFVwN6iVzF4B4uVu1QcDeH3p0cXhfS2t6vqHL4txKQ=; b=h4BIgkg6rN/SAoU0lkXhB8RrdbfTZGuncLiYE6onImdFBPLcWbnghvOL7qeVPPwPxJ HcfXSsAJFHM71pgi63RknqLyNG01solc5jqw06MDfeKg7BmZ5cltbN1q44Gw6WpHbBhO edgx1htq/ir1z9ptsbZmTqcr7dJC4Vt3t5q///ox+I9wW02d9LjrANThiZyqbHqIt5XS VWalocZKRLIx3gIU//4JqaU9tWlKJWFbUe5c8a5FM2mscKzMw1QQFzg+YHtLaEzzXTtk 8op6ughNS2BXVc8Je7U1ZDt6zaRkdKG67a9A3BBinVvCGKx17tQrHTBVstAIDap3oRLU U/Hg== X-Forwarded-Encrypted: i=1; AHgh+Rr/l6cs8PewMFE6MNmMU39qV3lLEFHf5nk7Icj42YOB4iIqH/+YTQe0BHcA1+SOFIT+y8+Gcxg0c2eo/uY=@vger.kernel.org X-Gm-Message-State: AOJu0YyBV4g4iiI5sY+GlB5LOMI5Bo77GGjK85d/dEsaylwQ1ZtTnzhq eiebb28kjDheVisB0cgInaD5b+OqKbt8LKtnZDWfkeLxCzcKboeNLR2i X-Gm-Gg: AfdE7cklRiYSMUxwNc/JVAu9GkCHsTe8gGR1kYGQy9V4QoCX1v6/0zPRKZ+MpnxFhgg /Nq3ElZmymfHWB/KIz5ZTJYqrt1bgqWFw5F4X+6vJezXQVdUhcFE1/4oT73F7G2JMEg4HvFh/KY Gk3Krj1lIEIWoMUR/PbZx0dWzmTZgWtM8Q0kulQjF8oauQNZjlNU9c+94MJlZvpalc47xzII2Qn 2hwFkNGbpB7oPwjgjoFJzzrMZ1F8daR3uOcXC0j+E9E8F9/C2IYXDY8hSooY2k2C6rA7RC89QCf KPcR7xyh4Fh4cvMhWXeumhmLqblGkUQgO4MkQaTFaqoQLwk/6pLXzfifJ7aD0LDcOFpySxlZe35 relagqT9UHETX3seDV5epSlvy64rZg+lot6z5z/iRRQcVlmZEdYOFlyr+F6lbbb5yOvyy+R9NLw mbqjay8Fc2Rp1KSof8GLM/WENTcHA21UNh5+ul74MrOVwG380/3EAEi6IW/Vj1wy9Ltg8zznaKb VKnb/QIrqdGsg== X-Received: by 2002:a17:90b:2641:b0:387:e0cb:7f4 with SMTP id 98e67ed59e1d1-38dc783efacmr4605750a91.40.1783822399368; Sat, 11 Jul 2026 19:13:19 -0700 (PDT) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:c63e:9756:a95c:c75]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3117d847e17sm54796692eec.18.2026.07.11.19.13.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 19:13:18 -0700 (PDT) From: Dmitry Torokhov Date: Sat, 11 Jul 2026 19:12:51 -0700 Subject: [PATCH v3 10/10] ARM: s3c: crag6410: convert remaining GPIO lookup tables to property entries Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-samsung-kp-v3-10-b2fcaba77aff@gmail.com> References: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> In-Reply-To: <20260711-samsung-kp-v3-0-b2fcaba77aff@gmail.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peter Griffin , Alim Akhtar , Russell King , Mark Brown , Linus Walleij , Charles Keepax , Sam Protsenko , Arnd Bergmann , Bartosz Golaszewski Cc: Krzysztof Kozlowski , linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, patches@opensource.cirrus.com, Bartosz Golaszewski X-Mailer: b4 0.16-dev-b242f Static property entries support defining GPIOs and are more similar to device tree properties and are not prone to losing link between device and a lookup table because of changes in device name. Convert the board to use them for WM1250 and SPI0 devices. This also fixes issue with recent conversion to GPIO descriptors where GPIO lookup tables were specifying incorrect GPIO chip name ("GPIO" vs "GP"). Fixes: 10a366f36e2a ("ASoC: wm1250-ev1: Convert to GPIO descriptors") Fixes: a45cf3cc72dd ("spi: s3c64xx: Convert to use GPIO descriptors") Assisted-by: Antigravity:gemini-3.5-flash Acked-by: Bartosz Golaszewski Signed-off-by: Dmitry Torokhov --- arch/arm/mach-s3c/devs.c | 35 ----------------- arch/arm/mach-s3c/devs.h | 1 - arch/arm/mach-s3c/mach-crag6410.c | 83 ++++++++++++++++++++++++++++-------= ---- 3 files changed, 59 insertions(+), 60 deletions(-) diff --git a/arch/arm/mach-s3c/devs.c b/arch/arm/mach-s3c/devs.c index 0237307b9238..d1125316043b 100644 --- a/arch/arm/mach-s3c/devs.c +++ b/arch/arm/mach-s3c/devs.c @@ -335,38 +335,3 @@ void __init dwc2_hsotg_set_platdata(struct dwc2_hsotg_= plat *pd) npd->phy_exit =3D s3c_usb_phy_exit; } #endif /* CONFIG_S3C_DEV_USB_HSOTG */ - -#ifdef CONFIG_S3C64XX_DEV_SPI0 -static struct resource s3c64xx_spi0_resource[] =3D { - [0] =3D DEFINE_RES_MEM(S3C_PA_SPI0, SZ_256), - [1] =3D DEFINE_RES_IRQ(IRQ_SPI0), -}; - -struct platform_device s3c64xx_device_spi0 =3D { - .name =3D "s3c6410-spi", - .id =3D 0, - .num_resources =3D ARRAY_SIZE(s3c64xx_spi0_resource), - .resource =3D s3c64xx_spi0_resource, - .dev =3D { - .dma_mask =3D &samsung_device_dma_mask, - .coherent_dma_mask =3D DMA_BIT_MASK(32), - }, -}; - -void __init s3c64xx_spi0_set_platdata(int src_clk_nr, int num_cs) -{ - struct s3c64xx_spi_info pd; - - /* Reject invalid configuration */ - if (!num_cs || src_clk_nr < 0) { - pr_err("%s: Invalid SPI configuration\n", __func__); - return; - } - - pd.num_cs =3D num_cs; - pd.src_clk_nr =3D src_clk_nr; - pd.cfg_gpio =3D s3c64xx_spi0_cfg_gpio; - - s3c_set_platdata(&pd, sizeof(pd), &s3c64xx_device_spi0); -} -#endif /* CONFIG_S3C64XX_DEV_SPI0 */ diff --git a/arch/arm/mach-s3c/devs.h b/arch/arm/mach-s3c/devs.h index 2737990063b1..90a86ade3570 100644 --- a/arch/arm/mach-s3c/devs.h +++ b/arch/arm/mach-s3c/devs.h @@ -27,7 +27,6 @@ extern struct platform_device *s3c24xx_uart_src[]; =20 extern struct platform_device s3c64xx_device_iis0; extern struct platform_device s3c64xx_device_iis1; -extern struct platform_device s3c64xx_device_spi0; =20 extern struct platform_device s3c_device_fb; extern struct platform_device s3c_device_hsmmc0; diff --git a/arch/arm/mach-s3c/mach-crag6410.c b/arch/arm/mach-s3c/mach-cra= g6410.c index 1ba3d47d85b7..9f4756898a78 100644 --- a/arch/arm/mach-s3c/mach-crag6410.c +++ b/arch/arm/mach-s3c/mach-crag6410.c @@ -443,7 +443,6 @@ static struct platform_device *crag6410_devs0[] __initd= ata =3D { =20 static struct platform_device *crag6410_devs1[] __initdata =3D { &crag6410_dm9k_device, - &s3c64xx_device_spi0, &crag6410_lcd_powerdev, &crag6410_backlight_device, &speyside_device, @@ -777,17 +776,22 @@ static struct wm831x_pdata glenfarclas_pmic_pdata =3D= { .disable_touch =3D true, }; =20 -static struct gpiod_lookup_table crag_wm1250_ev1_gpiod_table =3D { - /* The WM1250-EV1 is device 0027 on I2C bus 1 */ - .dev_id =3D "1-0027", - .table =3D { - GPIO_LOOKUP("GPION", 12, "clk-ena", GPIO_ACTIVE_HIGH), - GPIO_LOOKUP("GPIOL", 12, "clk-sel0", GPIO_ACTIVE_HIGH), - GPIO_LOOKUP("GPIOL", 13, "clk-sel1", GPIO_ACTIVE_HIGH), - GPIO_LOOKUP("GPIOL", 14, "osr", GPIO_ACTIVE_HIGH), - GPIO_LOOKUP("GPIOL", 8, "master", GPIO_ACTIVE_HIGH), - { }, - }, +static const struct property_entry crag_wm1250_ev1_properties[] =3D { + PROPERTY_ENTRY_GPIO("clk-ena-gpios", + SAMSUNG_GPIO_NODE('N'), 12, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("clk-sel0-gpios", + SAMSUNG_GPIO_NODE('L'), 12, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("clk-sel1-gpios", + SAMSUNG_GPIO_NODE('L'), 13, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("osr-gpios", + SAMSUNG_GPIO_NODE('L'), 14, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("master-gpios", + SAMSUNG_GPIO_NODE('L'), 8, GPIO_ACTIVE_HIGH), + { } +}; + +static const struct software_node crag_wm1250_ev1_swnode =3D { + .properties =3D crag_wm1250_ev1_properties, }; =20 static struct i2c_board_info i2c_devs1[] =3D { @@ -800,7 +804,8 @@ static struct i2c_board_info i2c_devs1[] =3D { { I2C_BOARD_INFO("wlf-gf-module", 0x24) }, { I2C_BOARD_INFO("wlf-gf-module", 0x25) }, { I2C_BOARD_INFO("wlf-gf-module", 0x26) }, - { I2C_BOARD_INFO("wm1250-ev1", 0x27), }, + { I2C_BOARD_INFO("wm1250-ev1", 0x27), + .swnode =3D &crag_wm1250_ev1_swnode, }, }; =20 static struct s3c2410_platform_i2c i2c1_pdata =3D { @@ -904,15 +909,48 @@ static void __init crag6410_setup_leds(void) =20 static struct dwc2_hsotg_plat crag6410_hsotg_pdata; =20 -static struct gpiod_lookup_table crag_spi0_gpiod_table =3D { - .dev_id =3D "s3c6410-spi.0", - .table =3D { - GPIO_LOOKUP_IDX("GPIOC", 3, "cs", 0, GPIO_ACTIVE_LOW), - GPIO_LOOKUP_IDX("GPION", 5, "cs", 1, GPIO_ACTIVE_LOW), - { }, - }, +static const struct software_node_ref_args crag6410_spi0_gpio_refs[] =3D { + SOFTWARE_NODE_REFERENCE(SAMSUNG_GPIO_NODE('C'), 3, GPIO_ACTIVE_LOW), + SOFTWARE_NODE_REFERENCE(SAMSUNG_GPIO_NODE('N'), 5, GPIO_ACTIVE_LOW), +}; + +static const struct property_entry crag6410_spi0_properties[] __initconst = =3D { + PROPERTY_ENTRY_REF_ARRAY("cs-gpios", crag6410_spi0_gpio_refs), + { } +}; + +static const struct resource crag6410_spi0_resource[] __initconst =3D { + [0] =3D DEFINE_RES_MEM(S3C_PA_SPI0, SZ_256), + [1] =3D DEFINE_RES_IRQ(IRQ_SPI0), +}; + +static const struct s3c64xx_spi_info crag6410_spi0_platform_data __initcon= st =3D { + .num_cs =3D 2, + .cfg_gpio =3D s3c64xx_spi0_cfg_gpio, }; =20 +static const struct platform_device_info crag6410_spi0_info __initconst = =3D { + .name =3D "s3c6410-spi", + .id =3D 0, + .res =3D crag6410_spi0_resource, + .num_res =3D ARRAY_SIZE(crag6410_spi0_resource), + .data =3D &crag6410_spi0_platform_data, + .size_data =3D sizeof(crag6410_spi0_platform_data), + .dma_mask =3D DMA_BIT_MASK(32), + .properties =3D crag6410_spi0_properties, +}; + +static void __init crag6410_setup_spi0(void) +{ + struct platform_device *pd; + int err; + + pd =3D platform_device_register_full(&crag6410_spi0_info); + err =3D PTR_ERR_OR_ZERO(pd); + if (err) + pr_err("failed to create spi0 device: %d\n", err); +} + static void __init crag6410_machine_init(void) { /* Open drain IRQs need pullups */ @@ -941,18 +979,15 @@ static void __init crag6410_machine_init(void) =20 software_node_register(&crag_dcdc1_swnode); i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0)); - gpiod_add_lookup_table(&crag_wm1250_ev1_gpiod_table); i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1)); =20 - gpiod_add_lookup_table(&crag_spi0_gpiod_table); - s3c64xx_spi0_set_platdata(0, 2); - pwm_add_table(crag6410_pwm_lookup, ARRAY_SIZE(crag6410_pwm_lookup)); platform_add_devices(crag6410_devs0, ARRAY_SIZE(crag6410_devs0)); platform_device_register_full(&crag6410_mmgpio_devinfo); =20 crag6410_setup_keypad(); crag6410_setup_gpio_keys(); + crag6410_setup_spi0(); =20 platform_add_devices(crag6410_devs1, ARRAY_SIZE(crag6410_devs1)); crag6410_setup_leds(); --=20 2.55.0.795.g602f6c329a-goog