drivers: led: Fix device instance const qualifier loss in HT16K33

It is necessary to wrap the device pointer into data.

Fixes #27399

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This commit is contained in:
Tomasz Bursztyka 2020-07-08 13:12:58 +02:00 committed by Carles Cufí
commit 806b0ca0fb

View file

@ -77,6 +77,7 @@ struct ht16k33_cfg {
struct ht16k33_data { struct ht16k33_data {
const struct device *i2c; const struct device *i2c;
const struct device *dev;
struct led_data dev_data; struct led_data dev_data;
/* Shadow buffer for the display data RAM */ /* Shadow buffer for the display data RAM */
uint8_t buffer[HT16K33_DISP_DATA_SIZE]; uint8_t buffer[HT16K33_DISP_DATA_SIZE];
@ -262,9 +263,8 @@ static bool ht16k33_process_keyscan_data(const struct device *dev)
return pressed; return pressed;
} }
static void ht16k33_irq_thread(const struct device *dev) static void ht16k33_irq_thread(struct ht16k33_data *data)
{ {
struct ht16k33_data *data = dev->data;
bool pressed; bool pressed;
while (true) { while (true) {
@ -272,7 +272,7 @@ static void ht16k33_irq_thread(const struct device *dev)
do { do {
k_sem_reset(&data->irq_sem); k_sem_reset(&data->irq_sem);
pressed = ht16k33_process_keyscan_data(dev); pressed = ht16k33_process_keyscan_data(data->dev);
k_msleep(CONFIG_HT16K33_KEYSCAN_DEBOUNCE_MSEC); k_msleep(CONFIG_HT16K33_KEYSCAN_DEBOUNCE_MSEC);
} while (pressed); } while (pressed);
} }
@ -328,6 +328,8 @@ static int ht16k33_init(const struct device *dev)
uint8_t cmd[1 + HT16K33_DISP_DATA_SIZE]; /* 1 byte command + data */ uint8_t cmd[1 + HT16K33_DISP_DATA_SIZE]; /* 1 byte command + data */
int err; int err;
data->dev = dev;
data->i2c = device_get_binding(config->i2c_dev_name); data->i2c = device_get_binding(config->i2c_dev_name);
if (data->i2c == NULL) { if (data->i2c == NULL) {
LOG_ERR("Failed to get I2C device"); LOG_ERR("Failed to get I2C device");
@ -447,7 +449,7 @@ static int ht16k33_init(const struct device *dev)
k_thread_create(&data->irq_thread, data->irq_thread_stack, k_thread_create(&data->irq_thread, data->irq_thread_stack,
CONFIG_HT16K33_KEYSCAN_IRQ_THREAD_STACK_SIZE, CONFIG_HT16K33_KEYSCAN_IRQ_THREAD_STACK_SIZE,
(k_thread_entry_t)ht16k33_irq_thread, dev, NULL, NULL, (k_thread_entry_t)ht16k33_irq_thread, data, NULL, NULL,
K_PRIO_COOP(CONFIG_HT16K33_KEYSCAN_IRQ_THREAD_PRIO), K_PRIO_COOP(CONFIG_HT16K33_KEYSCAN_IRQ_THREAD_PRIO),
0, K_NO_WAIT); 0, K_NO_WAIT);
#endif /* CONFIG_HT16K33_KEYSCAN */ #endif /* CONFIG_HT16K33_KEYSCAN */