Add mandatory .probe() callback in ratbag_driver

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
This commit is contained in:
Benjamin Tissoires
2015-08-14 17:36:43 -04:00
parent b98477a7ec
commit 3733fee438
3 changed files with 23 additions and 3 deletions

View File

@@ -27,6 +27,12 @@
#include "libratbag-private.h"
static int
etekcity_probe(struct ratbag *ratbag, const struct ratbag_id id)
{
return 0;
}
static const struct ratbag_id etekcity_table[] = {
{.id = { .bustype = BUS_USB,
.vendor = USB_VENDOR_ID_ETEKCITY,
@@ -40,4 +46,5 @@ static const struct ratbag_id etekcity_table[] = {
struct ratbag_driver etekcity_driver = {
.name = "EtekCity",
.table_ids = etekcity_table,
.probe = etekcity_probe,
};

View File

@@ -57,6 +57,8 @@ struct ratbag_driver {
char *name;
const struct ratbag_id *table_ids;
int (*probe)(struct ratbag *ratbag, const struct ratbag_id id);
/* private */
struct list link;
};

View File

@@ -203,17 +203,28 @@ ratbag_match_id(const struct input_id *dev_id, const struct input_id *match_id)
}
static struct ratbag_driver *
ratbag_find_driver(struct libratbag *libratbag, const struct input_id *dev_id)
ratbag_find_driver(struct libratbag *libratbag, struct ratbag *ratbag,
const struct input_id *dev_id)
{
struct ratbag_driver *driver;
const struct ratbag_id *matching_id;
struct ratbag_id matched_id;
int rc;
list_for_each(driver, &libratbag->drivers, link) {
log_debug(libratbag, "testing against %s\n", driver->name);
matching_id = driver->table_ids;
do {
if (ratbag_match_id(dev_id, &matching_id->id)) {
return driver;
assert(driver->probe);
matched_id.id = *dev_id;
matched_id.data = matching_id->data;
rc = driver->probe(ratbag, matched_id);
if (rc == 0)
return driver;
if (rc != -ENODEV)
return NULL;
}
matching_id++;
} while (matching_id->id.bustype != 0 ||
@@ -264,7 +275,7 @@ ratbag_new_from_fd(struct libratbag *libratbag, int fd)
if (rc)
goto out_err;
driver = ratbag_find_driver(libratbag, &ids);
driver = ratbag_find_driver(libratbag, ratbag, &ids);
if (!driver) {
errno = ENOTSUP;
goto err_udev;