Skip to content

Commit 537182a

Browse files
kuligakartben
authored andcommitted
drivers: auxdisplay: hd44780: rework auxdisplay_hd44780_command()
Make this function more concise in order to introduce busy-flag polling mechanism later on. Signed-off-by: Jan Kuliga <[email protected]>
1 parent e8dc0c6 commit 537182a

File tree

1 file changed

+16
-24
lines changed

1 file changed

+16
-24
lines changed

drivers/auxdisplay/auxdisplay_hd44780.c

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -77,41 +77,33 @@ struct auxdisplay_hd44780_config {
7777
static void auxdisplay_hd44780_set_entry_mode(const struct device *dev);
7878
static void auxdisplay_hd44780_set_display_mode(const struct device *dev, bool enabled);
7979

80+
static void hd44780_pulse_enable_line(const struct device *dev)
81+
{
82+
const struct auxdisplay_hd44780_config *const config = dev->config;
83+
84+
gpio_pin_set_dt(&config->e_gpio, 1);
85+
k_sleep(K_USEC(config->enable_line_rise_delay));
86+
gpio_pin_set_dt(&config->e_gpio, 0);
87+
k_sleep(K_USEC(config->enable_line_fall_delay));
88+
}
89+
8090
static void auxdisplay_hd44780_command(const struct device *dev, bool rs, uint8_t cmd,
8191
uint8_t mode)
8292
{
8393
const struct auxdisplay_hd44780_config *config = dev->config;
8494
int8_t i = 7;
85-
86-
if (mode == AUXDISPLAY_HD44780_MODE_8_BIT) {
87-
while (i >= 0) {
88-
gpio_pin_set_dt(&config->db_gpios[i], ((cmd & BIT(i)) ? 1 : 0));
89-
--i;
90-
}
91-
} else {
92-
while (i >= 4) {
93-
gpio_pin_set_dt(&config->db_gpios[i], ((cmd & BIT(i)) ? 1 : 0));
94-
--i;
95-
}
96-
}
95+
const int8_t lsb_line = (mode == AUXDISPLAY_HD44780_MODE_8_BIT) ? 0 : 4;
96+
int8_t ncommands = (mode == AUXDISPLAY_HD44780_MODE_4_BIT) ? 2 : 1;
9797

9898
gpio_pin_set_dt(&config->rs_gpio, rs);
9999

100-
gpio_pin_set_dt(&config->e_gpio, 1);
101-
k_sleep(K_USEC(config->enable_line_rise_delay));
102-
gpio_pin_set_dt(&config->e_gpio, 0);
103-
k_sleep(K_USEC(config->enable_line_fall_delay));
104-
105-
if (mode == AUXDISPLAY_HD44780_MODE_4_BIT) {
106-
while (i >= 0) {
107-
gpio_pin_set_dt(&config->db_gpios[(i + 4)], ((cmd & BIT(i)) ? 1 : 0));
100+
while (ncommands--) {
101+
for (int8_t line = 7; line >= lsb_line; --line) {
102+
gpio_pin_set_dt(&config->db_gpios[line], ((cmd & BIT(i)) ? 1 : 0));
108103
--i;
109104
}
110105

111-
gpio_pin_set_dt(&config->e_gpio, 1);
112-
k_sleep(K_USEC(config->enable_line_rise_delay));
113-
gpio_pin_set_dt(&config->e_gpio, 0);
114-
k_sleep(K_USEC(config->enable_line_fall_delay));
106+
hd44780_pulse_enable_line(dev);
115107
}
116108
}
117109

0 commit comments

Comments
 (0)