summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/boards/stm32mp.rst4
-rwxr-xr-xDocumentation/gen_commands.py30
-rw-r--r--arch/arm/boards/chumby_falconwing/falconwing.c2
-rw-r--r--arch/arm/boards/phytec-som-am335x/board.c14
-rw-r--r--arch/arm/boards/stm32mp157c-dk2/board.c4
-rw-r--r--arch/arm/dts/stm32mp157a-dk1.dtsi7
-rw-r--r--arch/arm/mach-samsung/mem-s3c64xx.c2
-rw-r--r--arch/mips/dts/ar9331-dptechnics-dpt-module.dts6
-rw-r--r--arch/mips/dts/ar9331.dtsi15
-rw-r--r--arch/mips/dts/tplink-mr3020.dts2
-rw-r--r--commands/Kconfig2
-rw-r--r--common/blspec.c10
-rw-r--r--common/console.c3
-rw-r--r--common/imd.c20
-rw-r--r--common/partitions/efi.c2
-rw-r--r--common/state/backend_bucket_circular.c4
-rw-r--r--common/state/backend_bucket_direct.c3
-rw-r--r--common/state/state.c7
-rw-r--r--drivers/base/regmap/regmap.c4
-rw-r--r--drivers/input/input.c2
-rw-r--r--drivers/mfd/Kconfig15
-rw-r--r--drivers/mfd/Makefile3
-rw-r--r--drivers/mfd/da9063.c139
-rw-r--r--drivers/mfd/fintek-superio.c122
-rw-r--r--drivers/mfd/smsc-superio.c115
-rw-r--r--drivers/mfd/superio.c98
-rw-r--r--drivers/mtd/ubi/Kconfig17
-rw-r--r--drivers/mtd/ubi/build.c2
-rw-r--r--drivers/mtd/ubi/ubi.h11
-rw-r--r--drivers/mtd/ubi/wl.c8
-rw-r--r--drivers/net/ag71xx.c2
-rw-r--r--drivers/net/phy/mv88e6xxx/Makefile1
-rw-r--r--drivers/net/phy/mv88e6xxx/chip.c36
-rw-r--r--drivers/net/phy/mv88e6xxx/chip.h1
-rw-r--r--drivers/net/phy/mv88e6xxx/global1.c51
-rw-r--r--drivers/net/phy/mv88e6xxx/global1.h37
-rw-r--r--drivers/nvmem/core.c14
-rw-r--r--drivers/regulator/pfuze.c28
-rw-r--r--drivers/usb/gadget/f_acm.c4
-rw-r--r--drivers/watchdog/Kconfig9
-rw-r--r--drivers/watchdog/Makefile1
-rw-r--r--drivers/watchdog/f71808e_wdt.c379
-rw-r--r--fs/devfs-core.c21
-rw-r--r--fs/ext4/ext_common.h2
-rw-r--r--fs/fs.c2
-rw-r--r--include/jtag.h2
-rw-r--r--include/state.h41
-rw-r--r--include/superio.h64
-rw-r--r--lib/fonts/font_7x14.c256
-rw-r--r--lib/fonts/font_8x16.c256
-rw-r--r--lib/fonts/font_8x8.c256
-rw-r--r--lib/gui/lodepng.c16
-rw-r--r--lib/libfile.c4
-rw-r--r--lib/ubsan.c20
-rw-r--r--scripts/Kbuild.include6
55 files changed, 1664 insertions, 518 deletions
diff --git a/Documentation/boards/stm32mp.rst b/Documentation/boards/stm32mp.rst
index 24cf8859db..774ede6e56 100644
--- a/Documentation/boards/stm32mp.rst
+++ b/Documentation/boards/stm32mp.rst
@@ -60,6 +60,10 @@ An appropriate image for the boot media can be generated with following
image = "barebox-@STM32MP_BOARD@.img"
size = 1M
}
+ partition barebox-environment {
+ image = "/dev/null"
+ size = 1M
+ }
}
Image can then be flashed on e.g. a SD-Card.
diff --git a/Documentation/gen_commands.py b/Documentation/gen_commands.py
index 6251b4f22e..203a39bb11 100755
--- a/Documentation/gen_commands.py
+++ b/Documentation/gen_commands.py
@@ -1,5 +1,7 @@
#!/usr/bin/python
+from __future__ import print_function
+
import errno
import os
import re
@@ -28,10 +30,15 @@ CONT = re.compile(r"""\s*"(.*?)"\s*\)?\s*$""")
CMDS = {}
+def string_escape(s):
+ # This used to do s.decode("string_escape") which isn't available on Python 3.
+ # Actually we only need to drop '\t' and '\n', so do this here.
+ return s.replace(r'\t', '').replace(r'\n', '')
+
def parse_c(name):
cmd = None
last = None
- for line in file(name, 'r'):
+ for line in open(name, 'r'):
x = HELP_START.match(line)
if x:
cmd = CMDS.setdefault(x.group(1), defaultdict(list))
@@ -50,14 +57,14 @@ def parse_c(name):
last = cmd['h_pre']
else:
last = cmd['h_post']
- last.append(x.group(1).decode("string_escape").strip())
+ last.append(string_escape(x.group(1)).strip())
continue
x = HELP_OPT.match(line)
if x:
last = cmd['h_opts']
last.append([
- x.group(1).decode("string_escape"),
- x.group(2).decode("string_escape")
+ string_escape(x.group(1)),
+ string_escape(x.group(2)),
])
continue
x = CMD_FUNC.match(line)
@@ -68,12 +75,12 @@ def parse_c(name):
x = CMD_DESC.match(line)
if x:
last = cmd['c_desc']
- last.append(x.group(1).decode("string_escape"))
+ last.append(string_escape(x.group(1)))
continue
x = CMD_OPTS.match(line)
if x:
last = cmd['c_opts']
- last.append(x.group(1).decode("string_escape"))
+ last.append(string_escape(x.group(1)))
continue
x = CMD_GROUP.match(line)
if x:
@@ -85,9 +92,9 @@ def parse_c(name):
if last is None:
raise Exception("Parse error in %s: %r" % (name, line))
if isinstance(last[-1], str):
- last[-1] += x.group(1).decode("string_escape")
+ last[-1] += string_escape(x.group(1))
elif isinstance(last[-1], list):
- last[-1][1] += x.group(1).decode("string_escape")
+ last[-1][1] += string_escape(x.group(1))
continue
x = HELP_END.match(line)
if x:
@@ -163,7 +170,7 @@ for name, cmd in CMDS.items():
rst = gen_rst(name, cmd)
group = cmd.get('c_group')
if group is None:
- print >> sys.stderr, "gen_commands: warning: using default group 'misc' for command '%s'" % name
+ print("gen_commands: warning: using default group 'misc' for command '%s'" % name, file=sys.stderr)
group = ['misc']
subdir = os.path.join(sys.argv[2], group[0])
try:
@@ -183,9 +190,8 @@ for name, cmd in CMDS.items():
except:
pass
hash_new = hashlib.sha1()
- hash_new.update(rst)
+ hash_new.update(rst.encode('utf-8'))
if hash_old.hexdigest() == hash_new.hexdigest():
continue
- file(target, 'w').write(rst)
-
+ open(target, 'w').write(rst)
diff --git a/arch/arm/boards/chumby_falconwing/falconwing.c b/arch/arm/boards/chumby_falconwing/falconwing.c
index 5554b78d6d..fb4a5d1cf0 100644
--- a/arch/arm/boards/chumby_falconwing/falconwing.c
+++ b/arch/arm/boards/chumby_falconwing/falconwing.c
@@ -65,7 +65,7 @@ static struct fb_videomode falconwing_vmode = {
.xres = 320,
.yres = 240,
.pixclock = KHZ2PICOS(6250), /* max. 10 MHz */
- /* line lenght should be 64 s */
+ /* line length should be 64 µs */
.left_margin = 28,
.hsync_len = 24,
.right_margin = 28,
diff --git a/arch/arm/boards/phytec-som-am335x/board.c b/arch/arm/boards/phytec-som-am335x/board.c
index 441d56348c..c25f33ae20 100644
--- a/arch/arm/boards/phytec-som-am335x/board.c
+++ b/arch/arm/boards/phytec-som-am335x/board.c
@@ -124,15 +124,11 @@ static int physom_devices_init(void)
ARRAY_SIZE(nandslots));
am33xx_bbu_emmc_mlo_register_handler("MLO.emmc", "/dev/mmc1");
- if (IS_ENABLED(CONFIG_STATE)) {
- state = state_by_name("am335x_phytec_mac_state");
- if (state)
- for (state_i = 0; state_i < 2; state_i++) {
- state_ret = state_read_mac(state,
- eth_names[state_i], &mac[0]);
- if (!state_ret && is_valid_ether_addr(&mac[0]))
- eth_register_ethaddr(state_i, mac);
- }
+ state = state_by_name("am335x_phytec_mac_state");
+ for (state_i = 0; state_i < 2; state_i++) {
+ state_ret = state_read_mac(state, eth_names[state_i], &mac[0]);
+ if (!state_ret && is_valid_ether_addr(&mac[0]))
+ eth_register_ethaddr(state_i, mac);
}
if (IS_ENABLED(CONFIG_PHYTEC_SOM_AM335X_OF_AUTOENABLE)) {
diff --git a/arch/arm/boards/stm32mp157c-dk2/board.c b/arch/arm/boards/stm32mp157c-dk2/board.c
index cbfe21db6a..9cb861af85 100644
--- a/arch/arm/boards/stm32mp157c-dk2/board.c
+++ b/arch/arm/boards/stm32mp157c-dk2/board.c
@@ -5,7 +5,7 @@
#include <asm/memory.h>
#include <mach/stm32.h>
-static int dk2_postcore_init(void)
+static int dk2_mem_init(void)
{
if (!of_machine_is_compatible("st,stm32mp157c-dk2"))
return 0;
@@ -14,4 +14,4 @@ static int dk2_postcore_init(void)
return 0;
}
-mem_initcall(dk2_postcore_init);
+mem_initcall(dk2_mem_init);
diff --git a/arch/arm/dts/stm32mp157a-dk1.dtsi b/arch/arm/dts/stm32mp157a-dk1.dtsi
index cd3d614d46..f7fbdcd174 100644
--- a/arch/arm/dts/stm32mp157a-dk1.dtsi
+++ b/arch/arm/dts/stm32mp157a-dk1.dtsi
@@ -8,6 +8,13 @@
#include <dt-bindings/gpio/gpio.h>
/ {
+ chosen {
+ environment {
+ compatible = "barebox,environment";
+ device-path = &sdmmc1, "partname:barebox-environment";
+ };
+ };
+
led {
red {
label = "error";
diff --git a/arch/arm/mach-samsung/mem-s3c64xx.c b/arch/arm/mach-samsung/mem-s3c64xx.c
index aca2cf5066..c51245a378 100644
--- a/arch/arm/mach-samsung/mem-s3c64xx.c
+++ b/arch/arm/mach-samsung/mem-s3c64xx.c
@@ -39,7 +39,7 @@ int s3c6410_setup_chipselect(int no, const struct s3c6410_chipselect *c)
tacs = DIV_ROUND_UP(c->adr_setup_t, per_t);
/* start of CS to read/write assertion (= access setup) */
tcos = DIV_ROUND_UP(c->access_setup_t, per_t);
- /* length of read/write assertion (= access lenght) */
+ /* length of read/write assertion (= access length) */
tacc = DIV_ROUND_UP(c->access_t, per_t) - 1;
/* CS hold after access is finished */
tcoh = DIV_ROUND_UP(c->cs_hold_t, per_t);
diff --git a/arch/mips/dts/ar9331-dptechnics-dpt-module.dts b/arch/mips/dts/ar9331-dptechnics-dpt-module.dts
index 315589aab9..cbaf5ab39e 100644
--- a/arch/mips/dts/ar9331-dptechnics-dpt-module.dts
+++ b/arch/mips/dts/ar9331-dptechnics-dpt-module.dts
@@ -15,7 +15,7 @@
art@0 {
compatible = "qca,art-ar9331", "qca,art";
device-path = &spiflash_art;
- barebox,provide-mac-address = <&mac0>;
+ barebox,provide-mac-address = <&eth0>;
};
};
@@ -48,7 +48,3 @@
reg = <0x7f0000 0x10000>;
};
};
-
-&mac0 {
- status = "okay";
-};
diff --git a/arch/mips/dts/ar9331.dtsi b/arch/mips/dts/ar9331.dtsi
index 42baae1e89..72f029754e 100644
--- a/arch/mips/dts/ar9331.dtsi
+++ b/arch/mips/dts/ar9331.dtsi
@@ -5,14 +5,11 @@
reg = <0x18060008 0x8>;
clocks = <&pll ATH79_CLK_CPU>;
};
-
- mac0: mac@19000000 {
- compatible = "qca,ar9331-ge0";
- reg = <0x18070000 0x00000100>,
- <0x19000000 0x01000000>;
- reg-names = "gmac", "ge0";
- phy-mode = "mii";
- status = "disabled";
- };
};
};
+
+&eth0 {
+ reg = <0x19000000 0x200>,
+ <0x18070000 0x00000100>;
+ reg-names = "ge0", "gmac";
+};
diff --git a/arch/mips/dts/tplink-mr3020.dts b/arch/mips/dts/tplink-mr3020.dts
index e30eae1578..c6ae154f4f 100644
--- a/arch/mips/dts/tplink-mr3020.dts
+++ b/arch/mips/dts/tplink-mr3020.dts
@@ -28,6 +28,6 @@
};
};
-&mac0 {
+&eth0 {
status = "okay";
};
diff --git a/commands/Kconfig b/commands/Kconfig
index e03110fd46..6847a55e61 100644
--- a/commands/Kconfig
+++ b/commands/Kconfig
@@ -2144,7 +2144,7 @@ config CMD_SEED
config CMD_UBSAN
tristate "ubsan"
- depends on UBSAN && COMMAND_SUPPORT
+ depends on UBSAN
help
This is a test command for the undefined behavior sanitizer.
It triggers various undefined behavior, and detect it.
diff --git a/common/blspec.c b/common/blspec.c
index 66e5033e35..83b05993dd 100644
--- a/common/blspec.c
+++ b/common/blspec.c
@@ -229,6 +229,14 @@ static struct blspec_entry *blspec_entry_open(struct bootentries *bootentries,
}
/*
+ * is_blspec_entry - check if a bootentry is a blspec entry
+ */
+static inline bool is_blspec_entry(struct bootentry *entry)
+{
+ return entry->boot == blspec_boot;
+}
+
+/*
* blspec_have_entry - check if we already have an entry with
* a certain path
*/
@@ -238,6 +246,8 @@ static int blspec_have_entry(struct bootentries *bootentries, const char *path)
struct blspec_entry *e;
list_for_each_entry(be, &bootentries->entries, list) {
+ if (!is_blspec_entry(be))
+ continue;
e = container_of(be, struct blspec_entry, entry);
if (e->configpath && !strcmp(e->configpath, path))
return 1;
diff --git a/common/console.c b/common/console.c
index d04aae58f9..e6e029848d 100644
--- a/common/console.c
+++ b/common/console.c
@@ -272,6 +272,9 @@ static int fops_open(struct cdev *cdev, unsigned long flags)
{
struct console_device *priv = cdev->priv;
+ if ((flags & (O_WRONLY | O_RDWR)) && !priv->puts )
+ return -EPERM;
+
return console_open(priv);
}
diff --git a/common/imd.c b/common/imd.c
index 05e118e773..913a01de87 100644
--- a/common/imd.c
+++ b/common/imd.c
@@ -337,8 +337,10 @@ int imd_command(int argc, char *argv[])
return -errno;
imd_start = imd_get(buf, size);
- if (IS_ERR(imd_start))
- return PTR_ERR(imd_start);
+ if (IS_ERR(imd_start)) {
+ ret = PTR_ERR(imd_start);
+ goto out;
+ }
if (type == IMD_TYPE_INVALID) {
imd_for_each(imd_start, imd) {
@@ -356,7 +358,8 @@ int imd_command(int argc, char *argv[])
imd = imd_find_type(imd_start, type);
if (!imd) {
debug("No tag of type 0x%08x found\n", type);
- return -ENODATA;
+ ret = -ENODATA;
+ goto out;
}
if (imd_is_string(type)) {
@@ -370,8 +373,10 @@ int imd_command(int argc, char *argv[])
str = imd_concat_strings(imd);
}
- if (!str)
- return -ENODATA;
+ if (!str) {
+ ret = -ENODATA;
+ goto out;
+ }
if (variable_name)
imd_command_setenv(variable_name, str);
@@ -384,5 +389,8 @@ int imd_command(int argc, char *argv[])
}
}
- return 0;
+ ret = 0;
+out:
+ free(buf);
+ return ret;
}
diff --git a/common/partitions/efi.c b/common/partitions/efi.c
index 3c1077fd0c..f20fd0d9b9 100644
--- a/common/partitions/efi.c
+++ b/common/partitions/efi.c
@@ -369,7 +369,7 @@ static int find_valid_gpt(void *buf, struct block_device *blk, gpt_header **gpt,
lastlba = last_lba(blk);
if (force_gpt) {
/* This will be added to the EFI Spec. per Intel after v1.02. */
- if (file_detect_type(buf, SECTOR_SIZE * 2) != filetype_gpt)
+ if (file_detect_partition_table(buf, SECTOR_SIZE * 2) != filetype_gpt)
goto fail;
}
diff --git a/common/state/backend_bucket_circular.c b/common/state/backend_bucket_circular.c
index 47970b79f3..735510e0d3 100644
--- a/common/state/backend_bucket_circular.c
+++ b/common/state/backend_bucket_circular.c
@@ -178,10 +178,10 @@ static int state_mtd_peb_read(struct state_backend_storage_bucket_circular *circ
if (ret < 0) {
dev_err(circ->dev, "Failed to read circular storage len %d, %d\n",
len, ret);
- free(buf);
+ return ret;
}
- return ret;
+ return 0;
}
static int state_mtd_peb_write(struct state_backend_storage_bucket_circular *circ,
diff --git a/common/state/backend_bucket_direct.c b/common/state/backend_bucket_direct.c
index 0dbd334db8..4522f0170f 100644
--- a/common/state/backend_bucket_direct.c
+++ b/common/state/backend_bucket_direct.c
@@ -115,9 +115,6 @@ static int state_backend_bucket_direct_write(struct state_backend_storage_bucket
int ret;
struct state_backend_storage_bucket_direct_meta meta;
- if (len > direct->max_size - sizeof(meta))
- return -E2BIG;
-
if (lseek(direct->fd, direct->offset, SEEK_SET) != direct->offset) {
dev_err(direct->dev, "Failed to seek file, %d\n", -errno);
return -errno;
diff --git a/common/state/state.c b/common/state/state.c
index 3f5d43ecbf..b168387eef 100644
--- a/common/state/state.c
+++ b/common/state/state.c
@@ -714,13 +714,6 @@ struct state *state_by_node(const struct device_node *node)
return NULL;
}
-int state_get_name(const struct state *state, char const **name)
-{
- *name = xstrdup(state->name);
-
- return 0;
-}
-
int state_read_mac(struct state *state, const char *name, u8 *buf)
{
struct state_variable *svar;
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index d2f8ec70e4..dc7b4f276f 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -65,7 +65,7 @@ struct regmap *regmap_init(struct device_d *dev,
}
/*
- * regmap_init - initialize and register a regmap
+ * dev_get_regmap - get a regmap from a device
*
* @dev: The device the maps is attached to
* @name: Optional name for the map. If given it must match.
@@ -406,4 +406,4 @@ void regmap_exit(struct regmap *map)
}
free(map);
-} \ No newline at end of file
+}
diff --git a/drivers/input/input.c b/drivers/input/input.c
index 14e44d1378..1e8f6e178e 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -195,6 +195,8 @@ static int input_init(void)
ic->console.tstc = input_console_tstc;
ic->console.getc = input_console_getc;
ic->console.f_active = CONSOLE_STDIN;
+ ic->console.devid = DEVICE_ID_DYNAMIC;
+ ic->console.devname = "input";
ic->fifo = kfifo_alloc(32);
ic->notifier.notify = input_console_notify;
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 7d924cfca1..f4cc71ef0e 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -67,4 +67,19 @@ config MFD_STPMIC1
help
Select this to support communication with the STPMIC1.
+config MFD_SUPERIO
+ bool
+
+config FINTEK_SUPERIO
+ bool "Fintek Super I/O chip"
+ select MFD_SUPERIO
+ help
+ Select this to probe for IO-port connected Fintek Super I/O chips.
+
+config SMSC_SUPERIO
+ bool "SMSC Super I/O chip"
+ select MFD_SUPERIO
+ help
+ Select this to probe for IO-port connected SMSC Super I/O chips.
+
endmenu
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 16a74abd77..0c24493e3d 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -12,3 +12,6 @@ obj-$(CONFIG_MFD_TWL4030) += twl4030.o
obj-$(CONFIG_MFD_TWL6030) += twl6030.o
obj-$(CONFIG_RAVE_SP_CORE) += rave-sp.o
obj-$(CONFIG_MFD_STPMIC1) += stpmic1.o
+obj-$(CONFIG_MFD_SUPERIO) += superio.o
+obj-$(CONFIG_FINTEK_SUPERIO) += fintek-superio.o
+obj-$(CONFIG_SMSC_SUPERIO) += smsc-superio.o
diff --git a/drivers/mfd/da9063.c b/drivers/mfd/da9063.c
index 5f77e5935b..b61e764876 100644
--- a/drivers/mfd/da9063.c
+++ b/drivers/mfd/da9063.c
@@ -15,8 +15,10 @@
#include <common.h>
#include <driver.h>
+#include <gpio.h>
#include <restart.h>
#include <i2c/i2c.h>
+#include <linux/bitops.h>
#include <malloc.h>
#include <notifier.h>
#include <reset_source.h>
@@ -25,6 +27,7 @@
struct da9063 {
struct restart_handler restart;
struct watchdog wd;
+ struct gpio_chip gpio;
struct i2c_client *client;
/* dummy client for accessing bank #1 */
struct i2c_client *client1;
@@ -61,6 +64,19 @@ struct da9063 {
/* DA9063_REG_CONTROL_I (addr=0x10e) */
#define DA9062_WATCHDOG_SD BIT(3)
+#define DA9062AA_STATUS_B 0x002
+#define DA9062AA_GPIO_0_1 0x015
+#define DA9062AA_GPIO_MODE0_4 0x01D
+
+/* DA9062AA_GPIO_0_1 (addr=0x015) */
+#define DA9062AA_GPIO0_PIN_MASK 0x03
+
+#define DA9062_PIN_SHIFT(offset) (4 * (offset % 2))
+#define DA9062_PIN_ALTERNATE 0x00 /* gpio alternate mode */
+#define DA9062_PIN_GPI 0x01 /* gpio in */
+#define DA9062_PIN_GPO_OD 0x02 /* gpio out open-drain */
+#define DA9062_PIN_GPO_PP 0x03 /* gpio out push-pull */
+
struct da906x_device_data {
int (*init)(struct da9063 *priv);
};
@@ -104,6 +120,118 @@ static int da906x_reg_update(struct da9063 *priv, unsigned int reg,
return 0;
}
+static inline struct da9063 *to_da9063(struct gpio_chip *chip)
+{
+ return container_of(chip, struct da9063, gpio);
+}
+
+static int da9063_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
+{
+ struct da9063 *priv = to_da9063(chip);
+ u8 mask, mode;
+
+ mode = DA9062_PIN_GPI << DA9062_PIN_SHIFT(offset);
+ mask = DA9062AA_GPIO0_PIN_MASK << DA9062_PIN_SHIFT(offset);
+
+ return da906x_reg_update(priv, DA9062AA_GPIO_0_1 + (offset >> 1),
+ mask, mode);
+}
+
+static int da9063_gpio_direction_output(struct gpio_chip *chip, unsigned offset,
+ int value)
+{
+ struct da9063 *priv = to_da9063(chip);
+
+ return da906x_reg_update(priv, DA9062AA_GPIO_MODE0_4, BIT(offset),
+ value << offset);
+}
+
+static int da9063_gpio_get_pin_mode(struct da9063 *priv, unsigned offset)
+{
+ int ret;
+ u8 val;
+
+ ret = i2c_read_reg(priv->client, DA9062AA_GPIO_0_1 + (offset >> 1),
+ &val, 1);
+ if (ret < 0)
+ return ret;
+
+ val >>= DA9062_PIN_SHIFT(offset);
+ val &= DA9062AA_GPIO0_PIN_MASK;
+
+ return val;
+}
+
+static int da9063_gpio_get(struct gpio_chip *chip, unsigned offset)
+{
+ struct da9063 *priv = to_da9063(chip);
+ int gpio_dir;
+ int ret;
+ u8 val;
+
+ gpio_dir = da9063_gpio_get_pin_mode(priv, offset);
+ if (gpio_dir < 0)
+ return gpio_dir;
+
+ switch (gpio_dir) {
+ case DA9062_PIN_ALTERNATE:
+ return -ENOTSUPP;
+ case DA9062_PIN_GPI:
+ ret = i2c_read_reg(priv->client, DA9062AA_STATUS_B, &val, 1);
+ if (ret < 0)
+ return ret;
+ break;
+ case DA9062_PIN_GPO_OD:
+ /* falltrough */
+ case DA9062_PIN_GPO_PP:
+ ret = i2c_read_reg(priv->client, DA9062AA_GPIO_MODE0_4, &val, 1);
+ if (ret < 0)
+ return ret;
+ }
+
+ return val & BIT(offset);
+}
+
+static int da9063_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
+{
+ struct da9063 *priv = to_da9063(chip);
+ int gpio_dir;
+
+ gpio_dir = da9063_gpio_get_pin_mode(priv, offset);
+ if (gpio_dir < 0)
+ return gpio_dir;
+
+ switch (gpio_dir) {
+ case DA9062_PIN_ALTERNATE:
+ return -ENOTSUPP;
+ case DA9062_PIN_GPI:
+ return 1;
+ case DA9062_PIN_GPO_OD:
+ /* falltrough */
+ case DA9062_PIN_GPO_PP:
+ return 0;
+ }
+
+ return -EINVAL;
+}
+
+static void da9063_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
+{
+ struct da9063 *priv = to_da9063(chip);
+
+ da906x_reg_update(priv, DA9062AA_GPIO_MODE0_4, BIT(offset),
+ value << offset);
+
+}
+
+static struct gpio_ops da9063_gpio_ops = {
+ .direction_input = da9063_gpio_direction_input,
+ .direction_output = da9063_gpio_direction_output,
+ .get_direction = da9063_gpio_get_direction,
+ .get = da9063_gpio_get,
+ .set = da9063_gpio_set,
+};
+
static int da9063_watchdog_ping(struct da9063 *priv)
{
int ret;
@@ -262,6 +390,17 @@ static int da9063_probe(struct device_d *dev)
restart_handler_register(&priv->restart);
+ priv->gpio.base = -1;
+ priv->gpio.ngpio = 5;
+ priv->gpio.ops = &da9063_gpio_ops;
+ priv->gpio.dev = dev;
+ ret = gpiochip_add(&priv->gpio);
+ if (ret)
+ goto on_error;
+
+ if (IS_ENABLED(CONFIG_OFDEVICE) && dev->device_node)
+ return of_platform_populate(dev->device_node, NULL, dev);
+
return 0;
on_error:
diff --git a/drivers/mfd/fintek-superio.c b/drivers/mfd/fintek-superio.c
new file mode 100644
index 0000000000..60785bce27
--- /dev/null
+++ b/drivers/mfd/fintek-superio.c
@@ -0,0 +1,122 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2019 Ahmad Fatoum, Pengutronix
+ */
+
+#define pr_fmt(fmt) "fintek-superio: " fmt
+
+#include <superio.h>
+#include <init.h>
+#include <asm/io.h>
+#include <common.h>
+
+#define SIO_UNLOCK_KEY 0x87 /* Key to enable Super-I/O */
+#define SIO_LOCK_KEY 0xAA /* Key to disable Super-I/O */
+
+#define SIO_REG_LDSEL 0x07 /* Logical device select */
+
+#define SIO_FINTEK_ID 0x1934 /* Manufacturers ID */
+
+#define SIO_F71808_ID 0x0901
+#define SIO_F71858_ID 0x0507
+#define SIO_F71862_ID 0x0601
+#define SIO_F71868_ID 0x1106
+#define SIO_F71869_ID 0x0814
+#define SIO_F71869A_ID 0x1007
+#define SIO_F71882_ID 0x0541
+#define SIO_F71889_ID 0x0723
+#define SIO_F71889A_ID 0x1005
+#define SIO_F81865_ID 0x0704
+#define SIO_F81866_ID 0x1010
+
+static void superio_enter(u16 sioaddr)
+{
+ /* according to the datasheet the key must be sent twice! */
+ outb(SIO_UNLOCK_KEY, sioaddr);
+ outb(SIO_UNLOCK_KEY, sioaddr);
+}
+
+static void superio_exit(u16 sioaddr)
+{
+ outb(SIO_LOCK_KEY, sioaddr);
+}
+
+static void fintek_superio_find(u16 sioaddr)
+{
+ struct superio_chip *chip;
+ u16 vid;
+
+ superio_enter(sioaddr);
+
+ vid = superio_inw(sioaddr, SIO_REG_MANID);
+ if (vid != SIO_FINTEK_ID) {
+ pr_debug("Not a Fintek device (port=0x%02x, vid=0x%04x)\n",
+ sioaddr, vid);
+ return;
+ }
+
+ chip = xzalloc(sizeof(*chip));
+
+ chip->devid = superio_inw(sioaddr, SIO_REG_DEVID);
+ chip->vid = vid;
+ chip->sioaddr = sioaddr;
+ chip->enter = superio_enter;
+ chip->exit = superio_exit;
+
+ superio_chip_add(chip);
+
+ switch (chip->devid) {
+ case SIO_F71808_ID:
+ superio_func_add(chip, "f71808fg_wdt");
+ break;
+ case SIO_F71862_ID:
+ superio_func_add(chip, "f71862fg_wdt");
+ break;
+ case SIO_F71868_ID:
+ superio_func_add(chip, "f71868_wdt");
+ break;
+ case SIO_F71869_ID:
+ superio_func_add(chip, "f71869_wdt");
+ superio_func_add(chip, "gpio-f71869");
+ break;
+ case SIO_F71869A_ID:
+ superio_func_add(chip, "f71869_wdt");
+ superio_func_add(chip, "gpio-f71869a");
+ break;
+ case SIO_F71882_ID:
+ superio_func_add(chip, "f71882fg_wdt");
+ superio_func_add(chip, "gpio-f71882fg");
+ break;
+ case SIO_F71889_ID:
+ superio_func_add(chip, "f71889fg_wdt");
+ superio_func_add(chip, "gpio-f71889f");
+ break;
+ case SIO_F71889A_ID:
+ superio_func_add(chip, "f71889fg_wdt");
+ superio_func_add(chip, "gpio-f71889a");
+ break;
+ case SIO_F71858_ID:
+ /* Confirmed (by datasheet) not to have a watchdog. */
+ break;
+ case SIO_F81865_ID:
+ superio_func_add(chip, "f81865_wdt");
+ break;
+ case SIO_F81866_ID:
+ superio_func_add(chip, "f81866_wdt");
+ superio_func_add(chip, "gpio-f81866");
+ break;
+ default:
+ pr_info("Unrecognized Fintek device: 0x%04x\n", chip->devid);
+ }
+
+ superio_exit(sioaddr);
+}
+
+static int fintek_superio_detect(void)
+{
+ fintek_superio_find(0x2e);
+ fintek_superio_find(0x4e);
+
+ return 0;
+}
+coredevice_initcall(fintek_superio_detect);
diff --git a/drivers/mfd/smsc-superio.c b/drivers/mfd/smsc-superio.c
new file mode 100644
index 0000000000..349c878cef
--- /dev/null
+++ b/drivers/mfd/smsc-superio.c
@@ -0,0 +1,115 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2019 Ahmad Fatoum, Pengutronix
+ */
+
+#define pr_fmt(fmt) "smsc-superio: " fmt
+
+#include <superio.h>
+#include <init.h>
+#include <asm/io.h>
+#include <common.h>
+
+#define SIO_UNLOCK_KEY 0x55 /* Key to enable Super-I/O */
+#define SIO_LOCK_KEY 0xAA /* Key to disable Super-I/O */
+
+#define SMSC_ID 0x10b8 /* Standard Microsystems Corp PCI ID */
+
+static void superio_enter(u16 sioaddr)
+{
+ outb(SIO_UNLOCK_KEY, sioaddr);
+ mdelay(1);
+ outb(SIO_UNLOCK_KEY, sioaddr);
+}
+
+static void superio_exit(u16 sioaddr)
+{
+ outb(SIO_LOCK_KEY, sioaddr);
+}
+
+static void smsc_superio_find(u16 sioaddr, u16 id_reg)
+{
+ struct superio_chip *chip;
+ u16 devid;
+
+ superio_enter(sioaddr);
+
+ devid = superio_inw(sioaddr, id_reg);
+ switch(devid >> 8) {
+ case 0x02:
+ case 0x03:
+ case 0x07:
+ case 0x09:
+ case 0x0a:
+ case 0x0b:
+ case 0x0e:
+ case 0x14:
+ case 0x30:
+ case 0x40:
+ case 0x42:
+ case 0x43:
+ case 0x44:
+ case 0x46:
+ case 0x47:
+ case 0x4c:
+ case 0x4d:
+ case 0x51:
+ case 0x52:
+ case 0x54:
+ case 0x56:
+ case 0x57:
+ case 0x59:
+ case 0x5d:
+ case 0x5f:
+ case 0x60:
+ case 0x62:
+ case 0x67:
+ case 0x6b:
+ case 0x6e:
+ case 0x6f:
+ case 0x74:
+ case 0x76:
+ case 0x77:
+ case 0x78:
+ case 0x79:
+ case 0x7a:
+ case 0x7c:
+ case 0x7d:
+ case 0x7f:
+ case 0x81:
+ case 0x83:
+ case 0x85:
+ case 0x86:
+ case 0x89:
+ case 0x8c:
+ case 0x90:
+ break;
+ default:
+ pr_debug("Not a SMSC device (port=0x%02x, devid=0x%04x)\n",
+ sioaddr, devid);
+ return;
+ }
+
+ chip = xzalloc(sizeof(*chip));
+
+ chip->devid = devid;
+ chip->vid = SMSC_ID;
+ chip->sioaddr = sioaddr;
+ chip->enter = superio_enter;
+ chip->exit = superio_exit;
+
+ superio_chip_add(chip);
+
+ superio_exit(sioaddr);
+}
+
+static int smsc_superio_detect(void)
+{
+ u16 ports[] = { 0x2e, 0x4e, 0x162e, 0x164e, 0x3f0, 0x370 };
+
+ for (int i = 0; i < ARRAY_SIZE(ports); i++)
+ smsc_superio_find(ports[i], SIO_REG_DEVID);
+
+ return 0;
+}
+coredevice_initcall(smsc_superio_detect);
diff --git a/drivers/mfd/superio.c b/drivers/mfd/superio.c
new file mode 100644
index 0000000000..0f08d56cb3
--- /dev/null
+++ b/drivers/mfd/superio.c
@@ -0,0 +1,98 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2019 Ahmad Fatoum, Pengutronix
+ */
+
+#define pr_fmt(fmt) "superio: " fmt
+
+#include <common.h>
+#include <superio.h>
+#include <regmap.h>
+
+struct device_d *superio_func_add(struct superio_chip *siochip, const char *name)
+{
+ struct device_d *dev;
+ int ret;
+
+ dev = device_alloc(name, DEVICE_ID_DYNAMIC);
+ dev->parent = siochip->dev;
+
+
+ ret = platform_device_register(dev);
+ if (ret)
+ return NULL;
+
+ return dev;
+}
+EXPORT_SYMBOL(superio_func_add)
+
+static int superio_reg_read(void *ctx, unsigned int reg, unsigned int *val)
+{
+ struct superio_chip *siochip = ctx;
+
+ siochip->enter(siochip->sioaddr);
+
+ *val = superio_inb(siochip->sioaddr, reg);
+
+ siochip->exit(siochip->sioaddr);
+
+ return 0;
+}
+
+static int superio_reg_write(void *ctx, unsigned int reg, unsigned int val)
+{
+ struct superio_chip *siochip = ctx;
+
+ siochip->enter(siochip->sioaddr);
+
+ superio_outb(siochip->sioaddr, reg, val);
+
+ siochip->exit(siochip->sioaddr);
+
+ return 0;
+}
+
+static struct regmap_bus superio_regmap_bus = {
+ .reg_write = superio_reg_write,
+ .reg_read = superio_reg_read,
+};
+
+static struct regmap_config superio_regmap_config = {
+ .reg_bits = 8,
+ .val_bits = 8,
+ .reg_stride = 1,
+ .max_register = 0xff,
+};
+
+void superio_chip_add(struct superio_chip *siochip)
+{
+ struct regmap *regmap;
+ char *chipname;
+ char str[5];
+ int ret;
+
+ chipname = xasprintf("superio-%04x:%04x@%02x",
+ siochip->vid, siochip->devid, siochip->sioaddr);
+ siochip->dev = add_generic_device(chipname, DEVICE_ID_SINGLE, NULL,
+ siochip->sioaddr, 2, IORESOURCE_IO,
+ NULL);
+
+ siochip->dev->priv = siochip;
+
+ sprintf(str, "%04x", siochip->vid);
+ dev_add_param_fixed(siochip->dev, "vendor", str);
+ sprintf(str, "%04x", siochip->devid);
+ dev_add_param_fixed(siochip->dev, "device", str);
+
+ regmap = regmap_init(siochip->dev, &superio_regmap_bus, siochip,
+ &superio_regmap_config);
+ if (IS_ERR(regmap))
+ pr_warn("creating %s regmap failed: %s\n",
+ chipname, strerror(-PTR_ERR(regmap)));
+
+ ret = regmap_register_cdev(regmap, chipname);
+ if (ret)
+ pr_warn("registering %s regmap cdev failed: %s\n",
+ chipname, strerror(-ret));
+}
+EXPORT_SYMBOL(superio_chip_add)
diff --git a/drivers/mtd/ubi/Kconfig b/drivers/mtd/ubi/Kconfig
index 9a344082b7..ed2f13d14c 100644
--- a/drivers/mtd/ubi/Kconfig
+++ b/drivers/mtd/ubi/Kconfig
@@ -10,23 +10,6 @@ menuconfig MTD_UBI
if MTD_UBI
-config MTD_UBI_WL_THRESHOLD
- int "UBI wear-leveling threshold"
- default 4096
- range 2 65536
- help
- This parameter defines the maximum difference between the highest
- erase counter value and the lowest erase counter value of eraseblocks
- of UBI devices. When this threshold is exceeded, UBI starts performing
- wear leveling by means of moving data from eraseblock with low erase
- counter to eraseblocks with high erase counter.
-
- The default value should be OK for SLC NAND flashes, NOR flashes and
- other flashes which have eraseblock life-cycle 100000 or more.
- However, in case of MLC NAND flashes which typically have eraseblock
- life-cycle less than 10000, the threshold should be lessened (e.g.,
- to 128 or 256, although it does not have to be power of 2).
-
config MTD_UBI_BEB_LIMIT
int "Maximum expected bad eraseblock count per 1024 eraseblocks"
default 20
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
index 493c778c3f..604fe87e53 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -655,7 +655,7 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
ubi->vol_count - UBI_INT_VOL_COUNT, UBI_INT_VOL_COUNT,
ubi->vtbl_slots);
ubi_msg(ubi, "max/mean erase counter: %d/%d, WL threshold: %d, image sequence number: %u",
- ubi->max_ec, ubi->mean_ec, CONFIG_MTD_UBI_WL_THRESHOLD,
+ ubi->max_ec, ubi->mean_ec, UBI_WL_THRESHOLD,
ubi->image_seq);
ubi_msg(ubi, "available PEBs: %d, total reserved PEBs: %d, PEBs reserved for bad PEB handling: %d",
ubi->avail_pebs, ubi->rsvd_pebs, ubi->beb_rsvd_pebs);
diff --git a/drivers/mtd/ubi/ubi.h b/drivers/mtd/ubi/ubi.h
index 922c1a3c8b..7d07bbf197 100644
--- a/drivers/mtd/ubi/ubi.h
+++ b/drivers/mtd/ubi/ubi.h
@@ -69,6 +69,17 @@
*/
#define UBI_PROT_QUEUE_LEN 10
+/*
+ * Maximum difference between two erase counters. If this threshold is
+ * exceeded, the WL sub-system starts moving data from used physical
+ * eraseblocks with low erase counter to free physical eraseblocks with high
+ * erase counter.
+ * Extensive wear-leveling in the barebox can lead to stack overflows. Thus
+ * disable it by setting the threshold to the OS's max configurable value and
+ * leave wear-leveling to the OS.
+ */
+#define UBI_WL_THRESHOLD 65536
+
/* The volume ID/LEB number/erase counter is unknown */
#define UBI_UNKNOWN -1
diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c
index cf90ecfb23..013ba3e1ff 100644
--- a/drivers/mtd/ubi/wl.c
+++ b/drivers/mtd/ubi/wl.c
@@ -101,14 +101,6 @@
#define WL_RESERVED_PEBS 1
/*
- * Maximum difference between two erase counters. If this threshold is
- * exceeded, the WL sub-system starts moving data from used physical
- * eraseblocks with low erase counter to free physical eraseblocks with high
- * erase counter.
- */
-#define UBI_WL_THRESHOLD CONFIG_MTD_UBI_WL_THRESHOLD
-
-/*
* When a physical eraseblock is moved, the WL sub-system has to pick the target
* physical eraseblock to move to. The simplest way would be just to pick the
* one with the highest erase counter. But in certain workloads this could lead
diff --git a/drivers/net/ag71xx.c b/drivers/net/ag71xx.c
index 0565c90490..70aaa60f1a 100644
--- a/drivers/net/ag71xx.c
+++ b/drivers/net/ag71xx.c
@@ -667,7 +667,7 @@ static void ag71xx_remove(struct device_d *dev)
}
static __maybe_unused struct of_device_id ag71xx_dt_ids[] = {
- { .compatible = "qca,ar9331-ge0", .data = &ag71xx_cfg_ar9331_ge0, },
+ { .compatible = "qca,ar9330-eth", .data = &ag71xx_cfg_ar9331_ge0, },
{ .compatible = "qca,ar9344-gmac0", .data = &ag71xx_cfg_ar9344_gmac0, },
{ /* sentinel */ }
};
diff --git a/drivers/net/phy/mv88e6xxx/Makefile b/drivers/net/phy/mv88e6xxx/Makefile
index e09ea0aa47..e1d4b1b9d7 100644
--- a/drivers/net/phy/mv88e6xxx/Makefile
+++ b/drivers/net/phy/mv88e6xxx/Makefile
@@ -1,5 +1,6 @@
obj-y += mv88e6xxx.o
mv88e6xxx-objs := chip.o
+mv88e6xxx-objs += global1.o
mv88e6xxx-objs += global2.o
mv88e6xxx-objs += port.o
diff --git a/drivers/net/phy/mv88e6xxx/chip.c b/drivers/net/phy/mv88e6xxx/chip.c
index 9688dbd1be..b1bffe5cbc 100644
--- a/drivers/net/phy/mv88e6xxx/chip.c
+++ b/drivers/net/phy/mv88e6xxx/chip.c
@@ -11,6 +11,7 @@
#include <of_gpio.h>
#include "chip.h"
+#include "global1.h"
#include "global2.h"
#include "port.h"
@@ -342,6 +343,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6085",
.num_ports = 10,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6085_ops,
},
@@ -352,6 +354,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6095/88E6095F",
.num_ports = 11,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6095_ops,
},
@@ -362,6 +365,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6097/88E6097F",
.num_ports = 11,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6097_ops,
},
@@ -372,6 +376,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6123",
.num_ports = 3,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6123_ops,
},
@@ -382,6 +387,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6131",
.num_ports = 8,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6131_ops,
},
@@ -392,6 +398,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6341",
.num_ports = 6,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6141_ops,
},
@@ -402,6 +409,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6161",
.num_ports = 6,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6161_ops,
},
@@ -412,6 +420,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6165",
.num_ports = 6,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6165_ops,
},
@@ -422,6 +431,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6171",
.num_ports = 7,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6171_ops,
},
@@ -432,6 +442,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6172",
.num_ports = 7,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6172_ops,
},
@@ -442,6 +453,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6175",
.num_ports = 7,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6175_ops,
},
@@ -452,6 +464,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6176",
.num_ports = 7,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6176_ops,
},
@@ -462,6 +475,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6185",
.num_ports = 10,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6185_ops,
},
@@ -472,6 +486,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6190",
.num_ports = 11, /* 10 + Z80 */
.port_base_addr = 0x0,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6190_ops,
},
@@ -482,6 +497,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6190X",
.num_ports = 11, /* 10 + Z80 */
.port_base_addr = 0x0,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6190x_ops,
},
@@ -492,6 +508,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6191",
.num_ports = 11, /* 10 + Z80 */
.port_base_addr = 0x0,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6191_ops,
},
@@ -502,6 +519,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6240",
.num_ports = 7,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6240_ops,
},
@@ -512,6 +530,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6290",
.num_ports = 11, /* 10 + Z80 */
.port_base_addr = 0x0,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6290_ops,
},
@@ -522,6 +541,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6320",
.num_ports = 7,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6320_ops,
},
@@ -532,6 +552,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6321",
.num_ports = 7,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6321_ops,
},
@@ -542,6 +563,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6341",
.num_ports = 6,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6341_ops,
},
@@ -552,6 +574,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6350",
.num_ports = 7,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6350_ops,
},
@@ -562,6 +585,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6351",
.num_ports = 7,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6351_ops,
},
@@ -572,6 +596,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6352",
.num_ports = 7,
.port_base_addr = 0x10,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6352_ops,
},
@@ -582,6 +607,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6390",
.num_ports = 11, /* 10 + Z80 */
.port_base_addr = 0x0,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6390_ops,
},
@@ -592,6 +618,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
.name = "Marvell 88E6390X",
.num_ports = 11, /* 10 + Z80 */
.port_base_addr = 0x0,
+ .global1_addr = 0x1b,
.global2_addr = 0x1c,
.ops = &mv88e6390x_ops,
},
@@ -741,6 +768,8 @@ static void mv88e6xxx_hardware_reset(struct mv88e6xxx_chip *chip)
mv88e6xxx_hardware_reset_delay();
gpio_set_active(chip->reset, 0);
mv88e6xxx_hardware_reset_delay();
+
+ mv88e6xxx_g1_wait_eeprom_done(chip);
}
}
@@ -797,7 +826,7 @@ static int mv88e6xxx_probe(struct device_d *dev)
err = of_property_read_u32(np, "reg", &reg);
if (err) {
- dev_err(dev, "Couldn't determine switch MIDO address\n");
+ dev_err(dev, "Couldn't determine switch MDIO address\n");
return err;
}
@@ -836,6 +865,11 @@ static int mv88e6xxx_probe(struct device_d *dev)
*/
mv88e6xxx_hardware_reset_delay();
}
+ /*
+ * Switch will not return valid data over MDIO until EEPROM is
+ * loaded
+ */
+ mv88e6xxx_g1_wait_eeprom_done(chip);
err = mv88e6xxx_detect(chip);
if (err)
diff --git a/drivers/net/phy/mv88e6xxx/chip.h b/drivers/net/phy/mv88e6xxx/chip.h
index 7548358de0..57f74a39a0 100644
--- a/drivers/net/phy/mv88e6xxx/chip.h
+++ b/drivers/net/phy/mv88e6xxx/chip.h
@@ -34,6 +34,7 @@ struct mv88e6xxx_info {
const char *name;
unsigned int num_ports;
unsigned int port_base_addr;
+ unsigned int global1_addr;
unsigned int global2_addr;
const struct mv88e6xxx_ops *ops;
diff --git a/drivers/net/phy/mv88e6xxx/global1.c b/drivers/net/phy/mv88e6xxx/global1.c
new file mode 100644
index 0000000000..bace5396e9
--- /dev/null
+++ b/drivers/net/phy/mv88e6xxx/global1.c
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Marvell 88E6xxx Switch Global (1) Registers support
+ *
+ * Copyright (c) 2008 Marvell Semiconductor
+ *
+ * Copyright (c) 2016-2017 Savoir-faire Linux Inc.
+ * Vivien Didelot <vivien.didelot@savoirfairelinux.com>
+ */
+
+#include <clock.h>
+#include <linux/bitfield.h>
+
+#include "chip.h"
+#include "global1.h"
+
+static int mv88e6xxx_g1_read(struct mv88e6xxx_chip *chip, int reg, u16 *val)
+{
+ int addr = chip->info->global1_addr;
+
+ return mv88e6xxx_read(chip, addr, reg, val);
+}
+
+void mv88e6xxx_g1_wait_eeprom_done(struct mv88e6xxx_chip *chip)
+{
+ const uint64_t start = get_time_ns();
+ const uint64_t timeout = SECOND;
+ u16 val;
+ int err;
+
+ /* Wait up to 1 second for the switch to finish reading the
+ * EEPROM.
+ */
+ while (!is_timeout(start, timeout)) {
+ err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_STS, &val);
+ if (err) {
+ dev_err(chip->dev, "Error reading status\n");
+ return;
+ }
+
+ if (val != 0xFFFF && /* switch will return 0xffff until
+ * EEPROM is loaded
+ */
+ val & BIT(MV88E6XXX_G1_STS_IRQ_EEPROM_DONE))
+ return;
+
+ mdelay(2);
+ }
+
+ dev_err(chip->dev, "Timeout waiting for EEPROM done\n");
+}
diff --git a/drivers/net/phy/mv88e6xxx/global1.h b/drivers/net/phy/mv88e6xxx/global1.h
new file mode 100644
index 0000000000..a505bae2bf
--- /dev/null
+++ b/drivers/net/phy/mv88e6xxx/global1.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Marvell 88E6xxx Switch Global (1) Registers support
+ *
+ * Copyright (c) 2008 Marvell Semiconductor
+ *
+ * Copyright (c) 2016-2017 Savoir-faire Linux Inc.
+ * Vivien Didelot <vivien.didelot@savoirfairelinux.com>
+ */
+
+#ifndef _MV88E6XXX_GLOBAL1_H
+#define _MV88E6XXX_GLOBAL1_H
+
+#include "chip.h"
+
+/* Offset 0x00: Switch Global Status Register */
+#define MV88E6XXX_G1_STS 0x00
+#define MV88E6352_G1_STS_PPU_STATE 0x8000
+#define MV88E6185_G1_STS_PPU_STATE_MASK 0xc000
+#define MV88E6185_G1_STS_PPU_STATE_DISABLED_RST 0x0000
+#define MV88E6185_G1_STS_PPU_STATE_INITIALIZING 0x4000
+#define MV88E6185_G1_STS_PPU_STATE_DISABLED 0x8000
+#define MV88E6185_G1_STS_PPU_STATE_POLLING 0xc000
+#define MV88E6XXX_G1_STS_INIT_READY 0x0800
+#define MV88E6XXX_G1_STS_IRQ_AVB 8
+#define MV88E6XXX_G1_STS_IRQ_DEVICE 7
+#define MV88E6XXX_G1_STS_IRQ_STATS 6
+#define MV88E6XXX_G1_STS_IRQ_VTU_PROB 5
+#define MV88E6XXX_G1_STS_IRQ_VTU_DONE 4
+#define MV88E6XXX_G1_STS_IRQ_ATU_PROB 3
+#define MV88E6XXX_G1_STS_IRQ_ATU_DONE 2
+#define MV88E6XXX_G1_STS_IRQ_TCAM_DONE 1
+#define MV88E6XXX_G1_STS_IRQ_EEPROM_DONE 0
+
+void mv88e6xxx_g1_wait_eeprom_done(struct mv88e6xxx_chip *chip);
+
+#endif /* _MV88E6XXX_GLOBAL1_H */
diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index 25924872ef..06e1414769 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -57,9 +57,14 @@ int nvmem_device_write(struct nvmem_device *nvmem, unsigned int offset,
static ssize_t nvmem_cdev_read(struct cdev *cdev, void *buf, size_t count,
loff_t offset, unsigned long flags)
{
- struct nvmem_device *nvmem = container_of(cdev, struct nvmem_device, cdev);
+ struct nvmem_device *nvmem;
ssize_t retlen;
+ if (cdev->master)
+ nvmem = container_of(cdev->master, struct nvmem_device, cdev);
+ else
+ nvmem = container_of(cdev, struct nvmem_device, cdev);
+
dev_dbg(cdev->dev, "read ofs: 0x%08llx count: 0x%08zx\n",
offset, count);
@@ -71,9 +76,14 @@ static ssize_t nvmem_cdev_read(struct cdev *cdev, void *buf, size_t count,
static ssize_t nvmem_cdev_write(struct cdev *cdev, const void *buf, size_t count,
loff_t offset, unsigned long flags)
{
- struct nvmem_device *nvmem = container_of(cdev, struct nvmem_device, cdev);
+ struct nvmem_device *nvmem;
ssize_t retlen;
+ if (cdev->master)
+ nvmem = container_of(cdev->master, struct nvmem_device, cdev);
+ else
+ nvmem = container_of(cdev, struct nvmem_device, cdev);
+
dev_dbg(cdev->dev, "write ofs: 0x%08llx count: 0x%08zx\n",
offset, count);
diff --git a/drivers/regulator/pfuze.c b/drivers/regulator/pfuze.c
index dc41e8f55b..1950ffb04c 100644
--- a/drivers/regulator/pfuze.c
+++ b/drivers/regulator/pfuze.c
@@ -161,16 +161,11 @@ static const struct regmap_config pfuze_regmap_i2c_config = {
static int __init pfuze_probe(struct device_d *dev)
{
- struct pfuze_devtype *devtype;
int ret;
if (pfuze_dev)
return -EBUSY;
- ret = dev_get_drvdata(dev, (const void **)&devtype);
- if (ret)
- return ret;
-
pfuze_dev = xzalloc(sizeof(*pfuze_dev));
pfuze_dev->dev = dev;
@@ -192,26 +187,19 @@ static int __init pfuze_probe(struct device_d *dev)
return 0;
}
-static struct pfuze_devtype pfuze100_devtype = {
-};
-
-static struct pfuze_devtype pfuze200_devtype = {
-};
-
-static struct pfuze_devtype pfuze3000_devtype = {
-};
-
static struct platform_device_id pfuze_ids[] = {
- { .name = "pfuze100", .driver_data = (ulong)&pfuze100_devtype, },
- { .name = "pfuze200", .driver_data = (ulong)&pfuze200_devtype, },
- { .name = "pfuze3000", .driver_data = (ulong)&pfuze3000_devtype, },
+ { .name = "pfuze100" },
+ { .name = "pfuze200" },
+ { .name = "pfuze3000" },
+ { .name = "pfuze3001" },
{ }
};
static __maybe_unused struct of_device_id pfuze_dt_ids[] = {
- { .compatible = "fsl,pfuze100", .data = &pfuze100_devtype, },
- { .compatible = "fsl,pfuze200", .data = &pfuze200_devtype, },
- { .compatible = "fsl,pfuze3000", .data = &pfuze3000_devtype, },
+ { .compatible = "fsl,pfuze100" },
+ { .compatible = "fsl,pfuze200" },
+ { .compatible = "fsl,pfuze3000" },
+ { .compatible = "fsl,pfuze3001" },
{ }
};
diff --git a/drivers/usb/gadget/f_acm.c b/drivers/usb/gadget/f_acm.c
index cba59b1585..42a2b03ad2 100644
--- a/drivers/usb/gadget/f_acm.c
+++ b/drivers/usb/gadget/f_acm.c
@@ -104,7 +104,7 @@ acm_iad_descriptor = {
.bInterfaceCount = 2, // control + data
.bFunctionClass = USB_CLASS_COMM,
.bFunctionSubClass = USB_CDC_SUBCLASS_ACM,
- .bFunctionProtocol = USB_CDC_ACM_PROTO_AT_V25TER,
+ .bFunctionProtocol = USB_CDC_PROTO_NONE,
/* .iFunction = DYNAMIC */
};
@@ -116,7 +116,7 @@ static struct usb_interface_descriptor acm_control_interface_desc = {
.bNumEndpoints = 1,
.bInterfaceClass = USB_CLASS_COMM,
.bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
- .bInterfaceProtocol = USB_CDC_ACM_PROTO_AT_V25TER,
+ .bInterfaceProtocol = USB_CDC_PROTO_NONE,
/* .iInterface = DYNAMIC */
};
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index fbaab896d4..45dd41a2a2 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -96,4 +96,13 @@ config STPMIC1_WATCHDOG
help
Enable to support configuration of the stpmic1's built-in watchdog.
+config F71808E_WDT
+ bool "Fintek F718xx, F818xx Super I/O Watchdog"
+ depends on X86
+ depends on FINTEK_SUPERIO
+ help
+ This is the driver for the hardware watchdog on the Fintek F71808E,
+ F71862FG, F71868, F71869, F71882FG, F71889FG, F81865 and F81866
+ Super I/O controllers.
+
endif
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index 1fbd780885..63efc2a87e 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -13,3 +13,4 @@ obj-$(CONFIG_ARCH_BCM283X) += bcm2835_wdt.o
obj-$(CONFIG_RAVE_SP_WATCHDOG) += rave-sp-wdt.o
obj-$(CONFIG_STM32_IWDG_WATCHDOG) += stm32_iwdg.o
obj-$(CONFIG_STPMIC1_WATCHDOG) += stpmic1_wdt.o
+obj-$(CONFIG_F71808E_WDT) += f71808e_wdt.o
diff --git a/drivers/watchdog/f71808e_wdt.c b/drivers/watchdog/f71808e_wdt.c
new file mode 100644
index 0000000000..4f881a1d02
--- /dev/null
+++ b/drivers/watchdog/f71808e_wdt.c
@@ -0,0 +1,379 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/***************************************************************************
+ * Copyright (C) 2006 by Hans Edgington <hans@edgington.nl> *
+ * Copyright (C) 2007-2009 Hans de Goede <hdegoede@redhat.com> *
+ * Copyright (C) 2010 Giel van Schijndel <me@mortis.eu> *
+ * Copyright (C) 2019 Ahmad Fatoum <a.fatoum@pengutronix.de> *
+ * *
+ ***************************************************************************/
+
+#define pr_fmt(fmt) "f71808e_wdt: " fmt
+
+#include <init.h>
+#include <asm/io.h>
+#include <linux/bitops.h>
+#include <driver.h>
+#include <watchdog.h>
+#include <printk.h>
+#include <reset_source.h>
+#include <superio.h>
+#include <common.h>
+
+#define SIO_F71808FG_LD_WDT 0x07 /* Watchdog timer logical device */
+#define SIO_UNLOCK_KEY 0x87 /* Key to enable Super-I/O */
+#define SIO_LOCK_KEY 0xAA /* Key to disable Super-I/O */
+
+#define SIO_REG_LDSEL 0x07 /* Logical device select */
+#define SIO_REG_DEVREV 0x22 /* Device revision */
+#define SIO_REG_ROM_ADDR_SEL 0x27 /* ROM address select */
+#define SIO_F81866_REG_PORT_SEL 0x27 /* F81866 Multi-Function Register */
+#define SIO_REG_MFUNCT1 0x29 /* Multi function select 1 */
+#define SIO_REG_MFUNCT2 0x2a /* Multi function select 2 */
+#define SIO_REG_MFUNCT3 0x2b /* Multi function select 3 */
+#define SIO_F81866_REG_GPIO1 0x2c /* F81866 GPIO1 Enable Register */
+#define SIO_REG_ENABLE 0x30 /* Logical device enable */
+#define SIO_REG_ADDR 0x60 /* Logical device address (2 bytes) */
+
+#define F71808FG_REG_WDO_CONF 0xf0
+#define F71808FG_REG_WDT_CONF 0xf5
+#define F71808FG_REG_WD_TIME 0xf6
+
+#define F71808FG_FLAG_WDOUT_EN 7
+
+#define F71808FG_FLAG_WDTMOUT_STS 6
+#define F71808FG_FLAG_WD_EN 5
+#define F71808FG_FLAG_WD_PULSE 4
+#define F71808FG_FLAG_WD_UNIT 3
+
+#define F81865_REG_WDO_CONF 0xfa
+#define F81865_FLAG_WDOUT_EN 0
+
+/* Default values */
+#define WATCHDOG_MAX_TIMEOUT (60 * 255)
+
+enum pulse_width {
+ PULSE_WIDTH_LEVEL, PULSE_WIDTH_1MS,
+ PULSE_WIDTH_LOW, PULSE_WIDTH_MID, PULSE_WIDTH_HIGH
+};
+
+const char *pulse_width_names[] = { "level", "1", "25", "125", "5000" };
+const char *pulse_width_names_f71868[] = { "level", "1", "30", "150", "6000" };
+
+enum wdtrst_pin {
+ WDTRST_PIN_56, WDTRST_PIN_63,
+};
+
+const char *f71862fg_pin_names[] = { "56", "63" };
+
+enum chips { f71808fg, f71858fg, f71862fg, f71868, f71869, f71882fg, f71889fg,
+ f81865, f81866};
+
+struct f71808e_wdt;
+
+struct f71808e_variant_data {
+ enum chips type;
+ void (*pinconf)(struct f71808e_wdt *wd);
+};
+
+struct f71808e_wdt {
+ struct watchdog wdd;
+ u16 sioaddr;
+ const struct f71808e_variant_data *variant;
+ unsigned int timeout;
+ u8 timer_val; /* content for the wd_time register */
+ char minutes_mode;
+ int pulse_width;
+ int f71862fg_pin;
+};
+
+static inline struct f71808e_wdt *to_f71808e_wdt(struct watchdog *wdd)
+{
+ return container_of(wdd, struct f71808e_wdt, wdd);
+}
+
+static inline bool has_f81865_wdo_conf(struct f71808e_wdt *wd)
+{
+ return wd->variant->type == f81865 || wd->variant->type == f81866;
+}
+
+static inline void superio_enter(u16 base)
+{
+ /* according to the datasheet the key must be sent twice! */
+ outb(SIO_UNLOCK_KEY, base);
+ outb(SIO_UNLOCK_KEY, base);
+}
+
+static inline void superio_select(u16 base, int ld)
+{
+ outb(SIO_REG_LDSEL, base);
+ outb(ld, base + 1);
+}
+
+static inline void superio_exit(u16 base)
+{
+ outb(SIO_LOCK_KEY, base);
+}
+
+static void f71808e_wdt_keepalive(struct f71808e_wdt *wd)
+{
+ superio_enter(wd->sioaddr);
+
+ superio_select(wd->sioaddr, SIO_F71808FG_LD_WDT);
+
+ if (wd->minutes_mode)
+ /* select minutes for timer units */
+ superio_set_bit(wd->sioaddr, F71808FG_REG_WDT_CONF,
+ F71808FG_FLAG_WD_UNIT);
+ else
+ /* select seconds for timer units */
+ superio_clear_bit(wd->sioaddr, F71808FG_REG_WDT_CONF,
+ F71808FG_FLAG_WD_UNIT);
+
+ /* Set timer value */
+ superio_outb(wd->sioaddr, F71808FG_REG_WD_TIME,
+ wd->timer_val);
+
+ superio_exit(wd->sioaddr);
+}
+
+static void f71808e_wdt_start(struct f71808e_wdt *wd)
+{
+ /* Make sure we don't die as soon as the watchdog is enabled below */
+ f71808e_wdt_keepalive(wd);
+
+ superio_enter(wd->sioaddr);
+
+ superio_select(wd->sioaddr, SIO_F71808FG_LD_WDT);
+
+ /* Watchdog pin configuration */
+ wd->variant->pinconf(wd);
+
+ superio_select(wd->sioaddr, SIO_F71808FG_LD_WDT);
+ superio_set_bit(wd->sioaddr, SIO_REG_ENABLE, 0);
+
+ if (has_f81865_wdo_conf(wd))
+ superio_set_bit(wd->sioaddr, F81865_REG_WDO_CONF,
+ F81865_FLAG_WDOUT_EN);
+ else
+ superio_set_bit(wd->sioaddr, F71808FG_REG_WDO_CONF,
+ F71808FG_FLAG_WDOUT_EN);
+
+ superio_set_bit(wd->sioaddr, F71808FG_REG_WDT_CONF,
+ F71808FG_FLAG_WD_EN);
+
+ if (wd->pulse_width > 0) {
+ /* Select "pulse" output mode with given duration */
+ u8 wdt_conf = superio_inb(wd->sioaddr, F71808FG_REG_WDT_CONF);
+
+ /* Set WD_PSWIDTH bits (1:0) */
+ wdt_conf = (wdt_conf & 0xfc) | (wd->pulse_width & 0x03);
+ /* Set WD_PULSE to "pulse" mode */
+ wdt_conf |= BIT(F71808FG_FLAG_WD_PULSE);
+
+ superio_outb(wd->sioaddr, F71808FG_REG_WDT_CONF, wdt_conf);
+ } else {
+ /* Select "level" output mode */
+ superio_clear_bit(wd->sioaddr, F71808FG_REG_WDT_CONF,
+ F71808FG_FLAG_WD_PULSE);
+ }
+
+ superio_exit(wd->sioaddr);
+}
+
+static void f71808e_wdt_stop(struct f71808e_wdt *wd)
+{
+ superio_enter(wd->sioaddr);
+
+ superio_select(wd->sioaddr, SIO_F71808FG_LD_WDT);
+
+ superio_clear_bit(wd->sioaddr, F71808FG_REG_WDT_CONF,
+ F71808FG_FLAG_WD_EN);
+
+ superio_exit(wd->sioaddr);
+}
+
+static int f71808e_wdt_set_timeout(struct watchdog *wdd, unsigned int new_timeout)
+{
+ struct f71808e_wdt *wd = to_f71808e_wdt(wdd);
+
+ if (!new_timeout) {
+ f71808e_wdt_stop(wd);
+ return 0;
+ }
+
+ if (wd->timeout != new_timeout) {
+ if (new_timeout > 0xff) {
+ wd->timer_val = DIV_ROUND_UP(new_timeout, 60);
+ wd->minutes_mode = true;
+ } else {
+ wd->timer_val = new_timeout;
+ wd->minutes_mode = false;
+ }
+
+ f71808e_wdt_start(wd);
+ wd->timeout = new_timeout;
+ }
+
+ f71808e_wdt_keepalive(wd);
+ return 0;
+}
+
+static int f71808e_wdt_init(struct f71808e_wdt *wd, struct device_d *dev)
+{
+ struct watchdog *wdd = &wd->wdd;
+ const char * const *names = pulse_width_names;
+ int wdt_conf;
+ int ret;
+
+ superio_enter(wd->sioaddr);
+
+ superio_select(wd->sioaddr, SIO_F71808FG_LD_WDT);
+
+ wdt_conf = superio_inb(wd->sioaddr, F71808FG_REG_WDT_CONF);
+
+ superio_exit(wd->sioaddr);
+
+ if (wd->variant->type == f71868)
+ names = pulse_width_names_f71868;
+
+ wd->pulse_width = PULSE_WIDTH_MID; /* either 125ms or 150ms */
+
+ dev_add_param_enum(dev, "pulse_width_ms", NULL, NULL,
+ &wd->pulse_width, names,
+ ARRAY_SIZE(pulse_width_names),
+ wd);
+
+ if (wd->variant->type == f71862fg) {
+ wd->f71862fg_pin = WDTRST_PIN_63;
+
+ dev_add_param_enum(dev, "wdtrst_pin", NULL, NULL,
+ &wd->f71862fg_pin, f71862fg_pin_names,
+ ARRAY_SIZE(f71862fg_pin_names),
+ wd);
+ }
+
+ wdd->hwdev = dev;
+ wdd->set_timeout = &f71808e_wdt_set_timeout;
+ wdd->timeout_max = WATCHDOG_MAX_TIMEOUT;
+
+ if (wdt_conf & BIT(F71808FG_FLAG_WDTMOUT_STS))
+ reset_source_set_priority(RESET_WDG,
+ RESET_SOURCE_DEFAULT_PRIORITY);
+
+ dev_info(dev, "reset reason: %s\n", reset_source_name());
+
+ ret = watchdog_register(wdd);
+ if (ret)
+ return ret;
+
+ superio_enter(wd->sioaddr);
+ dev_info(dev, "revision %d probed.\n",
+ superio_inb(wd->sioaddr, SIO_REG_DEVREV));
+ superio_exit(wd->sioaddr);
+
+ return 0;
+}
+
+static void f71808fg_pinconf(struct f71808e_wdt *wd)
+{
+ /* Set pin 21 to GPIO23/WDTRST#, then to WDTRST# */
+ superio_clear_bit(wd->sioaddr, SIO_REG_MFUNCT2, 3);
+ superio_clear_bit(wd->sioaddr, SIO_REG_MFUNCT3, 3);
+}
+static void f71862fg_pinconf(struct f71808e_wdt *wd)
+{
+ u16 ioaddr = wd->sioaddr;
+
+ if (wd->f71862fg_pin == WDTRST_PIN_63) {
+ /* SPI must be disabled first to use this pin! */
+ superio_clear_bit(ioaddr, SIO_REG_ROM_ADDR_SEL, 6);
+ superio_set_bit(ioaddr, SIO_REG_MFUNCT3, 4);
+ } else if (wd->f71862fg_pin == WDTRST_PIN_56) {
+ superio_set_bit(ioaddr, SIO_REG_MFUNCT1, 1);
+ }
+}
+static void f71868_pinconf(struct f71808e_wdt *wd)
+{
+ /* GPIO14 --> WDTRST# */
+ superio_clear_bit(wd->sioaddr, SIO_REG_MFUNCT1, 4);
+}
+static void f71882fg_pinconf(struct f71808e_wdt *wd)
+{
+ /* Set pin 56 to WDTRST# */
+ superio_set_bit(wd->sioaddr, SIO_REG_MFUNCT1, 1);
+}
+static void f71889fg_pinconf(struct f71808e_wdt *wd)
+{
+ /* set pin 40 to WDTRST# */
+ superio_outb(wd->sioaddr, SIO_REG_MFUNCT3,
+ superio_inb(wd->sioaddr, SIO_REG_MFUNCT3) & 0xcf);
+}
+static void f81865_pinconf(struct f71808e_wdt *wd)
+{
+ /* Set pin 70 to WDTRST# */
+ superio_clear_bit(wd->sioaddr, SIO_REG_MFUNCT3, 5);
+}
+static void f81866_pinconf(struct f71808e_wdt *wd)
+{
+ /*
+ * GPIO1 Control Register when 27h BIT3:2 = 01 & BIT0 = 0.
+ * The PIN 70(GPIO15/WDTRST) is controlled by 2Ch:
+ * BIT5: 0 -> WDTRST#
+ * 1 -> GPIO15
+ */
+ u8 tmp = superio_inb(wd->sioaddr, SIO_F81866_REG_PORT_SEL);
+ tmp &= ~(BIT(3) | BIT(0));
+ tmp |= BIT(2);
+ superio_outb(wd->sioaddr, SIO_F81866_REG_PORT_SEL, tmp);
+
+ superio_clear_bit(wd->sioaddr, SIO_F81866_REG_GPIO1, 5);
+}
+
+static struct f71808e_variant_data f71808fg_data = { .type = f71808fg, .pinconf = f71808fg_pinconf };
+static struct f71808e_variant_data f71862fg_data = { .type = f71862fg, .pinconf = f71862fg_pinconf };
+static struct f71808e_variant_data f71868_data = { .type = f71868, .pinconf = f71868_pinconf };
+static struct f71808e_variant_data f71869_data = { .type = f71869, .pinconf = f71868_pinconf };
+static struct f71808e_variant_data f71882fg_data = { .type = f71882fg, .pinconf = f71882fg_pinconf };
+static struct f71808e_variant_data f71889fg_data = { .type = f71889fg, .pinconf = f71889fg_pinconf };
+static struct f71808e_variant_data f81865_data = { .type = f81865, .pinconf = f81865_pinconf };
+static struct f71808e_variant_data f81866_data = { .type = f81866, .pinconf = f81866_pinconf };
+
+static struct platform_device_id f71808e_wdt_ids[] = {
+ { .name = "f71808fg_wdt", .driver_data = (unsigned long)&f71808fg_data },
+ { .name = "f71862fg_wdt", .driver_data = (unsigned long)&f71862fg_data },
+ { .name = "f71868_wdt", .driver_data = (unsigned long)&f71868_data },
+ { .name = "f71869_wdt", .driver_data = (unsigned long)&f71869_data },
+ { .name = "f71882fg_wdt", .driver_data = (unsigned long)&f71882fg_data },
+ { .name = "f71889fg_wdt", .driver_data = (unsigned long)&f71889fg_data },
+ { .name = "f81865_wdt", .driver_data = (unsigned long)&f81865_data },
+ { .name = "f81866_wdt", .driver_data = (unsigned long)&f81866_data },
+ { /* sentinel */ },
+};
+
+static int f71808e_probe(struct device_d *dev)
+{
+ struct f71808e_wdt *wd;
+ struct resource *res;
+ int ret;
+
+ wd = xzalloc(sizeof(*wd));
+
+ ret = dev_get_drvdata(dev, (const void **)&wd->variant);
+ if (ret)
+ return ret;
+
+ res = dev_get_resource(dev->parent, IORESOURCE_IO, 0);
+ if (IS_ERR(res))
+ return PTR_ERR(res);
+ wd->sioaddr = res->start;
+
+ return f71808e_wdt_init(wd, dev);
+}
+
+static struct driver_d f71808e_wdt_driver = {
+ .probe = f71808e_probe,
+ .name = "f71808e_wdt",
+ .id_table = f71808e_wdt_ids,
+};
+
+device_platform_driver(f71808e_wdt_driver);
diff --git a/fs/devfs-core.c b/fs/devfs-core.c
index 2b93a951f2..258bb2dbaa 100644
--- a/fs/devfs-core.c
+++ b/fs/devfs-core.c
@@ -122,10 +122,17 @@ struct cdev *device_find_partition(struct device_d *dev, const char *name)
struct device_d *child;
list_for_each_entry(cdev, &dev->cdevs, devices_list) {
+ struct cdev *cdevl;
+
if (!cdev->partname)
continue;
if (!strcmp(cdev->partname, name))
return cdev;
+
+ list_for_each_entry(cdevl, &cdev->links, link_entry) {
+ if (!strcmp(cdevl->partname, name))
+ return cdev_readlink(cdevl);
+ }
}
device_for_each_child(dev, child) {
@@ -252,6 +259,20 @@ int devfs_create_link(struct cdev *cdev, const char *name)
new = xzalloc(sizeof(*new));
new->name = xstrdup(name);
new->link = cdev;
+
+ if (cdev->partname) {
+ size_t partnameoff = 0;
+
+ if (cdev->master) {
+ size_t masterlen = strlen(cdev->master->name);
+
+ if (!strncmp(name, cdev->master->name, masterlen))
+ partnameoff += masterlen + 1;
+ }
+
+ new->partname = xstrdup(name + partnameoff);
+ }
+
INIT_LIST_HEAD(&new->links);
list_add_tail(&new->list, &cdev_list);
list_add_tail(&new->link_entry, &cdev->links);
diff --git a/fs/ext4/ext_common.h b/fs/ext4/ext_common.h
index c084cf9a32..a28f591bc4 100644
--- a/fs/ext4/ext_common.h
+++ b/fs/ext4/ext_common.h
@@ -37,7 +37,7 @@
/* Amount of indirect blocks in an inode. */
#define INDIRECT_BLOCKS 12
-/* Maximum lenght of a pathname. */
+/* Maximum length of a pathname. */
#define EXT2_PATH_MAX 4096
/* Maximum nesting of symlinks, used to prevent a loop. */
#define EXT2_MAX_SYMLINKCNT 8
diff --git a/fs/fs.c b/fs/fs.c
index dda19db913..12faaebc27 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -2699,7 +2699,7 @@ int chdir(const char *pathname)
struct path path;
int ret;
- ret = filename_lookup(AT_FDCWD, getname(pathname), LOOKUP_FOLLOW, &path);
+ ret = filename_lookup(AT_FDCWD, getname(pathname), LOOKUP_FOLLOW | LOOKUP_DIRECTORY, &path);
if (ret)
goto out;
diff --git a/include/jtag.h b/include/jtag.h
index 26c95fb307..4cc4eaca91 100644
--- a/include/jtag.h
+++ b/include/jtag.h
@@ -28,7 +28,7 @@
* (repeat for each chip in the chain)
* - ioctl JTAG_GET_ID identifies the chip
* - ioctl JTAG_SET_IR_LENGTH sets the instruction register length
- * Before accessing the data registers, instruction registers' lenghtes
+ * Before accessing the data registers, instruction registers' lengths
* MUST be programmed for all chips.
* After this initialization, you can execute JTAG_IR_WR, JTAG_DR_RD, JTAG_DR_WR
* commands in any sequence.
diff --git a/include/state.h b/include/state.h
index 4e995a19ef..d98b781c20 100644
--- a/include/state.h
+++ b/include/state.h
@@ -5,17 +5,13 @@
struct state;
-int state_backend_dtb_file(struct state *state, const char *of_path,
- const char *path);
-int state_backend_raw_file(struct state *state, const char *of_path,
- const char *path, off_t offset, size_t size);
+#if IS_ENABLED(CONFIG_STATE)
struct state *state_new_from_node(struct device_node *node, bool readonly);
void state_release(struct state *state);
struct state *state_by_name(const char *name);
struct state *state_by_node(const struct device_node *node);
-int state_get_name(const struct state *state, char const **name);
int state_load_no_auth(struct state *state);
int state_load(struct state *state);
@@ -24,4 +20,39 @@ void state_info(void);
int state_read_mac(struct state *state, const char *name, u8 *buf);
+#else /* #if IS_ENABLED(CONFIG_STATE) */
+
+static inline struct state *state_new_from_node(struct device_node *node,
+ bool readonly)
+{
+ return ERR_PTR(-ENOSYS);
+}
+
+static inline struct state *state_by_name(const char *name)
+{
+ return NULL;
+}
+
+static inline struct state *state_by_node(const struct device_node *node)
+{
+ return NULL;
+};
+
+static inline int state_load(struct state *state)
+{
+ return -ENOSYS;
+}
+
+static inline int state_save(struct state *state)
+{
+ return -ENOSYS;
+}
+
+static inline int state_read_mac(struct state *state, const char *name, u8 *buf)
+{
+ return -ENOSYS;
+}
+
+#endif /* #if IS_ENABLED(CONFIG_STATE) / #else */
+
#endif /* __STATE_H */
diff --git a/include/superio.h b/include/superio.h
new file mode 100644
index 0000000000..12bff58b6b
--- /dev/null
+++ b/include/superio.h
@@ -0,0 +1,64 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2019 Ahmad Fatoum, Pengutronix
+ */
+
+#ifndef _SUPERIO_H_
+#define _SUPERIO_H_
+
+#include <asm/io.h>
+#include <linux/bitops.h>
+#include <driver.h>
+#include <linux/types.h>
+
+#define SIO_REG_DEVID 0x20 /* Device ID (2 bytes) */
+#define SIO_REG_DEVREV 0x22 /* Device revision */
+#define SIO_REG_MANID 0x23 /* Vendor ID (2 bytes) */
+
+static inline u8 superio_inb(u16 base, u8 reg)
+{
+ outb(reg, base);
+ return inb(base + 1);
+}
+
+static inline u16 superio_inw(u16 base, u8 reg)
+{
+ u16 val;
+ val = superio_inb(base, reg) << 8;
+ val |= superio_inb(base, reg + 1);
+ return val;
+}
+
+static inline void superio_outb(u16 base, u8 reg, u8 val)
+{
+ outb(reg, base);
+ outb(val, base + 1);
+}
+
+static inline void superio_set_bit(u16 base, u8 reg, unsigned bit)
+{
+ unsigned long val = superio_inb(base, reg);
+ __set_bit(bit, &val);
+ superio_outb(base, reg, val);
+}
+
+static inline void superio_clear_bit(u16 base, u8 reg, unsigned bit)
+{
+ unsigned long val = superio_inb(base, reg);
+ __clear_bit(bit, &val);
+ superio_outb(base, reg, val);
+}
+
+struct superio_chip {
+ struct device_d *dev;
+ u16 vid;
+ u16 devid;
+ u16 sioaddr;
+ void (*enter)(u16 sioaddr);
+ void (*exit)(u16 sioaddr);
+};
+
+void superio_chip_add(struct superio_chip *chip);
+struct device_d *superio_func_add(struct superio_chip *chip, const char *name);
+
+#endif
diff --git a/lib/fonts/font_7x14.c b/lib/fonts/font_7x14.c
index 384ba39f17..e5ef8323ca 100644
--- a/lib/fonts/font_7x14.c
+++ b/lib/fonts/font_7x14.c
@@ -2058,7 +2058,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 128 0x80 '' */
+ /* 128 0x80 '€' */
0x00, /* 0000000 */
0x38, /* 0011100 */
0x6c, /* 0110110 */
@@ -2074,7 +2074,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x70, /* 0111000 */
0x00, /* 0000000 */
- /* 129 0x81 '' */
+ /* 129 0x81 '' */
0x00, /* 0000000 */
0xcc, /* 1100110 */
0x00, /* 0000000 */
@@ -2090,7 +2090,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 130 0x82 '' */
+ /* 130 0x82 '‚' */
0x0c, /* 0000110 */
0x18, /* 0001100 */
0x30, /* 0011000 */
@@ -2106,7 +2106,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 131 0x83 '' */
+ /* 131 0x83 'ƒ' */
0x10, /* 0001000 */
0x38, /* 0011100 */
0x6c, /* 0110110 */
@@ -2122,7 +2122,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 132 0x84 '' */
+ /* 132 0x84 '„' */
0x00, /* 0000000 */
0xcc, /* 1100110 */
0x00, /* 0000000 */
@@ -2138,7 +2138,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 133 0x85 '' */
+ /* 133 0x85 '…' */
0x60, /* 0110000 */
0x30, /* 0011000 */
0x18, /* 0001100 */
@@ -2154,7 +2154,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 134 0x86 '' */
+ /* 134 0x86 '†' */
0x38, /* 0011100 */
0x6c, /* 0110110 */
0x38, /* 0011100 */
@@ -2170,7 +2170,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 135 0x87 '' */
+ /* 135 0x87 '‡' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -2186,7 +2186,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0xe0, /* 1110000 */
- /* 136 0x88 '' */
+ /* 136 0x88 'ˆ' */
0x10, /* 0001000 */
0x38, /* 0011100 */
0x6c, /* 0110110 */
@@ -2202,7 +2202,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 137 0x89 '' */
+ /* 137 0x89 '‰' */
0x00, /* 0000000 */
0xcc, /* 1100110 */
0x00, /* 0000000 */
@@ -2218,7 +2218,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 138 0x8a '' */
+ /* 138 0x8a 'Š' */
0xc0, /* 1100000 */
0x60, /* 0110000 */
0x30, /* 0011000 */
@@ -2234,7 +2234,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 139 0x8b '' */
+ /* 139 0x8b '‹' */
0x00, /* 0000000 */
0x6c, /* 0110110 */
0x00, /* 0000000 */
@@ -2250,7 +2250,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 140 0x8c '' */
+ /* 140 0x8c 'Œ' */
0x30, /* 0011000 */
0x78, /* 0111100 */
0xcc, /* 1100110 */
@@ -2266,7 +2266,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 141 0x8d '' */
+ /* 141 0x8d '' */
0xc0, /* 1100000 */
0x60, /* 0110000 */
0x30, /* 0011000 */
@@ -2282,7 +2282,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 142 0x8e '' */
+ /* 142 0x8e 'Ž' */
0x00, /* 0000000 */
0xcc, /* 1100110 */
0x00, /* 0000000 */
@@ -2298,7 +2298,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 143 0x8f '' */
+ /* 143 0x8f '' */
0x30, /* 0011000 */
0x48, /* 0100100 */
0x48, /* 0100100 */
@@ -2314,7 +2314,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 144 0x90 '' */
+ /* 144 0x90 '' */
0x18, /* 0001100 */
0x30, /* 0011000 */
0xfc, /* 1111110 */
@@ -2330,7 +2330,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 145 0x91 '' */
+ /* 145 0x91 '‘' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -2346,7 +2346,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 146 0x92 '' */
+ /* 146 0x92 '’' */
0x00, /* 0000000 */
0x3e, /* 0011111 */
0x6c, /* 0110110 */
@@ -2362,7 +2362,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 147 0x93 '' */
+ /* 147 0x93 '“' */
0x10, /* 0001000 */
0x38, /* 0011100 */
0x6c, /* 0110110 */
@@ -2378,7 +2378,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 148 0x94 '' */
+ /* 148 0x94 '”' */
0x00, /* 0000000 */
0xcc, /* 1100110 */
0x00, /* 0000000 */
@@ -2394,7 +2394,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 149 0x95 '' */
+ /* 149 0x95 '•' */
0xc0, /* 1100000 */
0x60, /* 0110000 */
0x30, /* 0011000 */
@@ -2410,7 +2410,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 150 0x96 '' */
+ /* 150 0x96 '–' */
0x30, /* 0011000 */
0x78, /* 0111100 */
0xcc, /* 1100110 */
@@ -2426,7 +2426,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 151 0x97 '' */
+ /* 151 0x97 '—' */
0x60, /* 0110000 */
0x30, /* 0011000 */
0x18, /* 0001100 */
@@ -2442,7 +2442,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 152 0x98 '' */
+ /* 152 0x98 '˜' */
0x00, /* 0000000 */
0xcc, /* 1100110 */
0x00, /* 0000000 */
@@ -2458,7 +2458,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x18, /* 0001100 */
0x70, /* 0111000 */
- /* 153 0x99 '' */
+ /* 153 0x99 '™' */
0xcc, /* 1100110 */
0x00, /* 0000000 */
0x78, /* 0111100 */
@@ -2474,7 +2474,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 154 0x9a '' */
+ /* 154 0x9a 'š' */
0xcc, /* 1100110 */
0x00, /* 0000000 */
0xcc, /* 1100110 */
@@ -2490,7 +2490,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 155 0x9b '' */
+ /* 155 0x9b '›' */
0x30, /* 0011000 */
0x30, /* 0011000 */
0x7c, /* 0111110 */
@@ -2506,7 +2506,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 156 0x9c '' */
+ /* 156 0x9c 'œ' */
0x38, /* 0011100 */
0x6c, /* 0110110 */
0x64, /* 0110010 */
@@ -2522,7 +2522,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 157 0x9d '' */
+ /* 157 0x9d '' */
0x00, /* 0000000 */
0xcc, /* 1100110 */
0xcc, /* 1100110 */
@@ -2538,7 +2538,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 158 0x9e '' */
+ /* 158 0x9e 'ž' */
0xf8, /* 1111100 */
0xcc, /* 1100110 */
0xcc, /* 1100110 */
@@ -2554,7 +2554,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 159 0x9f '' */
+ /* 159 0x9f 'Ÿ' */
0x1c, /* 0001110 */
0x36, /* 0011011 */
0x30, /* 0011000 */
@@ -2570,7 +2570,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 160 0xa0 '' */
+ /* 160 0xa0 ' ' */
0x18, /* 0001100 */
0x30, /* 0011000 */
0x60, /* 0110000 */
@@ -2586,7 +2586,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 161 0xa1 '' */
+ /* 161 0xa1 '¡' */
0x18, /* 0001100 */
0x30, /* 0011000 */
0x60, /* 0110000 */
@@ -2602,7 +2602,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 162 0xa2 '' */
+ /* 162 0xa2 '¢' */
0x18, /* 0001100 */
0x30, /* 0011000 */
0x60, /* 0110000 */
@@ -2618,7 +2618,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 163 0xa3 '' */
+ /* 163 0xa3 '£' */
0x18, /* 0001100 */
0x30, /* 0011000 */
0x60, /* 0110000 */
@@ -2634,7 +2634,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 164 0xa4 '' */
+ /* 164 0xa4 '¤' */
0x00, /* 0000000 */
0x76, /* 0111011 */
0xdc, /* 1101110 */
@@ -2650,7 +2650,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 165 0xa5 '' */
+ /* 165 0xa5 '¥' */
0x76, /* 0111011 */
0xdc, /* 1101110 */
0x00, /* 0000000 */
@@ -2666,7 +2666,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 166 0xa6 '' */
+ /* 166 0xa6 '¦' */
0x00, /* 0000000 */
0x78, /* 0111100 */
0xd8, /* 1101100 */
@@ -2682,7 +2682,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 167 0xa7 '' */
+ /* 167 0xa7 '§' */
0x00, /* 0000000 */
0x70, /* 0111000 */
0xd8, /* 1101100 */
@@ -2698,7 +2698,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 168 0xa8 '' */
+ /* 168 0xa8 '¨' */
0x00, /* 0000000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -2714,7 +2714,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 169 0xa9 '' */
+ /* 169 0xa9 '©' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -2730,7 +2730,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 170 0xaa '' */
+ /* 170 0xaa 'ª' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -2746,7 +2746,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 171 0xab '' */
+ /* 171 0xab '«' */
0x60, /* 0110000 */
0xe0, /* 1110000 */
0x62, /* 0110001 */
@@ -2762,7 +2762,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x7c, /* 0111110 */
- /* 172 0xac '' */
+ /* 172 0xac '¬' */
0x60, /* 0110000 */
0xe0, /* 1110000 */
0x62, /* 0110001 */
@@ -2778,7 +2778,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x0c, /* 0000110 */
0x00, /* 0000000 */
- /* 173 0xad '' */
+ /* 173 0xad '­' */
0x00, /* 0000000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -2794,7 +2794,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 174 0xae '' */
+ /* 174 0xae '®' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -2810,7 +2810,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 175 0xaf '' */
+ /* 175 0xaf '¯' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -2826,7 +2826,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 176 0xb0 '' */
+ /* 176 0xb0 '°' */
0x88, /* 1000100 */
0x22, /* 0010001 */
0x88, /* 1000100 */
@@ -2842,7 +2842,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x88, /* 1000100 */
0x22, /* 0010001 */
- /* 177 0xb1 '' */
+ /* 177 0xb1 '±' */
0x54, /* 0101010 */
0xaa, /* 1010101 */
0x54, /* 0101010 */
@@ -2858,7 +2858,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x54, /* 0101010 */
0xaa, /* 1010101 */
- /* 178 0xb2 '' */
+ /* 178 0xb2 '²' */
0xee, /* 1110111 */
0xba, /* 1011101 */
0xee, /* 1110111 */
@@ -2874,7 +2874,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0xee, /* 1110111 */
0xba, /* 1011101 */
- /* 179 0xb3 '' */
+ /* 179 0xb3 '³' */
0x30, /* 0011000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -2890,7 +2890,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x30, /* 0011000 */
- /* 180 0xb4 '' */
+ /* 180 0xb4 '´' */
0x30, /* 0011000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -2906,7 +2906,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x30, /* 0011000 */
- /* 181 0xb5 '' */
+ /* 181 0xb5 'µ' */
0x30, /* 0011000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -2922,7 +2922,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x30, /* 0011000 */
- /* 182 0xb6 '' */
+ /* 182 0xb6 '¶' */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -2938,7 +2938,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x6c, /* 0110110 */
0x6c, /* 0110110 */
- /* 183 0xb7 '' */
+ /* 183 0xb7 '·' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -2954,7 +2954,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x6c, /* 0110110 */
0x6c, /* 0110110 */
- /* 184 0xb8 '' */
+ /* 184 0xb8 '¸' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -2970,7 +2970,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x30, /* 0011000 */
- /* 185 0xb9 '' */
+ /* 185 0xb9 '¹' */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -2986,7 +2986,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x6c, /* 0110110 */
0x6c, /* 0110110 */
- /* 186 0xba '' */
+ /* 186 0xba 'º' */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -3002,7 +3002,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x6c, /* 0110110 */
0x6c, /* 0110110 */
- /* 187 0xbb '' */
+ /* 187 0xbb '»' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3018,7 +3018,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x6c, /* 0110110 */
0x6c, /* 0110110 */
- /* 188 0xbc '' */
+ /* 188 0xbc '¼' */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -3034,7 +3034,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 189 0xbd '' */
+ /* 189 0xbd '½' */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -3050,7 +3050,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 190 0xbe '' */
+ /* 190 0xbe '¾' */
0x30, /* 0011000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -3066,7 +3066,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 191 0xbf '' */
+ /* 191 0xbf '¿' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3082,7 +3082,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x30, /* 0011000 */
- /* 192 0xc0 '' */
+ /* 192 0xc0 'À' */
0x30, /* 0011000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -3098,7 +3098,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 193 0xc1 '' */
+ /* 193 0xc1 'Á' */
0x30, /* 0011000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -3114,7 +3114,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 194 0xc2 '' */
+ /* 194 0xc2 'Â' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3130,7 +3130,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x30, /* 0011000 */
- /* 195 0xc3 '' */
+ /* 195 0xc3 'Ã' */
0x30, /* 0011000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -3146,7 +3146,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x30, /* 0011000 */
- /* 196 0xc4 '' */
+ /* 196 0xc4 'Ä' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3162,7 +3162,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 197 0xc5 '' */
+ /* 197 0xc5 'Å' */
0x30, /* 0011000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -3178,7 +3178,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x30, /* 0011000 */
- /* 198 0xc6 '' */
+ /* 198 0xc6 'Æ' */
0x30, /* 0011000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -3194,7 +3194,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x30, /* 0011000 */
- /* 199 0xc7 '' */
+ /* 199 0xc7 'Ç' */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -3210,7 +3210,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x6c, /* 0110110 */
0x6c, /* 0110110 */
- /* 200 0xc8 '' */
+ /* 200 0xc8 'È' */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -3226,7 +3226,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 201 0xc9 '' */
+ /* 201 0xc9 'É' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3242,7 +3242,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x6c, /* 0110110 */
0x6c, /* 0110110 */
- /* 202 0xca '' */
+ /* 202 0xca 'Ê' */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -3258,7 +3258,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 203 0xcb '' */
+ /* 203 0xcb 'Ë' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3274,7 +3274,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x6c, /* 0110110 */
0x6c, /* 0110110 */
- /* 204 0xcc '' */
+ /* 204 0xcc 'Ì' */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -3290,7 +3290,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x6c, /* 0110110 */
0x6c, /* 0110110 */
- /* 205 0xcd '' */
+ /* 205 0xcd 'Í' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3306,7 +3306,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 206 0xce '' */
+ /* 206 0xce 'Î' */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -3322,7 +3322,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x6c, /* 0110110 */
0x6c, /* 0110110 */
- /* 207 0xcf '' */
+ /* 207 0xcf 'Ï' */
0x30, /* 0011000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -3338,7 +3338,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 208 0xd0 '' */
+ /* 208 0xd0 'Ð' */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -3354,7 +3354,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 209 0xd1 '' */
+ /* 209 0xd1 'Ñ' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3370,7 +3370,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x30, /* 0011000 */
- /* 210 0xd2 '' */
+ /* 210 0xd2 'Ò' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3386,7 +3386,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x6c, /* 0110110 */
0x6c, /* 0110110 */
- /* 211 0xd3 '' */
+ /* 211 0xd3 'Ó' */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -3402,7 +3402,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 212 0xd4 '' */
+ /* 212 0xd4 'Ô' */
0x30, /* 0011000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -3418,7 +3418,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 213 0xd5 '' */
+ /* 213 0xd5 'Õ' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3434,7 +3434,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x30, /* 0011000 */
- /* 214 0xd6 '' */
+ /* 214 0xd6 'Ö' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3450,7 +3450,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x6c, /* 0110110 */
0x6c, /* 0110110 */
- /* 215 0xd7 '' */
+ /* 215 0xd7 '×' */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -3466,7 +3466,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x6c, /* 0110110 */
0x6c, /* 0110110 */
- /* 216 0xd8 '' */
+ /* 216 0xd8 'Ø' */
0x30, /* 0011000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -3482,7 +3482,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x30, /* 0011000 */
- /* 217 0xd9 '' */
+ /* 217 0xd9 'Ù' */
0x30, /* 0011000 */
0x30, /* 0011000 */
0x30, /* 0011000 */
@@ -3498,7 +3498,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 218 0xda '' */
+ /* 218 0xda 'Ú' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3514,7 +3514,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x30, /* 0011000 */
- /* 219 0xdb '' */
+ /* 219 0xdb 'Û' */
0xfe, /* 1111111 */
0xfe, /* 1111111 */
0xfe, /* 1111111 */
@@ -3530,7 +3530,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0xfe, /* 1111111 */
0xfe, /* 1111111 */
- /* 220 0xdc '' */
+ /* 220 0xdc 'Ü' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3546,7 +3546,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0xfe, /* 1111111 */
0xfe, /* 1111111 */
- /* 221 0xdd '' */
+ /* 221 0xdd 'Ý' */
0xe0, /* 1110000 */
0xe0, /* 1110000 */
0xe0, /* 1110000 */
@@ -3562,7 +3562,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0xe0, /* 1110000 */
0xe0, /* 1110000 */
- /* 222 0xde '' */
+ /* 222 0xde 'Þ' */
0x1e, /* 0001111 */
0x1e, /* 0001111 */
0x1e, /* 0001111 */
@@ -3578,7 +3578,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x1e, /* 0001111 */
0x1e, /* 0001111 */
- /* 223 0xdf '' */
+ /* 223 0xdf 'ß' */
0xfe, /* 1111111 */
0xfe, /* 1111111 */
0xfe, /* 1111111 */
@@ -3594,7 +3594,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 224 0xe0 '' */
+ /* 224 0xe0 'à' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3610,7 +3610,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 225 0xe1 '' */
+ /* 225 0xe1 'á' */
0x00, /* 0000000 */
0x78, /* 0111100 */
0xcc, /* 1100110 */
@@ -3626,7 +3626,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 226 0xe2 '' */
+ /* 226 0xe2 'â' */
0x00, /* 0000000 */
0xfc, /* 1111110 */
0xcc, /* 1100110 */
@@ -3642,7 +3642,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 227 0xe3 '' */
+ /* 227 0xe3 'ã' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0xfe, /* 1111111 */
@@ -3658,7 +3658,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 228 0xe4 '' */
+ /* 228 0xe4 'ä' */
0x00, /* 0000000 */
0xfc, /* 1111110 */
0xcc, /* 1100110 */
@@ -3674,7 +3674,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 229 0xe5 '' */
+ /* 229 0xe5 'å' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3690,7 +3690,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 230 0xe6 '' */
+ /* 230 0xe6 'æ' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3706,7 +3706,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0xc0, /* 1100000 */
0x80, /* 1000000 */
- /* 231 0xe7 '' */
+ /* 231 0xe7 'ç' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3722,7 +3722,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 232 0xe8 '' */
+ /* 232 0xe8 'è' */
0x00, /* 0000000 */
0xfc, /* 1111110 */
0x30, /* 0011000 */
@@ -3738,7 +3738,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 233 0xe9 '' */
+ /* 233 0xe9 'é' */
0x00, /* 0000000 */
0x38, /* 0011100 */
0x6c, /* 0110110 */
@@ -3754,7 +3754,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 234 0xea '' */
+ /* 234 0xea 'ê' */
0x00, /* 0000000 */
0x38, /* 0011100 */
0x6c, /* 0110110 */
@@ -3770,7 +3770,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 235 0xeb '' */
+ /* 235 0xeb 'ë' */
0x00, /* 0000000 */
0x3c, /* 0011110 */
0x60, /* 0110000 */
@@ -3786,7 +3786,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 236 0xec '' */
+ /* 236 0xec 'ì' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3802,7 +3802,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 237 0xed '' */
+ /* 237 0xed 'í' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x06, /* 0000011 */
@@ -3818,7 +3818,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 238 0xee '' */
+ /* 238 0xee 'î' */
0x00, /* 0000000 */
0x1c, /* 0001110 */
0x30, /* 0011000 */
@@ -3834,7 +3834,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 239 0xef '' */
+ /* 239 0xef 'ï' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x78, /* 0111100 */
@@ -3850,7 +3850,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 240 0xf0 '' */
+ /* 240 0xf0 'ð' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3866,7 +3866,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 241 0xf1 '' */
+ /* 241 0xf1 'ñ' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3882,7 +3882,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 242 0xf2 '' */
+ /* 242 0xf2 'ò' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x60, /* 0110000 */
@@ -3898,7 +3898,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 243 0xf3 '' */
+ /* 243 0xf3 'ó' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x18, /* 0001100 */
@@ -3914,7 +3914,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 244 0xf4 '' */
+ /* 244 0xf4 'ô' */
0x00, /* 0000000 */
0x1c, /* 0001110 */
0x36, /* 0011011 */
@@ -3930,7 +3930,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x30, /* 0011000 */
0x30, /* 0011000 */
- /* 245 0xf5 '' */
+ /* 245 0xf5 'õ' */
0x18, /* 0001100 */
0x18, /* 0001100 */
0x18, /* 0001100 */
@@ -3946,7 +3946,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 246 0xf6 '' */
+ /* 246 0xf6 'ö' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3962,7 +3962,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 247 0xf7 '' */
+ /* 247 0xf7 '÷' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -3978,7 +3978,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 248 0xf8 '' */
+ /* 248 0xf8 'ø' */
0x38, /* 0011100 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -3994,7 +3994,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 249 0xf9 '' */
+ /* 249 0xf9 'ù' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -4010,7 +4010,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 250 0xfa '' */
+ /* 250 0xfa 'ú' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -4026,7 +4026,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 251 0xfb '' */
+ /* 251 0xfb 'û' */
0x1e, /* 0001111 */
0x18, /* 0001100 */
0x18, /* 0001100 */
@@ -4042,7 +4042,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 252 0xfc '' */
+ /* 252 0xfc 'ü' */
0xd8, /* 1101100 */
0x6c, /* 0110110 */
0x6c, /* 0110110 */
@@ -4058,7 +4058,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 253 0xfd '' */
+ /* 253 0xfd 'ý' */
0x78, /* 0111100 */
0xcc, /* 1100110 */
0x18, /* 0001100 */
@@ -4074,7 +4074,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 254 0xfe '' */
+ /* 254 0xfe 'þ' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
@@ -4090,7 +4090,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
0x00, /* 0000000 */
0x00, /* 0000000 */
- /* 255 0xff '' */
+ /* 255 0xff 'ÿ' */
0x00, /* 0000000 */
0x00, /* 0000000 */
0x00, /* 0000000 */
diff --git a/lib/fonts/font_8x16.c b/lib/fonts/font_8x16.c
index c5c14fc427..e6d40d0de3 100644
--- a/lib/fonts/font_8x16.c
+++ b/lib/fonts/font_8x16.c
@@ -2316,7 +2316,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 128 0x80 '' */
+ /* 128 0x80 '€' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x3c, /* 00111100 */
@@ -2334,7 +2334,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 129 0x81 '' */
+ /* 129 0x81 '' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xcc, /* 11001100 */
@@ -2352,7 +2352,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 130 0x82 '' */
+ /* 130 0x82 '‚' */
0x00, /* 00000000 */
0x0c, /* 00001100 */
0x18, /* 00011000 */
@@ -2370,7 +2370,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 131 0x83 '' */
+ /* 131 0x83 'ƒ' */
0x00, /* 00000000 */
0x10, /* 00010000 */
0x38, /* 00111000 */
@@ -2388,7 +2388,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 132 0x84 '' */
+ /* 132 0x84 '„' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xcc, /* 11001100 */
@@ -2406,7 +2406,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 133 0x85 '' */
+ /* 133 0x85 '…' */
0x00, /* 00000000 */
0x60, /* 01100000 */
0x30, /* 00110000 */
@@ -2424,7 +2424,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 134 0x86 '' */
+ /* 134 0x86 '†' */
0x00, /* 00000000 */
0x38, /* 00111000 */
0x6c, /* 01101100 */
@@ -2442,7 +2442,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 135 0x87 '' */
+ /* 135 0x87 '‡' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -2460,7 +2460,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 136 0x88 '' */
+ /* 136 0x88 'ˆ' */
0x00, /* 00000000 */
0x10, /* 00010000 */
0x38, /* 00111000 */
@@ -2478,7 +2478,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 137 0x89 '' */
+ /* 137 0x89 '‰' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xc6, /* 11000110 */
@@ -2496,7 +2496,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 138 0x8a '' */
+ /* 138 0x8a 'Š' */
0x00, /* 00000000 */
0x60, /* 01100000 */
0x30, /* 00110000 */
@@ -2514,7 +2514,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 139 0x8b '' */
+ /* 139 0x8b '‹' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x66, /* 01100110 */
@@ -2532,7 +2532,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 140 0x8c '' */
+ /* 140 0x8c 'Œ' */
0x00, /* 00000000 */
0x18, /* 00011000 */
0x3c, /* 00111100 */
@@ -2550,7 +2550,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 141 0x8d '' */
+ /* 141 0x8d '' */
0x00, /* 00000000 */
0x60, /* 01100000 */
0x30, /* 00110000 */
@@ -2568,7 +2568,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 142 0x8e '' */
+ /* 142 0x8e 'Ž' */
0x00, /* 00000000 */
0xc6, /* 11000110 */
0x00, /* 00000000 */
@@ -2586,7 +2586,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 143 0x8f '' */
+ /* 143 0x8f '' */
0x38, /* 00111000 */
0x6c, /* 01101100 */
0x38, /* 00111000 */
@@ -2604,7 +2604,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 144 0x90 '' */
+ /* 144 0x90 '' */
0x0c, /* 00001100 */
0x18, /* 00011000 */
0x00, /* 00000000 */
@@ -2622,7 +2622,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 145 0x91 '' */
+ /* 145 0x91 '‘' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -2640,7 +2640,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 146 0x92 '' */
+ /* 146 0x92 '’' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x3e, /* 00111110 */
@@ -2658,7 +2658,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 147 0x93 '' */
+ /* 147 0x93 '“' */
0x00, /* 00000000 */
0x10, /* 00010000 */
0x38, /* 00111000 */
@@ -2676,7 +2676,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 148 0x94 '' */
+ /* 148 0x94 '”' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xc6, /* 11000110 */
@@ -2694,7 +2694,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 149 0x95 '' */
+ /* 149 0x95 '•' */
0x00, /* 00000000 */
0x60, /* 01100000 */
0x30, /* 00110000 */
@@ -2712,7 +2712,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 150 0x96 '' */
+ /* 150 0x96 '–' */
0x00, /* 00000000 */
0x30, /* 00110000 */
0x78, /* 01111000 */
@@ -2730,7 +2730,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 151 0x97 '' */
+ /* 151 0x97 '—' */
0x00, /* 00000000 */
0x60, /* 01100000 */
0x30, /* 00110000 */
@@ -2748,7 +2748,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 152 0x98 '' */
+ /* 152 0x98 '˜' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xc6, /* 11000110 */
@@ -2766,7 +2766,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x78, /* 01111000 */
0x00, /* 00000000 */
- /* 153 0x99 '' */
+ /* 153 0x99 '™' */
0x00, /* 00000000 */
0xc6, /* 11000110 */
0x00, /* 00000000 */
@@ -2784,7 +2784,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 154 0x9a '' */
+ /* 154 0x9a 'š' */
0x00, /* 00000000 */
0xc6, /* 11000110 */
0x00, /* 00000000 */
@@ -2802,7 +2802,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 155 0x9b '' */
+ /* 155 0x9b '›' */
0x00, /* 00000000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -2820,7 +2820,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 156 0x9c '' */
+ /* 156 0x9c 'œ' */
0x00, /* 00000000 */
0x38, /* 00111000 */
0x6c, /* 01101100 */
@@ -2838,7 +2838,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 157 0x9d '' */
+ /* 157 0x9d '' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x66, /* 01100110 */
@@ -2856,7 +2856,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 158 0x9e '' */
+ /* 158 0x9e 'ž' */
0x00, /* 00000000 */
0xf8, /* 11111000 */
0xcc, /* 11001100 */
@@ -2874,7 +2874,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 159 0x9f '' */
+ /* 159 0x9f 'Ÿ' */
0x00, /* 00000000 */
0x0e, /* 00001110 */
0x1b, /* 00011011 */
@@ -2892,7 +2892,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 160 0xa0 '' */
+ /* 160 0xa0 ' ' */
0x00, /* 00000000 */
0x18, /* 00011000 */
0x30, /* 00110000 */
@@ -2910,7 +2910,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 161 0xa1 '' */
+ /* 161 0xa1 '¡' */
0x00, /* 00000000 */
0x0c, /* 00001100 */
0x18, /* 00011000 */
@@ -2928,7 +2928,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 162 0xa2 '' */
+ /* 162 0xa2 '¢' */
0x00, /* 00000000 */
0x18, /* 00011000 */
0x30, /* 00110000 */
@@ -2946,7 +2946,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 163 0xa3 '' */
+ /* 163 0xa3 '£' */
0x00, /* 00000000 */
0x18, /* 00011000 */
0x30, /* 00110000 */
@@ -2964,7 +2964,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 164 0xa4 '' */
+ /* 164 0xa4 '¤' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x76, /* 01110110 */
@@ -2982,7 +2982,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 165 0xa5 '' */
+ /* 165 0xa5 '¥' */
0x76, /* 01110110 */
0xdc, /* 11011100 */
0x00, /* 00000000 */
@@ -3000,7 +3000,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 166 0xa6 '' */
+ /* 166 0xa6 '¦' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x3c, /* 00111100 */
@@ -3018,7 +3018,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 167 0xa7 '' */
+ /* 167 0xa7 '§' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x38, /* 00111000 */
@@ -3036,7 +3036,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 168 0xa8 '' */
+ /* 168 0xa8 '¨' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x30, /* 00110000 */
@@ -3054,7 +3054,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 169 0xa9 '' */
+ /* 169 0xa9 '©' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3072,7 +3072,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 170 0xaa '' */
+ /* 170 0xaa 'ª' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3090,7 +3090,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 171 0xab '' */
+ /* 171 0xab '«' */
0x00, /* 00000000 */
0x60, /* 01100000 */
0xe0, /* 11100000 */
@@ -3108,7 +3108,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 172 0xac '' */
+ /* 172 0xac '¬' */
0x00, /* 00000000 */
0x60, /* 01100000 */
0xe0, /* 11100000 */
@@ -3126,7 +3126,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 173 0xad '' */
+ /* 173 0xad '­' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x18, /* 00011000 */
@@ -3144,7 +3144,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 174 0xae '' */
+ /* 174 0xae '®' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3162,7 +3162,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 175 0xaf '' */
+ /* 175 0xaf '¯' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3180,7 +3180,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 176 0xb0 '' */
+ /* 176 0xb0 '°' */
0x11, /* 00010001 */
0x44, /* 01000100 */
0x11, /* 00010001 */
@@ -3198,7 +3198,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x11, /* 00010001 */
0x44, /* 01000100 */
- /* 177 0xb1 '' */
+ /* 177 0xb1 '±' */
0x55, /* 01010101 */
0xaa, /* 10101010 */
0x55, /* 01010101 */
@@ -3216,7 +3216,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x55, /* 01010101 */
0xaa, /* 10101010 */
- /* 178 0xb2 '' */
+ /* 178 0xb2 '²' */
0xdd, /* 11011101 */
0x77, /* 01110111 */
0xdd, /* 11011101 */
@@ -3234,7 +3234,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0xdd, /* 11011101 */
0x77, /* 01110111 */
- /* 179 0xb3 '' */
+ /* 179 0xb3 '³' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3252,7 +3252,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 180 0xb4 '' */
+ /* 180 0xb4 '´' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3270,7 +3270,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 181 0xb5 '' */
+ /* 181 0xb5 'µ' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3288,7 +3288,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 182 0xb6 '' */
+ /* 182 0xb6 '¶' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3306,7 +3306,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 183 0xb7 '' */
+ /* 183 0xb7 '·' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3324,7 +3324,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 184 0xb8 '' */
+ /* 184 0xb8 '¸' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3342,7 +3342,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 185 0xb9 '' */
+ /* 185 0xb9 '¹' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3360,7 +3360,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 186 0xba '' */
+ /* 186 0xba 'º' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3378,7 +3378,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 187 0xbb '' */
+ /* 187 0xbb '»' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3396,7 +3396,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 188 0xbc '' */
+ /* 188 0xbc '¼' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3414,7 +3414,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 189 0xbd '' */
+ /* 189 0xbd '½' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3432,7 +3432,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 190 0xbe '' */
+ /* 190 0xbe '¾' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3450,7 +3450,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 191 0xbf '' */
+ /* 191 0xbf '¿' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3468,7 +3468,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 192 0xc0 '' */
+ /* 192 0xc0 'À' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3486,7 +3486,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 193 0xc1 '' */
+ /* 193 0xc1 'Á' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3504,7 +3504,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 194 0xc2 '' */
+ /* 194 0xc2 'Â' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3522,7 +3522,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 195 0xc3 '' */
+ /* 195 0xc3 'Ã' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3540,7 +3540,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 196 0xc4 '' */
+ /* 196 0xc4 'Ä' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3558,7 +3558,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 197 0xc5 '' */
+ /* 197 0xc5 'Å' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3576,7 +3576,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 198 0xc6 '' */
+ /* 198 0xc6 'Æ' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3594,7 +3594,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 199 0xc7 '' */
+ /* 199 0xc7 'Ç' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3612,7 +3612,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 200 0xc8 '' */
+ /* 200 0xc8 'È' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3630,7 +3630,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 201 0xc9 '' */
+ /* 201 0xc9 'É' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3648,7 +3648,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 202 0xca '' */
+ /* 202 0xca 'Ê' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3666,7 +3666,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 203 0xcb '' */
+ /* 203 0xcb 'Ë' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3684,7 +3684,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 204 0xcc '' */
+ /* 204 0xcc 'Ì' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3702,7 +3702,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 205 0xcd '' */
+ /* 205 0xcd 'Í' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3720,7 +3720,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 206 0xce '' */
+ /* 206 0xce 'Î' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3738,7 +3738,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 207 0xcf '' */
+ /* 207 0xcf 'Ï' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3756,7 +3756,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 208 0xd0 '' */
+ /* 208 0xd0 'Ð' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3774,7 +3774,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 209 0xd1 '' */
+ /* 209 0xd1 'Ñ' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3792,7 +3792,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 210 0xd2 '' */
+ /* 210 0xd2 'Ò' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3810,7 +3810,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 211 0xd3 '' */
+ /* 211 0xd3 'Ó' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3828,7 +3828,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 212 0xd4 '' */
+ /* 212 0xd4 'Ô' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3846,7 +3846,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 213 0xd5 '' */
+ /* 213 0xd5 'Õ' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3864,7 +3864,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 214 0xd6 '' */
+ /* 214 0xd6 'Ö' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3882,7 +3882,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 215 0xd7 '' */
+ /* 215 0xd7 '×' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3900,7 +3900,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 216 0xd8 '' */
+ /* 216 0xd8 'Ø' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3918,7 +3918,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 217 0xd9 '' */
+ /* 217 0xd9 'Ù' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3936,7 +3936,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 218 0xda '' */
+ /* 218 0xda 'Ú' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3954,7 +3954,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 219 0xdb '' */
+ /* 219 0xdb 'Û' */
0xff, /* 11111111 */
0xff, /* 11111111 */
0xff, /* 11111111 */
@@ -3972,7 +3972,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0xff, /* 11111111 */
0xff, /* 11111111 */
- /* 220 0xdc '' */
+ /* 220 0xdc 'Ü' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3990,7 +3990,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0xff, /* 11111111 */
0xff, /* 11111111 */
- /* 221 0xdd '' */
+ /* 221 0xdd 'Ý' */
0xf0, /* 11110000 */
0xf0, /* 11110000 */
0xf0, /* 11110000 */
@@ -4008,7 +4008,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0xf0, /* 11110000 */
0xf0, /* 11110000 */
- /* 222 0xde '' */
+ /* 222 0xde 'Þ' */
0x0f, /* 00001111 */
0x0f, /* 00001111 */
0x0f, /* 00001111 */
@@ -4026,7 +4026,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x0f, /* 00001111 */
0x0f, /* 00001111 */
- /* 223 0xdf '' */
+ /* 223 0xdf 'ß' */
0xff, /* 11111111 */
0xff, /* 11111111 */
0xff, /* 11111111 */
@@ -4044,7 +4044,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 224 0xe0 '' */
+ /* 224 0xe0 'à' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4062,7 +4062,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 225 0xe1 '' */
+ /* 225 0xe1 'á' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x78, /* 01111000 */
@@ -4080,7 +4080,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 226 0xe2 '' */
+ /* 226 0xe2 'â' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xfe, /* 11111110 */
@@ -4098,7 +4098,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 227 0xe3 '' */
+ /* 227 0xe3 'ã' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4116,7 +4116,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 228 0xe4 '' */
+ /* 228 0xe4 'ä' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xfe, /* 11111110 */
@@ -4134,7 +4134,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 229 0xe5 '' */
+ /* 229 0xe5 'å' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4152,7 +4152,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 230 0xe6 '' */
+ /* 230 0xe6 'æ' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4170,7 +4170,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0xc0, /* 11000000 */
0x00, /* 00000000 */
- /* 231 0xe7 '' */
+ /* 231 0xe7 'ç' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4188,7 +4188,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 232 0xe8 '' */
+ /* 232 0xe8 'è' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x7e, /* 01111110 */
@@ -4206,7 +4206,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 233 0xe9 '' */
+ /* 233 0xe9 'é' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x38, /* 00111000 */
@@ -4224,7 +4224,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 234 0xea '' */
+ /* 234 0xea 'ê' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x38, /* 00111000 */
@@ -4242,7 +4242,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 235 0xeb '' */
+ /* 235 0xeb 'ë' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x1e, /* 00011110 */
@@ -4260,7 +4260,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 236 0xec '' */
+ /* 236 0xec 'ì' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4278,7 +4278,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 237 0xed '' */
+ /* 237 0xed 'í' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4296,7 +4296,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 238 0xee '' */
+ /* 238 0xee 'î' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x1c, /* 00011100 */
@@ -4314,7 +4314,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 239 0xef '' */
+ /* 239 0xef 'ï' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4332,7 +4332,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 240 0xf0 '' */
+ /* 240 0xf0 'ð' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4350,7 +4350,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 241 0xf1 '' */
+ /* 241 0xf1 'ñ' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4368,7 +4368,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 242 0xf2 '' */
+ /* 242 0xf2 'ò' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4386,7 +4386,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 243 0xf3 '' */
+ /* 243 0xf3 'ó' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4404,7 +4404,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 244 0xf4 '' */
+ /* 244 0xf4 'ô' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x0e, /* 00001110 */
@@ -4422,7 +4422,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 245 0xf5 '' */
+ /* 245 0xf5 'õ' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -4440,7 +4440,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 246 0xf6 '' */
+ /* 246 0xf6 'ö' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4458,7 +4458,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 247 0xf7 '' */
+ /* 247 0xf7 '÷' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4476,7 +4476,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 248 0xf8 '' */
+ /* 248 0xf8 'ø' */
0x00, /* 00000000 */
0x38, /* 00111000 */
0x6c, /* 01101100 */
@@ -4494,7 +4494,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 249 0xf9 '' */
+ /* 249 0xf9 'ù' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4512,7 +4512,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 250 0xfa '' */
+ /* 250 0xfa 'ú' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4530,7 +4530,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 251 0xfb '' */
+ /* 251 0xfb 'û' */
0x00, /* 00000000 */
0x0f, /* 00001111 */
0x0c, /* 00001100 */
@@ -4548,7 +4548,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 252 0xfc '' */
+ /* 252 0xfc 'ü' */
0x00, /* 00000000 */
0x6c, /* 01101100 */
0x36, /* 00110110 */
@@ -4566,7 +4566,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 253 0xfd '' */
+ /* 253 0xfd 'ý' */
0x00, /* 00000000 */
0x3c, /* 00111100 */
0x66, /* 01100110 */
@@ -4584,7 +4584,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 254 0xfe '' */
+ /* 254 0xfe 'þ' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4602,7 +4602,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 255 0xff '' */
+ /* 255 0xff 'ÿ' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
diff --git a/lib/fonts/font_8x8.c b/lib/fonts/font_8x8.c
index 24216a68a2..27d53de578 100644
--- a/lib/fonts/font_8x8.c
+++ b/lib/fonts/font_8x8.c
@@ -1291,7 +1291,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xfe, /* 11111110 */
0x00, /* 00000000 */
- /* 128 0x80 '' */
+ /* 128 0x80 '€' */
0x7c, /* 01111100 */
0xc6, /* 11000110 */
0xc0, /* 11000000 */
@@ -1301,7 +1301,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x0c, /* 00001100 */
0x78, /* 01111000 */
- /* 129 0x81 '' */
+ /* 129 0x81 '' */
0xcc, /* 11001100 */
0x00, /* 00000000 */
0xcc, /* 11001100 */
@@ -1311,7 +1311,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x76, /* 01110110 */
0x00, /* 00000000 */
- /* 130 0x82 '' */
+ /* 130 0x82 '‚' */
0x0c, /* 00001100 */
0x18, /* 00011000 */
0x7c, /* 01111100 */
@@ -1321,7 +1321,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x7c, /* 01111100 */
0x00, /* 00000000 */
- /* 131 0x83 '' */
+ /* 131 0x83 'ƒ' */
0x7c, /* 01111100 */
0x82, /* 10000010 */
0x78, /* 01111000 */
@@ -1331,7 +1331,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x76, /* 01110110 */
0x00, /* 00000000 */
- /* 132 0x84 '' */
+ /* 132 0x84 '„' */
0xc6, /* 11000110 */
0x00, /* 00000000 */
0x78, /* 01111000 */
@@ -1341,7 +1341,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x76, /* 01110110 */
0x00, /* 00000000 */
- /* 133 0x85 '' */
+ /* 133 0x85 '…' */
0x30, /* 00110000 */
0x18, /* 00011000 */
0x78, /* 01111000 */
@@ -1351,7 +1351,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x76, /* 01110110 */
0x00, /* 00000000 */
- /* 134 0x86 '' */
+ /* 134 0x86 '†' */
0x30, /* 00110000 */
0x30, /* 00110000 */
0x78, /* 01111000 */
@@ -1361,7 +1361,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x76, /* 01110110 */
0x00, /* 00000000 */
- /* 135 0x87 '' */
+ /* 135 0x87 '‡' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x7e, /* 01111110 */
@@ -1371,7 +1371,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x0c, /* 00001100 */
0x38, /* 00111000 */
- /* 136 0x88 '' */
+ /* 136 0x88 'ˆ' */
0x7c, /* 01111100 */
0x82, /* 10000010 */
0x7c, /* 01111100 */
@@ -1381,7 +1381,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x7c, /* 01111100 */
0x00, /* 00000000 */
- /* 137 0x89 '' */
+ /* 137 0x89 '‰' */
0xc6, /* 11000110 */
0x00, /* 00000000 */
0x7c, /* 01111100 */
@@ -1391,7 +1391,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x7c, /* 01111100 */
0x00, /* 00000000 */
- /* 138 0x8a '' */
+ /* 138 0x8a 'Š' */
0x30, /* 00110000 */
0x18, /* 00011000 */
0x7c, /* 01111100 */
@@ -1401,7 +1401,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x7c, /* 01111100 */
0x00, /* 00000000 */
- /* 139 0x8b '' */
+ /* 139 0x8b '‹' */
0x66, /* 01100110 */
0x00, /* 00000000 */
0x38, /* 00111000 */
@@ -1411,7 +1411,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x3c, /* 00111100 */
0x00, /* 00000000 */
- /* 140 0x8c '' */
+ /* 140 0x8c 'Œ' */
0x7c, /* 01111100 */
0x82, /* 10000010 */
0x38, /* 00111000 */
@@ -1421,7 +1421,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x3c, /* 00111100 */
0x00, /* 00000000 */
- /* 141 0x8d '' */
+ /* 141 0x8d '' */
0x30, /* 00110000 */
0x18, /* 00011000 */
0x00, /* 00000000 */
@@ -1431,7 +1431,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x3c, /* 00111100 */
0x00, /* 00000000 */
- /* 142 0x8e '' */
+ /* 142 0x8e 'Ž' */
0xc6, /* 11000110 */
0x38, /* 00111000 */
0x6c, /* 01101100 */
@@ -1441,7 +1441,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xc6, /* 11000110 */
0x00, /* 00000000 */
- /* 143 0x8f '' */
+ /* 143 0x8f '' */
0x38, /* 00111000 */
0x6c, /* 01101100 */
0x7c, /* 01111100 */
@@ -1451,7 +1451,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xc6, /* 11000110 */
0x00, /* 00000000 */
- /* 144 0x90 '' */
+ /* 144 0x90 '' */
0x18, /* 00011000 */
0x30, /* 00110000 */
0xfe, /* 11111110 */
@@ -1461,7 +1461,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xfe, /* 11111110 */
0x00, /* 00000000 */
- /* 145 0x91 '' */
+ /* 145 0x91 '‘' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x7e, /* 01111110 */
@@ -1471,7 +1471,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x7e, /* 01111110 */
0x00, /* 00000000 */
- /* 146 0x92 '' */
+ /* 146 0x92 '’' */
0x3e, /* 00111110 */
0x6c, /* 01101100 */
0xcc, /* 11001100 */
@@ -1481,7 +1481,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xce, /* 11001110 */
0x00, /* 00000000 */
- /* 147 0x93 '' */
+ /* 147 0x93 '“' */
0x7c, /* 01111100 */
0x82, /* 10000010 */
0x7c, /* 01111100 */
@@ -1491,7 +1491,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x7c, /* 01111100 */
0x00, /* 00000000 */
- /* 148 0x94 '' */
+ /* 148 0x94 '”' */
0xc6, /* 11000110 */
0x00, /* 00000000 */
0x7c, /* 01111100 */
@@ -1501,7 +1501,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x7c, /* 01111100 */
0x00, /* 00000000 */
- /* 149 0x95 '' */
+ /* 149 0x95 '•' */
0x30, /* 00110000 */
0x18, /* 00011000 */
0x7c, /* 01111100 */
@@ -1511,7 +1511,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x7c, /* 01111100 */
0x00, /* 00000000 */
- /* 150 0x96 '' */
+ /* 150 0x96 '–' */
0x78, /* 01111000 */
0x84, /* 10000100 */
0x00, /* 00000000 */
@@ -1521,7 +1521,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x76, /* 01110110 */
0x00, /* 00000000 */
- /* 151 0x97 '' */
+ /* 151 0x97 '—' */
0x60, /* 01100000 */
0x30, /* 00110000 */
0xcc, /* 11001100 */
@@ -1531,7 +1531,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x76, /* 01110110 */
0x00, /* 00000000 */
- /* 152 0x98 '' */
+ /* 152 0x98 '˜' */
0xc6, /* 11000110 */
0x00, /* 00000000 */
0xc6, /* 11000110 */
@@ -1541,7 +1541,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x06, /* 00000110 */
0xfc, /* 11111100 */
- /* 153 0x99 '' */
+ /* 153 0x99 '™' */
0xc6, /* 11000110 */
0x38, /* 00111000 */
0x6c, /* 01101100 */
@@ -1551,7 +1551,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x38, /* 00111000 */
0x00, /* 00000000 */
- /* 154 0x9a '' */
+ /* 154 0x9a 'š' */
0xc6, /* 11000110 */
0x00, /* 00000000 */
0xc6, /* 11000110 */
@@ -1561,7 +1561,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x7c, /* 01111100 */
0x00, /* 00000000 */
- /* 155 0x9b '' */
+ /* 155 0x9b '›' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x7e, /* 01111110 */
@@ -1571,7 +1571,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 156 0x9c '' */
+ /* 156 0x9c 'œ' */
0x38, /* 00111000 */
0x6c, /* 01101100 */
0x64, /* 01100100 */
@@ -1581,7 +1581,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xfc, /* 11111100 */
0x00, /* 00000000 */
- /* 157 0x9d '' */
+ /* 157 0x9d '' */
0x66, /* 01100110 */
0x66, /* 01100110 */
0x3c, /* 00111100 */
@@ -1591,7 +1591,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 158 0x9e '' */
+ /* 158 0x9e 'ž' */
0xf8, /* 11111000 */
0xcc, /* 11001100 */
0xcc, /* 11001100 */
@@ -1601,7 +1601,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xc6, /* 11000110 */
0xc7, /* 11000111 */
- /* 159 0x9f '' */
+ /* 159 0x9f 'Ÿ' */
0x0e, /* 00001110 */
0x1b, /* 00011011 */
0x18, /* 00011000 */
@@ -1611,7 +1611,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x70, /* 01110000 */
0x00, /* 00000000 */
- /* 160 0xa0 '' */
+ /* 160 0xa0 ' ' */
0x18, /* 00011000 */
0x30, /* 00110000 */
0x78, /* 01111000 */
@@ -1621,7 +1621,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x76, /* 01110110 */
0x00, /* 00000000 */
- /* 161 0xa1 '' */
+ /* 161 0xa1 '¡' */
0x0c, /* 00001100 */
0x18, /* 00011000 */
0x00, /* 00000000 */
@@ -1631,7 +1631,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x3c, /* 00111100 */
0x00, /* 00000000 */
- /* 162 0xa2 '' */
+ /* 162 0xa2 '¢' */
0x0c, /* 00001100 */
0x18, /* 00011000 */
0x7c, /* 01111100 */
@@ -1641,7 +1641,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x7c, /* 01111100 */
0x00, /* 00000000 */
- /* 163 0xa3 '' */
+ /* 163 0xa3 '£' */
0x18, /* 00011000 */
0x30, /* 00110000 */
0xcc, /* 11001100 */
@@ -1651,7 +1651,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x76, /* 01110110 */
0x00, /* 00000000 */
- /* 164 0xa4 '' */
+ /* 164 0xa4 '¤' */
0x76, /* 01110110 */
0xdc, /* 11011100 */
0x00, /* 00000000 */
@@ -1661,7 +1661,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x66, /* 01100110 */
0x00, /* 00000000 */
- /* 165 0xa5 '' */
+ /* 165 0xa5 '¥' */
0x76, /* 01110110 */
0xdc, /* 11011100 */
0x00, /* 00000000 */
@@ -1671,7 +1671,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xce, /* 11001110 */
0x00, /* 00000000 */
- /* 166 0xa6 '' */
+ /* 166 0xa6 '¦' */
0x3c, /* 00111100 */
0x6c, /* 01101100 */
0x6c, /* 01101100 */
@@ -1681,7 +1681,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 167 0xa7 '' */
+ /* 167 0xa7 '§' */
0x38, /* 00111000 */
0x6c, /* 01101100 */
0x6c, /* 01101100 */
@@ -1691,7 +1691,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 168 0xa8 '' */
+ /* 168 0xa8 '¨' */
0x18, /* 00011000 */
0x00, /* 00000000 */
0x18, /* 00011000 */
@@ -1701,7 +1701,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x3e, /* 00111110 */
0x00, /* 00000000 */
- /* 169 0xa9 '' */
+ /* 169 0xa9 '©' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -1711,7 +1711,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 170 0xaa '' */
+ /* 170 0xaa 'ª' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -1721,7 +1721,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 171 0xab '' */
+ /* 171 0xab '«' */
0x63, /* 01100011 */
0xe6, /* 11100110 */
0x6c, /* 01101100 */
@@ -1731,7 +1731,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xcc, /* 11001100 */
0x0f, /* 00001111 */
- /* 172 0xac '' */
+ /* 172 0xac '¬' */
0x63, /* 01100011 */
0xe6, /* 11100110 */
0x6c, /* 01101100 */
@@ -1741,7 +1741,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xdf, /* 11011111 */
0x06, /* 00000110 */
- /* 173 0xad '' */
+ /* 173 0xad '­' */
0x18, /* 00011000 */
0x00, /* 00000000 */
0x18, /* 00011000 */
@@ -1751,7 +1751,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x00, /* 00000000 */
- /* 174 0xae '' */
+ /* 174 0xae '®' */
0x00, /* 00000000 */
0x33, /* 00110011 */
0x66, /* 01100110 */
@@ -1761,7 +1761,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 175 0xaf '' */
+ /* 175 0xaf '¯' */
0x00, /* 00000000 */
0xcc, /* 11001100 */
0x66, /* 01100110 */
@@ -1771,7 +1771,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 176 0xb0 '' */
+ /* 176 0xb0 '°' */
0x22, /* 00100010 */
0x88, /* 10001000 */
0x22, /* 00100010 */
@@ -1781,7 +1781,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x22, /* 00100010 */
0x88, /* 10001000 */
- /* 177 0xb1 '' */
+ /* 177 0xb1 '±' */
0x55, /* 01010101 */
0xaa, /* 10101010 */
0x55, /* 01010101 */
@@ -1791,7 +1791,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x55, /* 01010101 */
0xaa, /* 10101010 */
- /* 178 0xb2 '' */
+ /* 178 0xb2 '²' */
0x77, /* 01110111 */
0xdd, /* 11011101 */
0x77, /* 01110111 */
@@ -1801,7 +1801,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x77, /* 01110111 */
0xdd, /* 11011101 */
- /* 179 0xb3 '' */
+ /* 179 0xb3 '³' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -1811,7 +1811,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 180 0xb4 '' */
+ /* 180 0xb4 '´' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -1821,7 +1821,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 181 0xb5 '' */
+ /* 181 0xb5 'µ' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0xf8, /* 11111000 */
@@ -1831,7 +1831,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 182 0xb6 '' */
+ /* 182 0xb6 '¶' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -1841,7 +1841,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 183 0xb7 '' */
+ /* 183 0xb7 '·' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -1851,7 +1851,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 184 0xb8 '' */
+ /* 184 0xb8 '¸' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xf8, /* 11111000 */
@@ -1861,7 +1861,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 185 0xb9 '' */
+ /* 185 0xb9 '¹' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0xf6, /* 11110110 */
@@ -1871,7 +1871,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 186 0xba '' */
+ /* 186 0xba 'º' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -1881,7 +1881,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 187 0xbb '' */
+ /* 187 0xbb '»' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xfe, /* 11111110 */
@@ -1891,7 +1891,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 188 0xbc '' */
+ /* 188 0xbc '¼' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0xf6, /* 11110110 */
@@ -1901,7 +1901,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 189 0xbd '' */
+ /* 189 0xbd '½' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -1911,7 +1911,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 190 0xbe '' */
+ /* 190 0xbe '¾' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0xf8, /* 11111000 */
@@ -1921,7 +1921,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 191 0xbf '' */
+ /* 191 0xbf '¿' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -1931,7 +1931,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 192 0xc0 '' */
+ /* 192 0xc0 'À' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -1941,7 +1941,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 193 0xc1 '' */
+ /* 193 0xc1 'Á' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -1951,7 +1951,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 194 0xc2 '' */
+ /* 194 0xc2 'Â' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -1961,7 +1961,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 195 0xc3 '' */
+ /* 195 0xc3 'Ã' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -1971,7 +1971,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 196 0xc4 '' */
+ /* 196 0xc4 'Ä' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -1981,7 +1981,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 197 0xc5 '' */
+ /* 197 0xc5 'Å' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -1991,7 +1991,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 198 0xc6 '' */
+ /* 198 0xc6 'Æ' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x1f, /* 00011111 */
@@ -2001,7 +2001,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 199 0xc7 '' */
+ /* 199 0xc7 'Ç' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -2011,7 +2011,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 200 0xc8 '' */
+ /* 200 0xc8 'È' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x37, /* 00110111 */
@@ -2021,7 +2021,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 201 0xc9 '' */
+ /* 201 0xc9 'É' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x3f, /* 00111111 */
@@ -2031,7 +2031,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 202 0xca '' */
+ /* 202 0xca 'Ê' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0xf7, /* 11110111 */
@@ -2041,7 +2041,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 203 0xcb '' */
+ /* 203 0xcb 'Ë' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xff, /* 11111111 */
@@ -2051,7 +2051,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 204 0xcc '' */
+ /* 204 0xcc 'Ì' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x37, /* 00110111 */
@@ -2061,7 +2061,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 205 0xcd '' */
+ /* 205 0xcd 'Í' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xff, /* 11111111 */
@@ -2071,7 +2071,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 206 0xce '' */
+ /* 206 0xce 'Î' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0xf7, /* 11110111 */
@@ -2081,7 +2081,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 207 0xcf '' */
+ /* 207 0xcf 'Ï' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0xff, /* 11111111 */
@@ -2091,7 +2091,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 208 0xd0 '' */
+ /* 208 0xd0 'Ð' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -2101,7 +2101,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 209 0xd1 '' */
+ /* 209 0xd1 'Ñ' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xff, /* 11111111 */
@@ -2111,7 +2111,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 210 0xd2 '' */
+ /* 210 0xd2 'Ò' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -2121,7 +2121,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 211 0xd3 '' */
+ /* 211 0xd3 'Ó' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -2131,7 +2131,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 212 0xd4 '' */
+ /* 212 0xd4 'Ô' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x1f, /* 00011111 */
@@ -2141,7 +2141,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 213 0xd5 '' */
+ /* 213 0xd5 'Õ' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x1f, /* 00011111 */
@@ -2151,7 +2151,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 214 0xd6 '' */
+ /* 214 0xd6 'Ö' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -2161,7 +2161,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 215 0xd7 '' */
+ /* 215 0xd7 '×' */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -2171,7 +2171,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 216 0xd8 '' */
+ /* 216 0xd8 'Ø' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0xff, /* 11111111 */
@@ -2181,7 +2181,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 217 0xd9 '' */
+ /* 217 0xd9 'Ù' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -2191,7 +2191,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 218 0xda '' */
+ /* 218 0xda 'Ú' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -2201,7 +2201,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 219 0xdb '' */
+ /* 219 0xdb 'Û' */
0xff, /* 11111111 */
0xff, /* 11111111 */
0xff, /* 11111111 */
@@ -2211,7 +2211,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xff, /* 11111111 */
0xff, /* 11111111 */
- /* 220 0xdc '' */
+ /* 220 0xdc 'Ü' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -2221,7 +2221,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xff, /* 11111111 */
0xff, /* 11111111 */
- /* 221 0xdd '' */
+ /* 221 0xdd 'Ý' */
0xf0, /* 11110000 */
0xf0, /* 11110000 */
0xf0, /* 11110000 */
@@ -2231,7 +2231,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xf0, /* 11110000 */
0xf0, /* 11110000 */
- /* 222 0xde '' */
+ /* 222 0xde 'Þ' */
0x0f, /* 00001111 */
0x0f, /* 00001111 */
0x0f, /* 00001111 */
@@ -2241,7 +2241,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x0f, /* 00001111 */
0x0f, /* 00001111 */
- /* 223 0xdf '' */
+ /* 223 0xdf 'ß' */
0xff, /* 11111111 */
0xff, /* 11111111 */
0xff, /* 11111111 */
@@ -2251,7 +2251,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 224 0xe0 '' */
+ /* 224 0xe0 'à' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x76, /* 01110110 */
@@ -2261,7 +2261,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x76, /* 01110110 */
0x00, /* 00000000 */
- /* 225 0xe1 '' */
+ /* 225 0xe1 'á' */
0x78, /* 01111000 */
0xcc, /* 11001100 */
0xcc, /* 11001100 */
@@ -2271,7 +2271,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xcc, /* 11001100 */
0x00, /* 00000000 */
- /* 226 0xe2 '' */
+ /* 226 0xe2 'â' */
0xfe, /* 11111110 */
0xc6, /* 11000110 */
0xc0, /* 11000000 */
@@ -2281,7 +2281,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xc0, /* 11000000 */
0x00, /* 00000000 */
- /* 227 0xe3 '' */
+ /* 227 0xe3 'ã' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xfe, /* 11111110 */
@@ -2291,7 +2291,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x6c, /* 01101100 */
0x00, /* 00000000 */
- /* 228 0xe4 '' */
+ /* 228 0xe4 'ä' */
0xfe, /* 11111110 */
0xc6, /* 11000110 */
0x60, /* 01100000 */
@@ -2301,7 +2301,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xfe, /* 11111110 */
0x00, /* 00000000 */
- /* 229 0xe5 '' */
+ /* 229 0xe5 'å' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x7e, /* 01111110 */
@@ -2311,7 +2311,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x70, /* 01110000 */
0x00, /* 00000000 */
- /* 230 0xe6 '' */
+ /* 230 0xe6 'æ' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x66, /* 01100110 */
@@ -2321,7 +2321,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x7c, /* 01111100 */
0xc0, /* 11000000 */
- /* 231 0xe7 '' */
+ /* 231 0xe7 'ç' */
0x00, /* 00000000 */
0x76, /* 01110110 */
0xdc, /* 11011100 */
@@ -2331,7 +2331,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x00, /* 00000000 */
- /* 232 0xe8 '' */
+ /* 232 0xe8 'è' */
0x7e, /* 01111110 */
0x18, /* 00011000 */
0x3c, /* 00111100 */
@@ -2341,7 +2341,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x7e, /* 01111110 */
- /* 233 0xe9 '' */
+ /* 233 0xe9 'é' */
0x38, /* 00111000 */
0x6c, /* 01101100 */
0xc6, /* 11000110 */
@@ -2351,7 +2351,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x38, /* 00111000 */
0x00, /* 00000000 */
- /* 234 0xea '' */
+ /* 234 0xea 'ê' */
0x38, /* 00111000 */
0x6c, /* 01101100 */
0xc6, /* 11000110 */
@@ -2361,7 +2361,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xee, /* 11101110 */
0x00, /* 00000000 */
- /* 235 0xeb '' */
+ /* 235 0xeb 'ë' */
0x0e, /* 00001110 */
0x18, /* 00011000 */
0x0c, /* 00001100 */
@@ -2371,7 +2371,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x3c, /* 00111100 */
0x00, /* 00000000 */
- /* 236 0xec '' */
+ /* 236 0xec 'ì' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x7e, /* 01111110 */
@@ -2381,7 +2381,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 237 0xed '' */
+ /* 237 0xed 'í' */
0x06, /* 00000110 */
0x0c, /* 00001100 */
0x7e, /* 01111110 */
@@ -2391,7 +2391,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x60, /* 01100000 */
0xc0, /* 11000000 */
- /* 238 0xee '' */
+ /* 238 0xee 'î' */
0x1e, /* 00011110 */
0x30, /* 00110000 */
0x60, /* 01100000 */
@@ -2401,7 +2401,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x1e, /* 00011110 */
0x00, /* 00000000 */
- /* 239 0xef '' */
+ /* 239 0xef 'ï' */
0x00, /* 00000000 */
0x7c, /* 01111100 */
0xc6, /* 11000110 */
@@ -2411,7 +2411,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xc6, /* 11000110 */
0x00, /* 00000000 */
- /* 240 0xf0 '' */
+ /* 240 0xf0 'ð' */
0x00, /* 00000000 */
0xfe, /* 11111110 */
0x00, /* 00000000 */
@@ -2421,7 +2421,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 241 0xf1 '' */
+ /* 241 0xf1 'ñ' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x7e, /* 01111110 */
@@ -2431,7 +2431,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x7e, /* 01111110 */
0x00, /* 00000000 */
- /* 242 0xf2 '' */
+ /* 242 0xf2 'ò' */
0x30, /* 00110000 */
0x18, /* 00011000 */
0x0c, /* 00001100 */
@@ -2441,7 +2441,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x7e, /* 01111110 */
0x00, /* 00000000 */
- /* 243 0xf3 '' */
+ /* 243 0xf3 'ó' */
0x0c, /* 00001100 */
0x18, /* 00011000 */
0x30, /* 00110000 */
@@ -2451,7 +2451,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x7e, /* 01111110 */
0x00, /* 00000000 */
- /* 244 0xf4 '' */
+ /* 244 0xf4 'ô' */
0x0e, /* 00001110 */
0x1b, /* 00011011 */
0x1b, /* 00011011 */
@@ -2461,7 +2461,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 245 0xf5 '' */
+ /* 245 0xf5 'õ' */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -2471,7 +2471,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0xd8, /* 11011000 */
0x70, /* 01110000 */
- /* 246 0xf6 '' */
+ /* 246 0xf6 'ö' */
0x00, /* 00000000 */
0x18, /* 00011000 */
0x00, /* 00000000 */
@@ -2481,7 +2481,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 247 0xf7 '' */
+ /* 247 0xf7 '÷' */
0x00, /* 00000000 */
0x76, /* 01110110 */
0xdc, /* 11011100 */
@@ -2491,7 +2491,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 248 0xf8 '' */
+ /* 248 0xf8 'ø' */
0x38, /* 00111000 */
0x6c, /* 01101100 */
0x6c, /* 01101100 */
@@ -2501,7 +2501,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 249 0xf9 '' */
+ /* 249 0xf9 'ù' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -2511,7 +2511,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 250 0xfa '' */
+ /* 250 0xfa 'ú' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -2521,7 +2521,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 251 0xfb '' */
+ /* 251 0xfb 'û' */
0x0f, /* 00001111 */
0x0c, /* 00001100 */
0x0c, /* 00001100 */
@@ -2531,7 +2531,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x3c, /* 00111100 */
0x1c, /* 00011100 */
- /* 252 0xfc '' */
+ /* 252 0xfc 'ü' */
0x6c, /* 01101100 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -2541,7 +2541,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 253 0xfd '' */
+ /* 253 0xfd 'ý' */
0x78, /* 01111000 */
0x0c, /* 00001100 */
0x18, /* 00011000 */
@@ -2551,7 +2551,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 254 0xfe '' */
+ /* 254 0xfe 'þ' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x3c, /* 00111100 */
@@ -2561,7 +2561,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 255 0xff '' */
+ /* 255 0xff 'ÿ' */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
diff --git a/lib/gui/lodepng.c b/lib/gui/lodepng.c
index 78a34db473..82fa90ab23 100644
--- a/lib/gui/lodepng.c
+++ b/lib/gui/lodepng.c
@@ -822,7 +822,7 @@ unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequen
if(!error)
{
- /*calculate the lenghts of each symbol, as the amount of times a coin of each symbol is used*/
+ /*calculate the lengths of each symbol, as the amount of times a coin of each symbol is used*/
for(i = 0; i < numpresent - 1; i++)
{
Coin* coin = &coins[i];
@@ -1678,7 +1678,7 @@ static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,
another huffman tree is used for the dist values ("d"). These two trees are
stored using their code lengths, and to compress even more these code lengths
are also run-length encoded and huffman compressed. This gives a huffman tree
- of code lengths "cl". The code lenghts used to describe this third tree are
+ of code lengths "cl". The code lengths used to describe this third tree are
the code length code lengths ("clcl").
*/
@@ -1690,7 +1690,7 @@ static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,
uivector frequencies_ll; /*frequency of lit,len codes*/
uivector frequencies_d; /*frequency of dist codes*/
uivector frequencies_cl; /*frequency of code length codes*/
- uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/
+ uivector bitlen_lld; /*lit,len,dist code lengths (int bits), literally (without repeat codes).*/
uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/
/*bitlen_cl is the code length code lengths ("clcl"). The bit lengths of codes to represent tree_cl
(these are written as is in the file, it would be crazy to compress these using yet another huffman
@@ -1828,7 +1828,7 @@ static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,
if(!uivector_resize(&bitlen_cl, NUM_CODE_LENGTH_CODES)) ERROR_BREAK(83 /*alloc fail*/);
for(i = 0; i < NUM_CODE_LENGTH_CODES; i++)
{
- /*lenghts of code length tree is in the order as specified by deflate*/
+ /*lengths of code length tree is in the order as specified by deflate*/
bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]);
}
while(bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4)
@@ -1844,7 +1844,7 @@ static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,
After the BFINAL and BTYPE, the dynamic block consists out of the following:
- 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN
- (HCLEN+4)*3 bits code lengths of code length alphabet
- - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length
+ - HLIT + 257 code lengths of lit/length alphabet (encoded using the code length
alphabet, + possible repetition codes 16, 17, 18)
- HDIST + 1 code lengths of distance alphabet (encoded using the code length
alphabet, + possible repetition codes 16, 17, 18)
@@ -1865,10 +1865,10 @@ static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,
addBitsToStream(bp, out, HDIST, 5);
addBitsToStream(bp, out, HCLEN, 4);
- /*write the code lenghts of the code length alphabet*/
+ /*write the code lengths of the code length alphabet*/
for(i = 0; i < HCLEN + 4; i++) addBitsToStream(bp, out, bitlen_cl.data[i], 3);
- /*write the lenghts of the lit/len AND the dist alphabet*/
+ /*write the lengths of the lit/len AND the dist alphabet*/
for(i = 0; i < bitlen_lld_e.size; i++)
{
addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]),
@@ -5608,7 +5608,7 @@ const char* lodepng_error_text(unsigned code)
/*jumped past tree while generating huffman tree, this could be when the
tree will have more leaves than symbols after generating it out of the
- given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/
+ given lengths. They call this an oversubscribed dynamic bit lengths tree in zlib.*/
case 55: return "jumped past tree while generating huffman tree";
case 56: return "given output image colortype or bitdepth not supported for color conversion";
diff --git a/lib/libfile.c b/lib/libfile.c
index 3f3ec21fdb..02078dd43d 100644
--- a/lib/libfile.c
+++ b/lib/libfile.c
@@ -158,7 +158,9 @@ EXPORT_SYMBOL_GPL(read_file_line);
* bytes are read. The actual read size is returned in @size. -EFBIG is
* returned if the file is bigger than @max_size, but the buffer is read
* anyway up to @max_size in this case. Free the buffer with free() after
- * usage.
+ * usage. The allocated buffer is actually one byte bigger than the file
+ * and the extra byte is initialized to '\0' so that the returned buffer
+ * can safely be interpreted as a string.
*
* Return: 0 for success, or negative error code. -EFBIG is returned
* when the file has been bigger than max_size.
diff --git a/lib/ubsan.c b/lib/ubsan.c
index 89ca6e580b..41a5731dda 100644
--- a/lib/ubsan.c
+++ b/lib/ubsan.c
@@ -382,6 +382,26 @@ void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data,
if (suppress_report(&data->location))
return;
+ /* This handler would be called for code shifting a one into the
+ * sign bit like (1 << 31), which is all too common in barebox.
+ * It's technically UB, but it's so prevalent that it's highly
+ * unlikely to be treated by a compiler as anything else than the
+ * standard-compliant (1U << 31). Thus check for this case here
+ * and ignore it selectively
+ */
+ if (type_is_signed(lhs_type)) {
+ s_max lhs_int, rhs_int;
+
+ lhs_int = get_signed_val(lhs_type, lhs);
+ rhs_int = get_signed_val(rhs_type, rhs);
+
+ if (fls(lhs_int) + rhs_int == type_bit_width(lhs_type)) {
+ pr_debug("signed left shift of %lld by %lld ignored.\n",
+ (s64)lhs_int, (s64)rhs_int);
+ return;
+ }
+ }
+
ubsan_prologue(&data->location, &flags);
val_to_string(rhs_str, sizeof(rhs_str), rhs_type, rhs);
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index a2dbbd8a00..5f03cf4ffb 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -109,17 +109,17 @@ as-instr = $(call try-run,\
# Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
cc-option = $(call try-run,\
- $(CC) $(KBUILD_CPPFLAGS) $(CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",$(1),$(2))
+ $(CC) -Werror $(KBUILD_CPPFLAGS) $(CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",$(1),$(2))
# cc-option-yn
# Usage: flag := $(call cc-option-yn,-march=winchip-c6)
cc-option-yn = $(call try-run,\
- $(CC) $(KBUILD_CPPFLAGS) $(CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",y,n)
+ $(CC) -Werror $(KBUILD_CPPFLAGS) $(CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",y,n)
# cc-disable-warning
# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable)
cc-disable-warning = $(call try-run,\
- $(CC) $(KBUILD_CPPFLAGS) $(CFLAGS) -W$(strip $(1)) -c -xc /dev/null -o "$$TMP",-Wno-$(strip $(1)))
+ $(CC) -Werror $(KBUILD_CPPFLAGS) $(CFLAGS) -W$(strip $(1)) -c -xc /dev/null -o "$$TMP",-Wno-$(strip $(1)))
# cc-version
# Usage gcc-ver := $(call cc-version)