History

Merge tag 'auxdisplay-for-linus-v5.16' of git://github.com/ojeda/linux

Pull auxdisplay updates from Miguel Ojeda: - 4-digit 7-segment and quad alphanumeric display support for the ht16k33 driver, allowing the user to display and scroll text messages, from Geert Uytterhoeven. - An assortment of fixes and cleanups from Geert Uytterhoeven. - Header cleanups from Mianhan Liu. - Whitespace cleanup from Huiquan Deng. * tag 'auxdisplay-for-linus-v5.16' of git://github.com/ojeda/linux: (26 commits) MAINTAINERS: Add DT Bindings for Auxiliary Display Drivers auxdisplay: cfag12864bfb: code indent should use tabs where possible auxdisplay: ht16k33: remove superfluous header files auxdisplay: ks0108: remove superfluous header files auxdisplay: cfag12864bfb: remove superfluous header files auxdisplay: ht16k33: Make use of device properties auxdisplay: ht16k33: Add LED support dt-bindings: auxdisplay: ht16k33: Document LED subnode auxdisplay: ht16k33: Add support for segment displays auxdisplay: ht16k33: Extract frame buffer probing auxdisplay: ht16k33: Extract ht16k33_brightness_set() auxdisplay: ht16k33: Move delayed work auxdisplay: ht16k33: Add helper variable dev auxdisplay: ht16k33: Convert to simple i2c probe function auxdisplay: ht16k33: Remove unneeded error check in keypad probe() auxdisplay: ht16k33: Use HT16K33_FB_SIZE in ht16k33_initialize() auxdisplay: ht16k33: Fix frame buffer device blanking auxdisplay: ht16k33: Connect backlight to fbdev auxdisplay: linedisp: Add support for changing scroll rate auxdisplay: linedisp: Use kmemdup_nul() helper ...

Linus Torvalds committed 5 years ago

Commit e582e082 parents e54ffb9 97fbb2911 files · +1023 −286Browse files

Showing the changes to include/uapi/linux (1 of 11 files). Show all

Unified · Split

include/uapi/linux/map_to_14segment.h+241−0
@@ -0,0 +1,241 @@
1+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2+/*
3+ * Copyright (C) 2021 Glider bv
4+ *
5+ * Based on include/uapi/linux/map_to_7segment.h:
6+
7+ * Copyright (c) 2005 Henk Vergonet <Henk.Vergonet@gmail.com>
8+ */
9+
10+#ifndef MAP_TO_14SEGMENT_H
11+#define MAP_TO_14SEGMENT_H
12+
13+/* This file provides translation primitives and tables for the conversion
14+ * of (ASCII) characters to a 14-segments notation.
15+ *
16+ * The 14 segment's wikipedia notation below is used as standard.
17+ * See: https://en.wikipedia.org/wiki/Fourteen-segment_display
18+ *
19+ * Notation: +---a---+
20+ * |\ | /|
21+ * f h i j b
22+ * | \|/ |
23+ * +-g1+-g2+
24+ * | /|\ |
25+ * e k l m c
26+ * |/ | \|
27+ * +---d---+
28+ *
29+ * Usage:
30+ *
31+ * Register a map variable, and fill it with a character set:
32+ * static SEG14_DEFAULT_MAP(map_seg14);
33+ *
34+ *
35+ * Then use for conversion:
36+ * seg14 = map_to_seg14(&map_seg14, some_char);
37+ * ...
38+ *
39+ * In device drivers it is recommended, if required, to make the char map
40+ * accessible via the sysfs interface using the following scheme:
41+ *
42+ * static ssize_t map_seg14_show(struct device *dev,
43+ * struct device_attribute *attr, char *buf)
44+ * {
45+ * memcpy(buf, &map_seg14, sizeof(map_seg14));
46+ * return sizeof(map_seg14);
47+ * }
48+ * static ssize_t map_seg14_store(struct device *dev,
49+ * struct device_attribute *attr,
50+ * const char *buf, size_t cnt)
51+ * {
52+ * if (cnt != sizeof(map_seg14))
53+ * return -EINVAL;
54+ * memcpy(&map_seg14, buf, cnt);
55+ * return cnt;
56+ * }
57+ * static DEVICE_ATTR_RW(map_seg14);
58+ */
59+#include <linux/errno.h>
60+#include <linux/types.h>
61+
62+#include <asm/byteorder.h>
63+
64+#define BIT_SEG14_A 0
65+#define BIT_SEG14_B 1
66+#define BIT_SEG14_C 2
67+#define BIT_SEG14_D 3
68+#define BIT_SEG14_E 4
69+#define BIT_SEG14_F 5
70+#define BIT_SEG14_G1 6
71+#define BIT_SEG14_G2 7
72+#define BIT_SEG14_H 8
73+#define BIT_SEG14_I 9
74+#define BIT_SEG14_J 10
75+#define BIT_SEG14_K 11
76+#define BIT_SEG14_L 12
77+#define BIT_SEG14_M 13
78+#define BIT_SEG14_RESERVED1 14
79+#define BIT_SEG14_RESERVED2 15
80+
81+struct seg14_conversion_map {
82+ __be16 table[128];
83+};
84+
85+static __inline__ int map_to_seg14(struct seg14_conversion_map *map, int c)
86+{
87+ if (c < 0 || c >= sizeof(map->table) / sizeof(map->table[0]))
88+ return -EINVAL;
89+
90+ return __be16_to_cpu(map->table[c]);
91+}
92+
93+#define SEG14_CONVERSION_MAP(_name, _map) \
94+ struct seg14_conversion_map _name = { .table = { _map } }
95+
96+/*
97+ * It is recommended to use a facility that allows user space to redefine
98+ * custom character sets for LCD devices. Please use a sysfs interface
99+ * as described above.
100+ */
101+#define MAP_TO_SEG14_SYSFS_FILE "map_seg14"
102+
103+/*******************************************************************************
104+ * ASCII conversion table
105+ ******************************************************************************/
106+
107+#define _SEG14(sym, a, b, c, d, e, f, g1, g2, h, j, k, l, m, n) \
108+ __cpu_to_be16( a << BIT_SEG14_A | b << BIT_SEG14_B | \
109+ c << BIT_SEG14_C | d << BIT_SEG14_D | \
110+ e << BIT_SEG14_E | f << BIT_SEG14_F | \
111+ g1 << BIT_SEG14_G1 | g2 << BIT_SEG14_G2 | \
112+ h << BIT_SEG14_H | j << BIT_SEG14_I | \
113+ k << BIT_SEG14_J | l << BIT_SEG14_K | \
114+ m << BIT_SEG14_L | n << BIT_SEG14_M )
115+
116+#define _MAP_0_32_ASCII_SEG14_NON_PRINTABLE \
117+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
118+
119+#define _MAP_33_47_ASCII_SEG14_SYMBOL \
120+ _SEG14('!', 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), \
121+ _SEG14('"', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0), \
122+ _SEG14('#', 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0), \
123+ _SEG14('$', 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0), \
124+ _SEG14('%', 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0), \
125+ _SEG14('&', 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1), \
126+ _SEG14('\'',0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0), \
127+ _SEG14('(', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1), \
128+ _SEG14(')', 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0), \
129+ _SEG14('*', 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1), \
130+ _SEG14('+', 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0), \
131+ _SEG14(',', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0), \
132+ _SEG14('-', 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0), \
133+ _SEG14('.', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1), \
134+ _SEG14('/', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0),
135+
136+#define _MAP_48_57_ASCII_SEG14_NUMERIC \
137+ _SEG14('0', 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0), \
138+ _SEG14('1', 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0), \
139+ _SEG14('2', 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0), \
140+ _SEG14('3', 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0), \
141+ _SEG14('4', 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0), \
142+ _SEG14('5', 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1), \
143+ _SEG14('6', 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0), \
144+ _SEG14('7', 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0), \
145+ _SEG14('8', 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0), \
146+ _SEG14('9', 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0),
147+
148+#define _MAP_58_64_ASCII_SEG14_SYMBOL \
149+ _SEG14(':', 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0), \
150+ _SEG14(';', 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0), \
151+ _SEG14('<', 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1), \
152+ _SEG14('=', 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0), \
153+ _SEG14('>', 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0), \
154+ _SEG14('?', 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0), \
155+ _SEG14('@', 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0),
156+
157+#define _MAP_65_90_ASCII_SEG14_ALPHA_UPPER \
158+ _SEG14('A', 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0), \
159+ _SEG14('B', 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0), \
160+ _SEG14('C', 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0), \
161+ _SEG14('D', 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0), \
162+ _SEG14('E', 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0), \
163+ _SEG14('F', 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0), \
164+ _SEG14('G', 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0), \
165+ _SEG14('H', 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0), \
166+ _SEG14('I', 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0), \
167+ _SEG14('J', 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), \
168+ _SEG14('K', 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1), \
169+ _SEG14('L', 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0), \
170+ _SEG14('M', 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0), \
171+ _SEG14('N', 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1), \
172+ _SEG14('O', 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0), \
173+ _SEG14('P', 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0), \
174+ _SEG14('Q', 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1), \
175+ _SEG14('R', 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1), \
176+ _SEG14('S', 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0), \
177+ _SEG14('T', 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0), \
178+ _SEG14('U', 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0), \
179+ _SEG14('V', 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0), \
180+ _SEG14('W', 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1), \
181+ _SEG14('X', 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1), \
182+ _SEG14('Y', 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0), \
183+ _SEG14('Z', 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0),
184+
185+#define _MAP_91_96_ASCII_SEG14_SYMBOL \
186+ _SEG14('[', 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0), \
187+ _SEG14('\\',0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), \
188+ _SEG14(']', 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), \
189+ _SEG14('^', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1), \
190+ _SEG14('_', 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), \
191+ _SEG14('`', 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0),
192+
193+#define _MAP_97_122_ASCII_SEG14_ALPHA_LOWER \
194+ _SEG14('a', 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0), \
195+ _SEG14('b', 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1), \
196+ _SEG14('c', 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0), \
197+ _SEG14('d', 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0), \
198+ _SEG14('e', 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0), \
199+ _SEG14('f', 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0), \
200+ _SEG14('g', 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0), \
201+ _SEG14('h', 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0), \
202+ _SEG14('i', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0), \
203+ _SEG14('j', 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0), \
204+ _SEG14('k', 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1), \
205+ _SEG14('l', 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0), \
206+ _SEG14('m', 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0), \
207+ _SEG14('n', 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0), \
208+ _SEG14('o', 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0), \
209+ _SEG14('p', 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0), \
210+ _SEG14('q', 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0), \
211+ _SEG14('r', 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0), \
212+ _SEG14('s', 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1), \
213+ _SEG14('t', 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0), \
214+ _SEG14('u', 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0), \
215+ _SEG14('v', 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0), \
216+ _SEG14('w', 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1), \
217+ _SEG14('x', 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1), \
218+ _SEG14('y', 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0), \
219+ _SEG14('z', 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0),
220+
221+#define _MAP_123_126_ASCII_SEG14_SYMBOL \
222+ _SEG14('{', 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0), \
223+ _SEG14('|', 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0), \
224+ _SEG14('}', 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1), \
225+ _SEG14('~', 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0),
226+
227+/* Maps */
228+#define MAP_ASCII14SEG_ALPHANUM \
229+ _MAP_0_32_ASCII_SEG14_NON_PRINTABLE \
230+ _MAP_33_47_ASCII_SEG14_SYMBOL \
231+ _MAP_48_57_ASCII_SEG14_NUMERIC \
232+ _MAP_58_64_ASCII_SEG14_SYMBOL \
233+ _MAP_65_90_ASCII_SEG14_ALPHA_UPPER \
234+ _MAP_91_96_ASCII_SEG14_SYMBOL \
235+ _MAP_97_122_ASCII_SEG14_ALPHA_LOWER \
236+ _MAP_123_126_ASCII_SEG14_SYMBOL
237+
238+#define SEG14_DEFAULT_MAP(_name) \
239+ SEG14_CONVERSION_MAP(_name, MAP_ASCII14SEG_ALPHANUM)
240+
241+#endif /* MAP_TO_14SEGMENT_H */