kerneldevice: add method to retrieve manufacturer information
A USB device may report its manufacturer through the Manufacturer String Descriptor. That information can sometimes be useful, e.g. MBIM doesn't define a standard command to query the manufacturer. This patch adds a method to MMKernelDevice to retrieve the manufacturer information from the underlying physical device, which can later be used by MMBroadbandModemMbim to report the manufacturer of a MBIM modem.
This commit is contained in:
committed by
Aleksander Morgado
parent
bee3f063b4
commit
3a0d658b5d
@@ -475,6 +475,14 @@ kernel_device_get_physdev_pid (MMKernelDevice *self)
|
||||
return MM_KERNEL_DEVICE_GENERIC (self)->priv->physdev_pid;
|
||||
}
|
||||
|
||||
static const gchar *
|
||||
kernel_device_get_physdev_manufacturer (MMKernelDevice *self)
|
||||
{
|
||||
g_return_val_if_fail (MM_IS_KERNEL_DEVICE_GENERIC (self), 0);
|
||||
|
||||
return MM_KERNEL_DEVICE_GENERIC (self)->priv->physdev_manufacturer;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
kernel_device_is_candidate (MMKernelDevice *_self,
|
||||
gboolean manual_scan)
|
||||
@@ -1054,21 +1062,22 @@ mm_kernel_device_generic_class_init (MMKernelDeviceGenericClass *klass)
|
||||
object_class->get_property = get_property;
|
||||
object_class->set_property = set_property;
|
||||
|
||||
kernel_device_class->get_subsystem = kernel_device_get_subsystem;
|
||||
kernel_device_class->get_name = kernel_device_get_name;
|
||||
kernel_device_class->get_driver = kernel_device_get_driver;
|
||||
kernel_device_class->get_sysfs_path = kernel_device_get_sysfs_path;
|
||||
kernel_device_class->get_physdev_uid = kernel_device_get_physdev_uid;
|
||||
kernel_device_class->get_physdev_vid = kernel_device_get_physdev_vid;
|
||||
kernel_device_class->get_physdev_pid = kernel_device_get_physdev_pid;
|
||||
kernel_device_class->get_parent_sysfs_path = kernel_device_get_parent_sysfs_path;
|
||||
kernel_device_class->is_candidate = kernel_device_is_candidate;
|
||||
kernel_device_class->cmp = kernel_device_cmp;
|
||||
kernel_device_class->has_property = kernel_device_has_property;
|
||||
kernel_device_class->get_property = kernel_device_get_property;
|
||||
kernel_device_class->get_property_as_boolean = kernel_device_get_property_as_boolean;
|
||||
kernel_device_class->get_property_as_int = kernel_device_get_property_as_int;
|
||||
kernel_device_class->get_property_as_int_hex = kernel_device_get_property_as_int_hex;
|
||||
kernel_device_class->get_subsystem = kernel_device_get_subsystem;
|
||||
kernel_device_class->get_name = kernel_device_get_name;
|
||||
kernel_device_class->get_driver = kernel_device_get_driver;
|
||||
kernel_device_class->get_sysfs_path = kernel_device_get_sysfs_path;
|
||||
kernel_device_class->get_physdev_uid = kernel_device_get_physdev_uid;
|
||||
kernel_device_class->get_physdev_vid = kernel_device_get_physdev_vid;
|
||||
kernel_device_class->get_physdev_pid = kernel_device_get_physdev_pid;
|
||||
kernel_device_class->get_physdev_manufacturer = kernel_device_get_physdev_manufacturer;
|
||||
kernel_device_class->get_parent_sysfs_path = kernel_device_get_parent_sysfs_path;
|
||||
kernel_device_class->is_candidate = kernel_device_is_candidate;
|
||||
kernel_device_class->cmp = kernel_device_cmp;
|
||||
kernel_device_class->has_property = kernel_device_has_property;
|
||||
kernel_device_class->get_property = kernel_device_get_property;
|
||||
kernel_device_class->get_property_as_boolean = kernel_device_get_property_as_boolean;
|
||||
kernel_device_class->get_property_as_int = kernel_device_get_property_as_int;
|
||||
kernel_device_class->get_property_as_int_hex = kernel_device_get_property_as_int_hex;
|
||||
|
||||
/* Device-wide properties are stored per-port in the generic backend */
|
||||
kernel_device_class->has_global_property = kernel_device_has_property;
|
||||
|
||||
@@ -383,6 +383,21 @@ kernel_device_get_physdev_pid (MMKernelDevice *_self)
|
||||
return self->priv->product;
|
||||
}
|
||||
|
||||
static const gchar *
|
||||
kernel_device_get_physdev_manufacturer (MMKernelDevice *_self)
|
||||
{
|
||||
MMKernelDeviceUdev *self;
|
||||
|
||||
g_return_val_if_fail (MM_IS_KERNEL_DEVICE_UDEV (_self), NULL);
|
||||
|
||||
self = MM_KERNEL_DEVICE_UDEV (_self);
|
||||
ensure_physdev (self);
|
||||
if (!self->priv->physdev)
|
||||
return NULL;
|
||||
|
||||
return g_udev_device_get_sysfs_attr (self->priv->physdev, "manufacturer");
|
||||
}
|
||||
|
||||
static const gchar *
|
||||
kernel_device_get_parent_sysfs_path (MMKernelDevice *_self)
|
||||
{
|
||||
@@ -864,6 +879,7 @@ mm_kernel_device_udev_class_init (MMKernelDeviceUdevClass *klass)
|
||||
kernel_device_class->get_physdev_uid = kernel_device_get_physdev_uid;
|
||||
kernel_device_class->get_physdev_vid = kernel_device_get_physdev_vid;
|
||||
kernel_device_class->get_physdev_pid = kernel_device_get_physdev_pid;
|
||||
kernel_device_class->get_physdev_manufacturer = kernel_device_get_physdev_manufacturer;
|
||||
kernel_device_class->get_parent_sysfs_path = kernel_device_get_parent_sysfs_path;
|
||||
kernel_device_class->is_candidate = kernel_device_is_candidate;
|
||||
kernel_device_class->cmp = kernel_device_cmp;
|
||||
|
||||
@@ -89,6 +89,16 @@ mm_kernel_device_get_physdev_pid (MMKernelDevice *self)
|
||||
0);
|
||||
}
|
||||
|
||||
const gchar *
|
||||
mm_kernel_device_get_physdev_manufacturer (MMKernelDevice *self)
|
||||
{
|
||||
g_return_val_if_fail (MM_IS_KERNEL_DEVICE (self), NULL);
|
||||
|
||||
return (MM_KERNEL_DEVICE_GET_CLASS (self)->get_physdev_manufacturer ?
|
||||
MM_KERNEL_DEVICE_GET_CLASS (self)->get_physdev_manufacturer (self) :
|
||||
NULL);
|
||||
}
|
||||
|
||||
gboolean
|
||||
mm_kernel_device_is_candidate (MMKernelDevice *self,
|
||||
gboolean manual_scan)
|
||||
|
||||
@@ -55,6 +55,8 @@ struct _MMKernelDeviceClass {
|
||||
|
||||
guint16 (* get_physdev_pid) (MMKernelDevice *self);
|
||||
|
||||
const gchar * (* get_physdev_manufacturer) (MMKernelDevice *self);
|
||||
|
||||
gboolean (* cmp) (MMKernelDevice *a, MMKernelDevice *b);
|
||||
|
||||
gboolean (* has_property) (MMKernelDevice *self, const gchar *property);
|
||||
@@ -82,9 +84,10 @@ gboolean mm_kernel_device_is_candidate (MMKernelDevice *self,
|
||||
|
||||
const gchar *mm_kernel_device_get_parent_sysfs_path (MMKernelDevice *self);
|
||||
|
||||
const gchar *mm_kernel_device_get_physdev_uid (MMKernelDevice *self);
|
||||
guint16 mm_kernel_device_get_physdev_vid (MMKernelDevice *self);
|
||||
guint16 mm_kernel_device_get_physdev_pid (MMKernelDevice *self);
|
||||
const gchar *mm_kernel_device_get_physdev_uid (MMKernelDevice *self);
|
||||
guint16 mm_kernel_device_get_physdev_vid (MMKernelDevice *self);
|
||||
guint16 mm_kernel_device_get_physdev_pid (MMKernelDevice *self);
|
||||
const gchar *mm_kernel_device_get_physdev_manufacturer (MMKernelDevice *self);
|
||||
|
||||
gboolean mm_kernel_device_cmp (MMKernelDevice *a, MMKernelDevice *b);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user