summaryrefslogtreecommitdiffstats
path: root/drivers/gnss
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gnss')
-rw-r--r--drivers/gnss/core.c49
-rw-r--r--drivers/gnss/sirf.c1
-rw-r--r--drivers/gnss/ubx.c2
3 files changed, 52 insertions, 0 deletions
diff --git a/drivers/gnss/core.c b/drivers/gnss/core.c
index 307894ca2725..f30ef8338b3a 100644
--- a/drivers/gnss/core.c
+++ b/drivers/gnss/core.c
@@ -330,6 +330,52 @@ int gnss_insert_raw(struct gnss_device *gdev, const unsigned char *buf,
330} 330}
331EXPORT_SYMBOL_GPL(gnss_insert_raw); 331EXPORT_SYMBOL_GPL(gnss_insert_raw);
332 332
333static const char * const gnss_type_names[GNSS_TYPE_COUNT] = {
334 [GNSS_TYPE_NMEA] = "NMEA",
335 [GNSS_TYPE_SIRF] = "SiRF",
336 [GNSS_TYPE_UBX] = "UBX",
337};
338
339static const char *gnss_type_name(struct gnss_device *gdev)
340{
341 const char *name = NULL;
342
343 if (gdev->type < GNSS_TYPE_COUNT)
344 name = gnss_type_names[gdev->type];
345
346 if (!name)
347 dev_WARN(&gdev->dev, "type name not defined\n");
348
349 return name;
350}
351
352static ssize_t type_show(struct device *dev, struct device_attribute *attr,
353 char *buf)
354{
355 struct gnss_device *gdev = to_gnss_device(dev);
356
357 return sprintf(buf, "%s\n", gnss_type_name(gdev));
358}
359static DEVICE_ATTR_RO(type);
360
361static struct attribute *gnss_attrs[] = {
362 &dev_attr_type.attr,
363 NULL,
364};
365ATTRIBUTE_GROUPS(gnss);
366
367static int gnss_uevent(struct device *dev, struct kobj_uevent_env *env)
368{
369 struct gnss_device *gdev = to_gnss_device(dev);
370 int ret;
371
372 ret = add_uevent_var(env, "GNSS_TYPE=%s", gnss_type_name(gdev));
373 if (ret)
374 return ret;
375
376 return 0;
377}
378
333static int __init gnss_module_init(void) 379static int __init gnss_module_init(void)
334{ 380{
335 int ret; 381 int ret;
@@ -347,6 +393,9 @@ static int __init gnss_module_init(void)
347 goto err_unregister_chrdev; 393 goto err_unregister_chrdev;
348 } 394 }
349 395
396 gnss_class->dev_groups = gnss_groups;
397 gnss_class->dev_uevent = gnss_uevent;
398
350 pr_info("GNSS driver registered with major %d\n", MAJOR(gnss_first)); 399 pr_info("GNSS driver registered with major %d\n", MAJOR(gnss_first));
351 400
352 return 0; 401 return 0;
diff --git a/drivers/gnss/sirf.c b/drivers/gnss/sirf.c
index 5fb0f730db48..79cb98950013 100644
--- a/drivers/gnss/sirf.c
+++ b/drivers/gnss/sirf.c
@@ -267,6 +267,7 @@ static int sirf_probe(struct serdev_device *serdev)
267 if (!gdev) 267 if (!gdev)
268 return -ENOMEM; 268 return -ENOMEM;
269 269
270 gdev->type = GNSS_TYPE_SIRF;
270 gdev->ops = &sirf_gnss_ops; 271 gdev->ops = &sirf_gnss_ops;
271 gnss_set_drvdata(gdev, data); 272 gnss_set_drvdata(gdev, data);
272 273
diff --git a/drivers/gnss/ubx.c b/drivers/gnss/ubx.c
index ecddfb362a6f..902b6854b7db 100644
--- a/drivers/gnss/ubx.c
+++ b/drivers/gnss/ubx.c
@@ -77,6 +77,8 @@ static int ubx_probe(struct serdev_device *serdev)
77 77
78 gserial->ops = &ubx_gserial_ops; 78 gserial->ops = &ubx_gserial_ops;
79 79
80 gserial->gdev->type = GNSS_TYPE_UBX;
81
80 data = gnss_serial_get_drvdata(gserial); 82 data = gnss_serial_get_drvdata(gserial);
81 83
82 data->vcc = devm_regulator_get(&serdev->dev, "vcc"); 84 data->vcc = devm_regulator_get(&serdev->dev, "vcc");