drivers: kscan: Fix device instance const qualifier loss
SDL one needs to wrap device pointer into its data and xec do not need to pass any argument to its thread. Fixes #27399 Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This commit is contained in:
parent
806b0ca0fb
commit
7af23757bc
@ -62,6 +62,8 @@ static KSCAN_Type *base = (KSCAN_Type *)
|
||||
|
||||
static struct kscan_xec_data kbd_data;
|
||||
|
||||
DEVICE_DECLARE(kscan_xec);
|
||||
|
||||
static void drive_keyboard_column(int data)
|
||||
{
|
||||
if (data == KEYBOARD_COLUMN_DRIVE_ALL) {
|
||||
@ -153,7 +155,7 @@ static void scan_matrix_xec_isr(void *arg)
|
||||
LOG_DBG(" ");
|
||||
}
|
||||
|
||||
static bool check_key_events(void *dev)
|
||||
static bool check_key_events(const struct device *dev)
|
||||
{
|
||||
uint8_t matrix_new_state[MAX_MATRIX_KEY_COLS] = {0U};
|
||||
bool key_pressed = false;
|
||||
@ -267,13 +269,17 @@ static bool poll_expired(uint32_t start_cycles, int64_t *timeout)
|
||||
|
||||
}
|
||||
|
||||
void polling_task(void *dev, void *dummy2, void *dummy3)
|
||||
void polling_task(void *dummy1, void *dummy2, void *dummy3)
|
||||
{
|
||||
uint32_t current_cycles;
|
||||
uint32_t cycles_diff;
|
||||
uint32_t wait_period;
|
||||
int64_t local_poll_timeout = kbd_data.poll_timeout;
|
||||
|
||||
ARG_UNUSED(dummy1);
|
||||
ARG_UNUSED(dummy2);
|
||||
ARG_UNUSED(dummy3);
|
||||
|
||||
while (true) {
|
||||
base->KSI_STS = MCHP_KSCAN_KSO_SEL_REG_MASK;
|
||||
|
||||
@ -289,7 +295,7 @@ void polling_task(void *dev, void *dummy2, void *dummy3)
|
||||
while (atomic_get(&kbd_data.enable_scan) == 1U) {
|
||||
uint32_t start_period_cycles = k_cycle_get_32();
|
||||
|
||||
if (check_key_events(dev)) {
|
||||
if (check_key_events(DEVICE_GET(kscan_xec))) {
|
||||
local_poll_timeout = kbd_data.poll_timeout;
|
||||
start_poll_cycles = k_cycle_get_32();
|
||||
} else if (!poll_expired(start_poll_cycles,
|
||||
@ -399,7 +405,7 @@ static int kscan_xec_init(const struct device *dev)
|
||||
|
||||
k_thread_create(&kbd_data.thread, kbd_data.thread_stack,
|
||||
TASK_STACK_SIZE,
|
||||
polling_task, dev, NULL, NULL,
|
||||
polling_task, NULL, NULL, NULL,
|
||||
K_PRIO_COOP(4), 0, K_NO_WAIT);
|
||||
|
||||
/* Interrupts are enabled in the thread function */
|
||||
|
||||
@ -12,14 +12,14 @@
|
||||
LOG_MODULE_REGISTER(kscan, CONFIG_KSCAN_LOG_LEVEL);
|
||||
|
||||
struct sdl_data {
|
||||
const struct device *dev;
|
||||
kscan_callback_t callback;
|
||||
bool enabled;
|
||||
};
|
||||
|
||||
static int sdl_filter(void *arg, SDL_Event *event)
|
||||
{
|
||||
const struct device *dev = arg;
|
||||
struct sdl_data *data = dev->data;
|
||||
struct sdl_data *data = arg;
|
||||
uint32_t row = 0;
|
||||
uint32_t column = 0;
|
||||
bool pressed = 0;
|
||||
@ -47,7 +47,7 @@ static int sdl_filter(void *arg, SDL_Event *event)
|
||||
}
|
||||
|
||||
if (data->enabled && data->callback) {
|
||||
data->callback(dev, row, column, pressed);
|
||||
data->callback(data->dev, row, column, pressed);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
@ -87,8 +87,12 @@ static int sdl_disable_callback(const struct device *dev)
|
||||
|
||||
static int sdl_init(const struct device *dev)
|
||||
{
|
||||
struct sdl_data *data = dev->driver_data;
|
||||
|
||||
data->dev = dev;
|
||||
|
||||
LOG_INF("Init '%s' device", dev->name);
|
||||
SDL_AddEventWatch(sdl_filter, dev);
|
||||
SDL_AddEventWatch(sdl_filter, data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user