From nobody Sun Feb 8 21:32:13 2026 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (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 E56D915624B for ; Tue, 13 Jan 2026 04:03:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768277013; cv=none; b=usu+Gv2y0V09omBoFkGFloa2nyjaOsChX8L4b0bcJXcpzZeg81CW4++414GCaXW2sJ1PTYhOwjf2zBKT7rQq4fDOMJbwhIrLuGuv+f1jX3vCuWx57/AN/U5TT6eSKZcQ8sEMShzdGJ+0myevTE/fGkXjUHycv514im/b+o2rork= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768277013; c=relaxed/simple; bh=4rhW+lqh8yx4MRL9+ykYiG9ztcwailoQR0p631n7x4M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m0/E7BBcgEBFviIi6ty4o7WDjUoGYsL4EUH8LwVLW+1I5j87eh6cN7a/czIY6s1dMlbAAPNNkK56Bu7aWSSRTDf/we0JJmfN19DgNZwnWF3vEbrdlH7hLDs76xLi1Bm/TF/42cLCnrT+p/PA7g9cH52IxC/6lMrpv6XzLHjy4u8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=sirat.me; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.210.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=sirat.me Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-81f47610542so968012b3a.0 for ; Mon, 12 Jan 2026 20:03:31 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768277009; x=1768881809; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=oNlx+dvD5WQQtQmd/Zj78M/kYz4+lKG43Clk7XuZhDA=; b=rYwjRjhfWumXLlXyJb0WP2JrwFNjJ6EwBVNiBk1jyVqsOBdyH/u+paVs4TFoKiEYqt PK4puzURWnPR5D3LAWJ3fHj3VzfDW/0UPgzHtXEtMG2yJuS5ebCOlY/zAijL7k3K3fc4 K20UG5Aj0JPGfC9AV4W5AjJuN+jawTQxW5Vg1SbVGNadJZGh0TxA/WLz9vp6qyMDBauW ZJzXgEQ4P8lBoeBad2gPaXFIu/jKBsaN3qleFQCPKsX8frqf+Ck6KHd0HtVsG6l/Ocj+ 8dscdic3wtyHyPScgzn2jWNkkwLPEwb47mx/Bqh9qToOZGKgATb6mv6z9l6srUl9kISo Vr1A== X-Gm-Message-State: AOJu0YzmVRZNO8N8T2RJLEm+yeGz0QvbvwIF3gTziJsgGgkqrzzAlpFr gs98hiX+W8yC9XFCSej2TChTx/sMrTEZrGb6OehdsepeomKLvKu8Q3BG X-Gm-Gg: AY/fxX64toUZRuSy0GwzqpDTprnx8IVrgl9akMx4a5PRw8HSBG8TkMYsZ+dFQXlcgRm u3i6ZV4EupH9BHghNgZ7SR0NRHlm5XGaT4rJGIsrRUHDQxtz5wsk2vXUZIfwbfvm9sx+zpyzRqM 6ZkeN3x5m09goBVVvIgWcy9mAyZtv6e3wtJzYwGRvzaa1eW8XqkAt+61+nKONk1ECrXnniHVCsG uIWGigDUsGjwoGDbUuJMIRI5oPRnllxyYCd4j01cvxlfolgQtPjtYlyhDQLOehxskK8mOG92+Hg 8Yi/lUi5ZgZB9PVn01jvN6yJeUA6Kx64XWvMWBvGFxpNx7NlaHYFcQml2NeeZobjBAVh6QaWxly MyJCymhQT0q3F3iXLZ77tP08btAjS/l7m8CMEHh2nq+yacYC8d98bygAgPUydwAUAt0lxf52DU8 x7E4TG+J+71OhfxH06Vamjnjc= X-Google-Smtp-Source: AGHT+IG1Ir1/v24oTE7hw5nYOrPwMU5BXR8droriVbgQc7JnxAMbxv6pESG2Jhxen65aEhyXsjDo3A== X-Received: by 2002:a05:6a00:4399:b0:7e8:450c:61c9 with SMTP id d2e1a72fcca58-81b80ac5d3cmr15011436b3a.57.1768277009078; Mon, 12 Jan 2026 20:03:29 -0800 (PST) Received: from DESKTOP-LUHV3PD.localdomain ([59.152.111.50]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f3ce8df8bsm7776016b3a.40.2026.01.12.20.03.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jan 2026 20:03:28 -0800 (PST) From: Siratul Islam To: andy@kernel.org, geert@linux-m68k.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Siratul Islam Subject: [PATCH 1/4] dt-bindings: vendor-prefixes: Add titanmec Date: Tue, 13 Jan 2026 10:02:39 +0600 Message-ID: <20260113040242.19156-2-email@sirat.me> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260113040242.19156-1-email@sirat.me> References: <20260113040242.19156-1-email@sirat.me> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add vendor prefix for Shenzhen Titan Micro Electronics Co., Ltd. Signed-off-by: Siratul Islam Acked-by: Krzysztof Kozlowski --- Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Docum= entation/devicetree/bindings/vendor-prefixes.yaml index c7591b2aec2a..2fd273ccd66a 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml @@ -1654,6 +1654,8 @@ patternProperties: description: Texas Instruments "^tianma,.*": description: Tianma Micro-electronics Co., Ltd. + "^titanmec,.*": + description: Shenzhen Titan Micro Electronics Co., Ltd. "^tlm,.*": description: Trusted Logic Mobility "^tmt,.*": --=20 2.47.3 From nobody Sun Feb 8 21:32:13 2026 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (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 C0C1034F472 for ; Tue, 13 Jan 2026 04:03:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768277014; cv=none; b=WpTaNRRW31BIbVUoO4YxudrpbuPllDt3PjhKtnA6dTCl9UuVOe8ZGVu+a/nXTyp8Yf1XlhmN4wnRh9fuiqGYyazWYNve+B070MtabXCVB+jwuTqiXZmk0wGXh7RwAGwburFj3UYS/CoeVldLg2fCDqNnAP+BeXjHLkMN0F7inFA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768277014; c=relaxed/simple; bh=+4P7G/H5pJ2QK5RHeTSzPwOj1SVeEC1sYp8nexz72Pc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J3P8VbkzupJTeiOTaQAz9s3S1jOpvhU69y7/7rox+NJFAGWyxFMRilhQgusmISpq1+TuVwkzRaIG4swj9EWMm1BbAe3jaMrOY7ber96GTz0YzNVZRUYeucN6j0T4XAYRsHupJkyI7wOG5JieqpxogOz6jdgU+F7V3vti/TCrrSE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=sirat.me; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.210.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=sirat.me Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-81e98a1f55eso1707788b3a.3 for ; Mon, 12 Jan 2026 20:03:33 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768277013; x=1768881813; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=jszI5kCb7GvcfABR9rq1Vqye6t7PTQaLns3oO/bmQjE=; b=w+ghpLnUNgvD6NJYTcs4xbzH6bqlrdm49Dvap4waF6DESrib/k2vqbgoEdJS/cpQUo FOM9iZQ5U878CHvuUiby+0P0ex37tGAYN44mqidZ8jfFGic/oFIo9lpC/jxYb5wV/Lxi sa1Pkp25ig8pJ8AUkoebboK/o6YmIj4WVJ1vLppxBzIqGp/FwWh/rasgjHxY8n5Foidn sqLsi6z+iJ2cGLT5JcQOg3K5cOZrC0EzGZLvh8iorw2z9fhIrKr7bpljTaQeo3FBugjT Y34NwxW1AtN+09sDAiT5836X4PLP2CoUBbNmKWLiRqIWjhWXeVbBjv0XkoOuwHQqTz8O aSDw== X-Gm-Message-State: AOJu0YzQGb7fePBhmOj7IL1bR8AgQOxwlCiNCgsOd9qSZq8aAmJTAfKS tqTTiPDPAVv6qRvYXAI0vQ4/6nad8+NRXXDvGfkLr/x+qGa9LDr4LLSJ X-Gm-Gg: AY/fxX54X3CaygJ4kZl5RWjERz0JPx8u/5UlmhR62fAr+jH+D9JdVDbfsD/mWZPHKN/ Ov67cGoMYLH2q3Us8yoyL+I6+ETvlPCnSqO+hEjkqhhpYLQz6QM1nXNNle+kWgy+d1WGud+cfAO hYk+0Xv8otz/Q3M2vrtt0JTUaUaih0etDRQnkIM5YQO6WGDV1pUWsXxoIOJH7VOEIyIwrEBfNaF rExkA1JbRbJdCMYrBKsEi6ZYbFKeEAOqiER62Q7pXhnyeCLtf6dvY8rkXS3fVzeAteQhSqrO0YJ IP2MToXtIEp6WKHmaNBpXyJOEL8rPz5PwPPfNxI4c5xdmfuSiiO+YPIBjRV4J83ymQpddxi7XHP 51Bh85sLNCGW385KaaAni4KrzjBMnMuYBTtnmAj6ux7IsOOe7DwZi2qVouHsrjA/IOKYQi8wXij NR3dp6i6HphBZXICf4U+/UyPI= X-Google-Smtp-Source: AGHT+IHiT7p8ZCUTApSvCEfG9fM6/CuV+9DuTxFQcPUcsmnBlVfS/7qT/UzH0Kzo5BSlCyKFYjcUIQ== X-Received: by 2002:a05:6a00:4387:b0:81f:42d7:aba2 with SMTP id d2e1a72fcca58-81f42d7ac86mr6088826b3a.11.1768277012973; Mon, 12 Jan 2026 20:03:32 -0800 (PST) Received: from DESKTOP-LUHV3PD.localdomain ([59.152.111.50]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f3ce8df8bsm7776016b3a.40.2026.01.12.20.03.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jan 2026 20:03:32 -0800 (PST) From: Siratul Islam To: andy@kernel.org, geert@linux-m68k.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Siratul Islam Subject: [PATCH 2/4] dt-bindings: auxdisplay: Add titanmec,tm1637 Date: Tue, 13 Jan 2026 10:02:40 +0600 Message-ID: <20260113040242.19156-3-email@sirat.me> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260113040242.19156-1-email@sirat.me> References: <20260113040242.19156-1-email@sirat.me> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add device tree binding for the Titanmec TM1637 7-segment display controller. The TM1637 is a LED drive controller with a two-wire serial interface (CLK, DIO). Signed-off-by: Siratul Islam --- .../bindings/auxdisplay/titanmec,tm1637.yaml | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Documentation/devicetree/bindings/auxdisplay/titanmec,t= m1637.yaml diff --git a/Documentation/devicetree/bindings/auxdisplay/titanmec,tm1637.y= aml b/Documentation/devicetree/bindings/auxdisplay/titanmec,tm1637.yaml new file mode 100644 index 000000000000..c39000b88676 --- /dev/null +++ b/Documentation/devicetree/bindings/auxdisplay/titanmec,tm1637.yaml @@ -0,0 +1,43 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/auxdisplay/titanmec,tm1637.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: TM1637 7-segment LED display controller + +maintainers: + - Siratul Islam + +description: + The TM1637 is a 7-segment LED display controller with a two-wire serial + interface. It can drive up to 4 digits and includes brightness control. + +properties: + compatible: + const: titanmec,tm1637 + + clk-gpios: + maxItems: 1 + description: GPIO for clock line + + dio-gpios: + maxItems: 1 + description: GPIO for data input/output line + +required: + - compatible + - clk-gpios + - dio-gpios + +additionalProperties: false + +examples: + - | + #include + + display { + compatible =3D "titanmec,tm1637"; + clk-gpios =3D <&gpio 23 GPIO_ACTIVE_HIGH>; + dio-gpios =3D <&gpio 24 GPIO_ACTIVE_HIGH>; + }; --=20 2.47.3 From nobody Sun Feb 8 21:32:13 2026 Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) (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 CE62D34F26F for ; Tue, 13 Jan 2026 04:03:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768277023; cv=none; b=EuR+8TZ6/hND1FNxpcLdvDtrVKByZZWuVERRD6KwG6G7hR+MSkZPdNb3dIYWgXD2y41F/75QHnRaHz92zpZtqfU8kjzfrciWfRHkGbfEAzn2K1O9AXeILxMHfYcvvUYIGPaSBx2XUVOlcy7nE9pgwnvn769V/GvMZwEu22WpZ00= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768277023; c=relaxed/simple; bh=iMd9GL/2XUKG9j4Iduimcqhz68DwGmVOF34m+VrDYLE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NRobG7k1+dcjAOOiD5zb9o6KapovGfhCGq1AZh/fCxmeC6AcwaYLsCz1AfQ+jUAu+AJaur91UvHCXcobnzH/yAUechaahtIDYh/Sf3zxU5X+/WQUSrClCHy5XS07VgcV2lgHcHC21XOWzgj0g5zPezHh9W7iHdtLerwUnz6wCNs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=sirat.me; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.210.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=sirat.me Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-81f4f4d4822so850338b3a.3 for ; Mon, 12 Jan 2026 20:03:37 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768277017; x=1768881817; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ci7K6yNOqrdNSBFsOIy5Tf+/ZTimH+SlCTUY32nt1Bs=; b=Drwozol2Jm27RMHXycAlgSTqYsP+xFiUgPgrfL0OgEKbX0zG+sbQIdAxk3vRZXY4NL ADaKsek8i9Bceg0vfQzdquu3erDu8Mla5TCHVqM/doPRUWgdiiQ6CySPx/d3+Uyg5Rff zNlTwYPvAdsO/qb9YOLZbbFarWYTiRIydT1GJqZ6CsDAeLsPr/5oXp3/TeYuXdDfazd1 C/Umm6QK9dyO2s+Yi10OI8Pq3OLZfJStCCqcLpZkHdyFG+Ewn7yRXK6DHoeKGcpUU27T KUid/pv2qXNHCMecoWE7QgkQXa5E3ayayeXYFxN+6bIbRkKaFx5aMj5HeYZUGzjpha69 CA9w== X-Gm-Message-State: AOJu0Yy+GBvmKg1RvNBRL6R1xRDq3tZz96iPLLK6pR0tNis1HStuckf2 7SNBh/2ytuvpzXJEkNtMlGct6cMT5hmePlgwXu8ZztyIumvDcnaaMJyG X-Gm-Gg: AY/fxX4XKDfBbgccsBR5TOhB8i1NbvCpV99dH4trirjfQwni7CVRGdQ5gCyQEEBT6kY edY4EZ7kPW3LoJKlU6VEM/LnNcRSi4NEDApFCU2492fQ/l2D/aOS1jUyqSY80E4zgSh4qDqKrFG y8qXjt9sssmzRoPgipOoNRNhw2B2cHXDunWFuyhWOjRSXYSPxI0NXne7x38HyvUpaeqJE4wPxhN JyX+HMuiZlvFZ4y9gYBVddI9I1CEOuUsIoAdOOOMAclSeJViRt9qQZl6H5YRb1QRQvTS+Klya+r +giENEOxlFJDb71k2DruHwKPxPS7vVB0FrkDVRxzCp5tSKBQCaVqZ+JYrVwjp6WLPr4MlBI9y0c wQW3webSFtbFL3BuaMDv94iclOyousWMD44BWyO/NwfodE0KIk/tihVeLBXXbqhmcYYepqfTfA6 DsiQ5ayG0jnGhI2HggupituBo= X-Google-Smtp-Source: AGHT+IE7qK7U4JJNovFRHQ32/LZXLKq933uf4WmVu5S9jXshh5wylEPkN1qu2iQgq/r4UDnx1ghbQw== X-Received: by 2002:a05:6a00:1d1d:b0:81f:3fbd:ccf with SMTP id d2e1a72fcca58-81f3fbd19f4mr5980432b3a.23.1768277016789; Mon, 12 Jan 2026 20:03:36 -0800 (PST) Received: from DESKTOP-LUHV3PD.localdomain ([59.152.111.50]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f3ce8df8bsm7776016b3a.40.2026.01.12.20.03.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jan 2026 20:03:36 -0800 (PST) From: Siratul Islam To: andy@kernel.org, geert@linux-m68k.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Siratul Islam Subject: [PATCH 3/4] auxdisplay: tm1637: Add driver for TM1637 Date: Tue, 13 Jan 2026 10:02:41 +0600 Message-ID: <20260113040242.19156-4-email@sirat.me> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260113040242.19156-1-email@sirat.me> References: <20260113040242.19156-1-email@sirat.me> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a driver for the Titanmec TM1637 7-segment display controller. The TM1637 uses a custom two-wire protocol (similar to I2C but without a slave address) which requires bit-banging via GPIOs. This driver implements the protocol manually as it does not fit the standard I2C subsystem. The driver exposes a character device interface via sysfs: - 'message': Write a string to display (supports alphanumeric & dots). - 'brightness': Control intensity (0-8). Standard 7-segment mapping is handled using the kernel's map_to_7segment utility. Signed-off-by: Siratul Islam --- .../ABI/testing/sysfs-platform-tm1637 | 20 ++ drivers/auxdisplay/Kconfig | 11 + drivers/auxdisplay/Makefile | 1 + drivers/auxdisplay/tm1637.c | 297 ++++++++++++++++++ 4 files changed, 329 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-platform-tm1637 create mode 100644 drivers/auxdisplay/tm1637.c diff --git a/Documentation/ABI/testing/sysfs-platform-tm1637 b/Documentatio= n/ABI/testing/sysfs-platform-tm1637 new file mode 100644 index 000000000000..4941fd15518d --- /dev/null +++ b/Documentation/ABI/testing/sysfs-platform-tm1637 @@ -0,0 +1,20 @@ +What: /sys/bus/platform/devices/.../message +Date: January 2026 +KernelVersion: 6.19 +Contact: Siratul Islam +Description: + Write a text string to display on the 7-segment display. + Supports alphanumeric characters and decimal points. + A decimal point can be added after any character by + following it with a dot (e.g., "12.34"). + + Reading returns the current segment data in hex format. + +What: /sys/bus/platform/devices/.../brightness +Date: January 2026 +KernelVersion: 6.19 +Contact: Siratul Islam +Description: + Control display brightness. Valid range is 0-8. + Writing 0 turns off the display. + Writing 1-8 sets brightness levels, with 8 being maximum. diff --git a/drivers/auxdisplay/Kconfig b/drivers/auxdisplay/Kconfig index bedc6133f970..1450591a0a25 100644 --- a/drivers/auxdisplay/Kconfig +++ b/drivers/auxdisplay/Kconfig @@ -526,6 +526,17 @@ config SEG_LED_GPIO This driver can also be built as a module. If so, the module will be called seg-led-gpio. =20 +config TM1637 + tristate "Shenzhen Titan Micro Electronics TM1637 7-Segment Display" + depends on GPIOLIB || COMPILE_TEST + select AUXDISPLAY + help + This driver provides support for the Titanmec TM1637 7-segment + display controller connected via GPIO bit-banging. + + This driver exposes a character interface for controlling the + display content and brightness via sysfs. + # # Character LCD with non-conforming interface section # diff --git a/drivers/auxdisplay/Makefile b/drivers/auxdisplay/Makefile index f5c13ed1cd4f..5baa77da4343 100644 --- a/drivers/auxdisplay/Makefile +++ b/drivers/auxdisplay/Makefile @@ -16,3 +16,4 @@ obj-$(CONFIG_LINEDISP) +=3D line-display.o obj-$(CONFIG_MAX6959) +=3D max6959.o obj-$(CONFIG_PARPORT_PANEL) +=3D panel.o obj-$(CONFIG_SEG_LED_GPIO) +=3D seg-led-gpio.o +obj-$(CONFIG_TM1637) +=3D tm1637.o diff --git a/drivers/auxdisplay/tm1637.c b/drivers/auxdisplay/tm1637.c new file mode 100644 index 000000000000..f8623fea1d2a --- /dev/null +++ b/drivers/auxdisplay/tm1637.c @@ -0,0 +1,297 @@ +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +/* + * TM1637 7-segment display driver + * + * Copyright (C) 2026 Siratul Islam + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Commands */ +#define TM1637_CMD_DATA_AUTO_INC 0x40 +#define TM1637_CMD_ADDR_BASE 0xC0 +#define TM1637_CMD_DISPLAY_CTRL 0x80 + +/* Display control bits */ +#define TM1637_DISPLAY_ON BIT(3) +#define TM1637_BRIGHTNESS_MASK GENMASK(2, 0) +#define TM1637_BRIGHTNESS_MAX 7 + +#define TM1637_SEG_DP BIT(7) + +/* Protocol timing */ +#define TM1637_BIT_DELAY_MIN 100 +#define TM1637_BIT_DELAY_MAX 120 + +#define TM1637_DIGITS 4 + +struct tm1637 { + struct device *dev; + struct gpio_desc *clk; + struct gpio_desc *dio; + struct mutex lock; /* Protects display buffer and brightness */ + u8 brightness; + u8 buf[TM1637_DIGITS]; +}; + +/* Defines a static const 'initial_map' variable */ +static const SEG7_DEFAULT_MAP(initial_map); + +static void tm1637_delay(void) +{ + usleep_range(TM1637_BIT_DELAY_MIN, TM1637_BIT_DELAY_MAX); +} + +static void tm1637_start(struct tm1637 *tm) +{ + gpiod_direction_output(tm->dio, 1); + gpiod_set_value(tm->clk, 1); + tm1637_delay(); + gpiod_set_value(tm->dio, 0); + tm1637_delay(); + gpiod_set_value(tm->clk, 0); + tm1637_delay(); +} + +static void tm1637_stop(struct tm1637 *tm) +{ + gpiod_direction_output(tm->dio, 0); + gpiod_set_value(tm->clk, 1); + tm1637_delay(); + gpiod_set_value(tm->dio, 1); + tm1637_delay(); +} + +static bool tm1637_write_byte(struct tm1637 *tm, u8 data) +{ + bool ack; + int i; + + for (i =3D 0; i < 8; i++) { + gpiod_set_value(tm->clk, 0); + tm1637_delay(); + + if (data & BIT(i)) + gpiod_direction_input(tm->dio); + else + gpiod_direction_output(tm->dio, 0); + + tm1637_delay(); + gpiod_set_value(tm->clk, 1); + tm1637_delay(); + } + + gpiod_set_value(tm->clk, 0); + gpiod_direction_input(tm->dio); + tm1637_delay(); + + gpiod_set_value(tm->clk, 1); + tm1637_delay(); + + ack =3D !gpiod_get_value(tm->dio); + + if (!ack) + gpiod_direction_output(tm->dio, 0); + + tm1637_delay(); + gpiod_set_value(tm->clk, 0); + + return ack; +} + +static void tm1637_update_display_locked(struct tm1637 *tm) +{ + u8 ctrl_cmd; + int i; + + tm1637_start(tm); + tm1637_write_byte(tm, TM1637_CMD_DATA_AUTO_INC); + tm1637_stop(tm); + + tm1637_start(tm); + tm1637_write_byte(tm, TM1637_CMD_ADDR_BASE); + for (i =3D 0; i < TM1637_DIGITS; i++) + tm1637_write_byte(tm, tm->buf[i]); + tm1637_stop(tm); + + if (tm->brightness =3D=3D 0) + ctrl_cmd =3D 0; + else + ctrl_cmd =3D TM1637_DISPLAY_ON | ((tm->brightness - 1) & TM1637_BRIGHTNE= SS_MASK); + + tm1637_start(tm); + tm1637_write_byte(tm, ctrl_cmd); + tm1637_stop(tm); +} + +static void tm1637_update_display(struct tm1637 *tm) +{ + mutex_lock(&tm->lock); + tm1637_update_display_locked(tm); + mutex_unlock(&tm->lock); +} + +static ssize_t message_show(struct device *dev, struct device_attribute *a= ttr, char *buf) +{ + struct tm1637 *tm =3D dev_get_drvdata(dev); + int i, pos =3D 0; + + mutex_lock(&tm->lock); + for (i =3D 0; i < TM1637_DIGITS; i++) { + pos +=3D sysfs_emit_at(buf, pos, "0x%02x", tm->buf[i]); + if (i < TM1637_DIGITS - 1) + pos +=3D sysfs_emit_at(buf, pos, " "); + } + pos +=3D sysfs_emit_at(buf, pos, "\n"); + mutex_unlock(&tm->lock); + + return pos; +} + +static ssize_t message_store(struct device *dev, struct device_attribute *= attr, + const char *buf, size_t count) +{ + struct tm1637 *tm =3D dev_get_drvdata(dev); + size_t i, pos =3D 0; + size_t len; + u8 segment_data[TM1637_DIGITS] =3D {0}; + + len =3D count; + if (len > 0 && buf[len - 1] =3D=3D '\n') + len--; + + for (i =3D 0; i < len && pos < TM1637_DIGITS; i++) { + char c =3D buf[i]; + + if (c =3D=3D '.') + continue; + + segment_data[pos] =3D map_to_seg7(&initial_map, c); + + if (i + 1 < len && buf[i + 1] =3D=3D '.') + segment_data[pos] |=3D TM1637_SEG_DP; + + pos++; + } + + mutex_lock(&tm->lock); + memcpy(tm->buf, segment_data, sizeof(tm->buf)); + tm1637_update_display_locked(tm); + mutex_unlock(&tm->lock); + + return count; +} +static DEVICE_ATTR_RW(message); + +static ssize_t brightness_show(struct device *dev, struct device_attribute= *attr, char *buf) +{ + struct tm1637 *tm =3D dev_get_drvdata(dev); + unsigned int brightness; + + mutex_lock(&tm->lock); + brightness =3D tm->brightness; + mutex_unlock(&tm->lock); + + return sysfs_emit(buf, "%u\n", brightness); +} + +static ssize_t brightness_store(struct device *dev, struct device_attribut= e *attr, + const char *buf, size_t count) +{ + struct tm1637 *tm =3D dev_get_drvdata(dev); + unsigned int brightness; + int ret; + + ret =3D kstrtouint(buf, 10, &brightness); + if (ret) + return ret; + + if (brightness > TM1637_BRIGHTNESS_MAX + 1) + brightness =3D TM1637_BRIGHTNESS_MAX + 1; + + mutex_lock(&tm->lock); + if (tm->brightness !=3D brightness) { + tm->brightness =3D brightness; + tm1637_update_display_locked(tm); + } + mutex_unlock(&tm->lock); + + return count; +} +static DEVICE_ATTR_RW(brightness); + +static struct attribute *tm1637_attrs[] =3D { + &dev_attr_message.attr, + &dev_attr_brightness.attr, + NULL}; +ATTRIBUTE_GROUPS(tm1637); + +static int tm1637_probe(struct platform_device *pdev) +{ + struct device *dev =3D &pdev->dev; + struct tm1637 *tm; + + tm =3D devm_kzalloc(dev, sizeof(*tm), GFP_KERNEL); + if (!tm) + return -ENOMEM; + + tm->dev =3D dev; + + tm->clk =3D devm_gpiod_get(dev, "clk", GPIOD_OUT_LOW); + if (IS_ERR(tm->clk)) + return dev_err_probe(dev, PTR_ERR(tm->clk), "Failed to get clk GPIO\n"); + + tm->dio =3D devm_gpiod_get(dev, "dio", GPIOD_OUT_LOW); + if (IS_ERR(tm->dio)) + return dev_err_probe(dev, PTR_ERR(tm->dio), "Failed to get dio GPIO\n"); + + mutex_init(&tm->lock); + + tm->brightness =3D TM1637_BRIGHTNESS_MAX + 1; + + platform_set_drvdata(pdev, tm); + tm1637_update_display(tm); + + return 0; +} + +static void tm1637_remove(struct platform_device *pdev) +{ + struct tm1637 *tm =3D platform_get_drvdata(pdev); + + mutex_lock(&tm->lock); + tm->brightness =3D 0; + memset(tm->buf, 0, sizeof(tm->buf)); + tm1637_update_display_locked(tm); + mutex_unlock(&tm->lock); + + mutex_destroy(&tm->lock); +} + +static const struct of_device_id tm1637_of_match[] =3D { + {.compatible =3D "titanmec,tm1637"}, + {}}; +MODULE_DEVICE_TABLE(of, tm1637_of_match); + +static struct platform_driver tm1637_driver =3D { + .probe =3D tm1637_probe, + .remove =3D tm1637_remove, + .driver =3D { + .name =3D "tm1637", + .of_match_table =3D tm1637_of_match, + .dev_groups =3D tm1637_groups, + }, +}; +module_platform_driver(tm1637_driver); + +MODULE_DESCRIPTION("TM1637 7-segment display driver"); +MODULE_AUTHOR("Siratul Islam "); +MODULE_LICENSE("Dual BSD/GPL"); --=20 2.47.3 From nobody Sun Feb 8 21:32:13 2026 Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) (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 3206D34F462 for ; Tue, 13 Jan 2026 04:03:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768277023; cv=none; b=SM5DFJsSELWPTerTjf/Mv+YqVAM9IJD/Jz83O6P4CSPWkDO5Jw7jBfxpni86rKdp6+lZqo8UAPYtbt4SrZsV8rQobg+6L0NAKHh9P73fFmKsE0aF9JGbnT5QX9udXV8r/fdqfodA2JvQz7BqPec+i5N91OFQ3dTCbr2wdwOqx3o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768277023; c=relaxed/simple; bh=oZULJrlgDSgOoNwWKrAHDNNNKQll5UM5MKUNZDAne+A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mjesxnyOA0HgbI9s67X2+P6VwC/C9i8hY4+5MjLSqmtyIIrP8khITA/8l7AKLMWw8itYffyzXA0/uf7QJIxbw42iD3IOxrUedbY22MCTKQcVxIbGPhCCryBM3W5bf9fVe23duePqCBCql9T7SRSb3ih7Yi6RNALBfHdoCW7qtQ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=sirat.me; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.210.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=sirat.me Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-81e821c3d4eso2845410b3a.3 for ; Mon, 12 Jan 2026 20:03:41 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768277020; x=1768881820; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=4F3mVzjcjfaGJ6kUxVWxBLjChOEXO+b4aTG7bNc+CiQ=; b=BAIRg/nAjybfvU2nKwzovL9An7ZkUX3GCDDv5U5l52L9c5w7TNPIH+JKWAR9bAtWSR sb8+mYCtaXFBd7p5kDZAmaNJlQqvrGA7YFfYN5QuS64N13pAMvDVEkOxkMLyIsUdoIBQ 92Wc+PPlth2TKHixHuhYC51s1JYdD7TQ/wOSnhDBBVmxHpU5xTPFPxAlB8Qm+JU258tQ dHTbtTyaW5rqcPeGwR7dof1/yZDbq1MJ8EcZh/d1+a0Iz3y8pYCdi86IVZBH5Jd71Syu u7xCSgXtBgNvwBVpcD8U8dS0seey47DTbKrkfKHo2STwsJhBBcmXjdk3oH1OdogGGxax Qr1w== X-Gm-Message-State: AOJu0YwbHnb90iiWu3uUTkgVzRJcPHJ1NAQ5yErJ75v4AjPO8SjjZxpy QbOPvOpvYPy4AWxx30HBjSI6kzC04+3jUHNR/j81QZY+3zmwXJAT6TaH X-Gm-Gg: AY/fxX4OUGi+lkm0Qny7+kl9DsCugUfyv2/GKDhOVFFRSgsDSpJG9qDX+LhT0y6HWZ0 bisEuMuwBl9zlQZ7BacJB7R2FCCW6mzPGISAx1XXE2fi2qnygXglwBskmBi0JVfRNooEfw/lmHF NHgIbRx+/WZ435nzU3BozWPwMiIY+S6ZzWF5bCgHrdTula4uAupC3XEzxQ2AgWaDd7sJOsbo2gq wtKR+N4BIwsgdJyOWpn+I4CEz+YV2Zg/A127Yfz+MZdqv1Mw1+KKm+jVpIODjha+AeJRg/EGftH EO3oB+knIMdqGI82ij1f7JnuIslj5vkB16zA4nmxo7RVDBw822h0JpknP985fE2xIyaEuQfh3jk l3f9CO3cGCikXhwSIyt579CXhOMrDJIFoAeJDbpm+IgMtebxmIi8fUYgaJERx+7n1KxVWNvMBPw 9Wx0TeS1gzIcAY6Jb6u5/0LY0= X-Google-Smtp-Source: AGHT+IFWO7Sr2vKPx/3xFEstC3vpUB/A9iKGkyvfjC7nE0lCjaEc2ow5E98iieH9zOZQGyG9Egx28A== X-Received: by 2002:a05:6a00:6087:b0:81d:a1b1:731d with SMTP id d2e1a72fcca58-81da1c0baf1mr12666295b3a.53.1768277020340; Mon, 12 Jan 2026 20:03:40 -0800 (PST) Received: from DESKTOP-LUHV3PD.localdomain ([59.152.111.50]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f3ce8df8bsm7776016b3a.40.2026.01.12.20.03.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jan 2026 20:03:40 -0800 (PST) From: Siratul Islam To: andy@kernel.org, geert@linux-m68k.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Siratul Islam Subject: [PATCH 4/4] MAINTAINERS: Add entry for TM1637 Date: Tue, 13 Jan 2026 10:02:42 +0600 Message-ID: <20260113040242.19156-5-email@sirat.me> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260113040242.19156-1-email@sirat.me> References: <20260113040242.19156-1-email@sirat.me> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add entry for the Titanmec TM1637 7-segment display driver. Signed-off-by: Siratul Islam --- MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 32b5e41d9849..4f07c7b5d649 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -26312,6 +26312,13 @@ W: http://sourceforge.net/projects/tlan/ F: Documentation/networking/device_drivers/ethernet/ti/tlan.rst F: drivers/net/ethernet/ti/tlan.* =20 +TM1637 7-SEGMENT DISPLAY DRIVER +M: Siratul Islam +S: Maintained +F: Documentation/ABI/testing/sysfs-platform-tm1637 +F: Documentation/devicetree/bindings/auxdisplay/titanmec,tm1637.yaml +F: drivers/auxdisplay/tm1637.c + TMIO/SDHI MMC DRIVER M: Wolfram Sang L: linux-mmc@vger.kernel.org --=20 2.47.3