Hi Mikel, > + > +struct devinfo_data { > + char *device_address; > + guint register_event_id; Please use register_source here > +}; > + > +static void hfp_query_manufacturer(struct ofono_devinfo *info, > + ofono_devinfo_query_cb_t cb, > + void *data) > +{ > + CALLBACK_WITH_FAILURE(cb, "", data); > +} > + > +static void hfp_query_model(struct ofono_devinfo *info, > + ofono_devinfo_query_cb_t cb, > + void *data) > +{ > + CALLBACK_WITH_FAILURE(cb, "", data); > +} > + > +static void hfp_query_revision(struct ofono_devinfo *info, > + ofono_devinfo_query_cb_t cb, > + void *data) > +{ > + CALLBACK_WITH_FAILURE(cb, "", data); > +} > + Please omit these functions, the devinfo atom should handle the absence of these gracefully. > +static void hfp_query_serial(struct ofono_devinfo *info, > + ofono_devinfo_query_cb_t cb, > + void *data) > +{ > + struct devinfo_data *dev = ofono_devinfo_get_data(info); > + CALLBACK_WITH_SUCCESS(cb, dev->device_address, data); > +} > + > +static gboolean hfp_devinfo_register(gpointer user_data) > +{ > + struct ofono_devinfo *info = user_data; > + struct devinfo_data *dd = ofono_devinfo_get_data(info); > + > + dd->register_event_id = 0; > + > + ofono_devinfo_register(info); > + > + return FALSE; > +} > + > +static int hfp_devinfo_probe(struct ofono_devinfo *info, unsigned int vendor, > + void *user) > +{ > + struct hfp_devinfo_params *devinfo_params = user; > + struct devinfo_data *dd; > + > + dd = g_new0(struct devinfo_data, 1); > + dd->device_address = g_strdup(devinfo_params->device_address); > + > + ofono_devinfo_set_data(info, dd); > + > + dd->register_event_id = g_idle_add(hfp_devinfo_register, info); > + return 0; > +} > + > +static void hfp_devinfo_remove(struct ofono_devinfo *info) > +{ > + struct devinfo_data *dd = ofono_devinfo_get_data(info); > + > + ofono_devinfo_set_data(info, NULL); > + if (dd == NULL) > + return; > + > + if (dd->register_event_id != 0) > + g_source_remove(dd->register_event_id); > + > + g_free(dd->device_address); > + g_free(dd); > +} > + > +static struct ofono_devinfo_driver driver = { > + .name = "hfpmodem", > + .probe = hfp_devinfo_probe, > + .remove = hfp_devinfo_remove, > + .query_manufacturer = hfp_query_manufacturer, > + .query_model = hfp_query_model, > + .query_revision = hfp_query_revision, > + .query_serial = hfp_query_serial > +}; > + > +void hfp_devinfo_init(void) > +{ > + ofono_devinfo_driver_register(&driver); > +} > + > +void hfp_devinfo_exit(void) > +{ > + ofono_devinfo_driver_unregister(&driver); > +} Regards, -Denis