lkml.org 
[lkml]   [2016]   [Oct]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 6/7] Input: synaptics-rmi4 - add sysfs interfaces for hardware IDs
    Date
    Signed-off-by: Nick Dyer <nick@shmanahar.org>
    ---
    drivers/input/rmi4/rmi_driver.c | 2 +-
    drivers/input/rmi4/rmi_driver.h | 5 +-
    drivers/input/rmi4/rmi_f01.c | 23 ++++++++-
    drivers/input/rmi4/rmi_f34.c | 112 ++++++++++++++++++++++++++++++++++++++++
    4 files changed, 139 insertions(+), 3 deletions(-)

    diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c
    index a9e2827..f015b6a 100644
    --- a/drivers/input/rmi4/rmi_driver.c
    +++ b/drivers/input/rmi4/rmi_driver.c
    @@ -303,7 +303,7 @@ static void rmi_driver_set_input_name(struct rmi_device *rmi_dev,
    struct input_dev *input)
    {
    struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev);
    - char *device_name = rmi_f01_get_product_ID(data->f01_container);
    + const char *device_name = rmi_f01_get_product_ID(data->f01_container);
    char *name;

    name = devm_kasprintf(&rmi_dev->dev, GFP_KERNEL,
    diff --git a/drivers/input/rmi4/rmi_driver.h b/drivers/input/rmi4/rmi_driver.h
    index e627a3a..e22a77f 100644
    --- a/drivers/input/rmi4/rmi_driver.h
    +++ b/drivers/input/rmi4/rmi_driver.h
    @@ -105,7 +105,10 @@ int rmi_init_functions(struct rmi_driver_data *data);
    int rmi_initial_reset(struct rmi_device *rmi_dev, void *ctx,
    const struct pdt_entry *pdt);

    -char *rmi_f01_get_product_ID(struct rmi_function *fn);
    +const char *rmi_f01_get_product_ID(struct rmi_function *fn);
    +u8 rmi_f01_get_manufacturer_ID(struct rmi_function *fn);
    +const char *rmi_f01_get_date_of_manufacture(struct rmi_function *fn);
    +u32 rmi_f01_get_firmware_ID(struct rmi_function *fn);

    #ifdef CONFIG_RMI4_F34
    int rmi_f34_create_sysfs(struct rmi_device *rmi_dev);
    diff --git a/drivers/input/rmi4/rmi_f01.c b/drivers/input/rmi4/rmi_f01.c
    index b64d1cd..8624be8 100644
    --- a/drivers/input/rmi4/rmi_f01.c
    +++ b/drivers/input/rmi4/rmi_f01.c
    @@ -241,13 +241,34 @@ static int rmi_f01_read_properties(struct rmi_device *rmi_dev,
    return 0;
    }

    -char *rmi_f01_get_product_ID(struct rmi_function *fn)
    +const char *rmi_f01_get_product_ID(struct rmi_function *fn)
    {
    struct f01_data *f01 = dev_get_drvdata(&fn->dev);

    return f01->properties.product_id;
    }

    +u8 rmi_f01_get_manufacturer_ID(struct rmi_function *fn)
    +{
    + struct f01_data *f01 = dev_get_drvdata(&fn->dev);
    +
    + return f01->properties.manufacturer_id;
    +}
    +
    +const char *rmi_f01_get_date_of_manufacture(struct rmi_function *fn)
    +{
    + struct f01_data *f01 = dev_get_drvdata(&fn->dev);
    +
    + return f01->properties.dom;
    +}
    +
    +u32 rmi_f01_get_firmware_ID(struct rmi_function *fn)
    +{
    + struct f01_data *f01 = dev_get_drvdata(&fn->dev);
    +
    + return f01->properties.firmware_id;
    +}
    +
    #ifdef CONFIG_OF
    static int rmi_f01_of_probe(struct device *dev,
    struct rmi_device_platform_data *pdata)
    diff --git a/drivers/input/rmi4/rmi_f34.c b/drivers/input/rmi4/rmi_f34.c
    index 59adfec..10b9722 100644
    --- a/drivers/input/rmi4/rmi_f34.c
    +++ b/drivers/input/rmi4/rmi_f34.c
    @@ -383,6 +383,112 @@ static int rmi_firmware_update(struct rmi_driver_data *data,
    return ret;
    }

    +static ssize_t rmi_driver_manufacturer_id_show(struct device *dev,
    + struct device_attribute *dattr,
    + char *buf)
    +{
    + struct rmi_driver_data *data = dev_get_drvdata(dev);
    + struct rmi_function *fn = data->f01_container;
    +
    + return scnprintf(buf, PAGE_SIZE, "%d\n",
    + rmi_f01_get_manufacturer_ID(fn));
    +}
    +
    +static DEVICE_ATTR(manufacturer_id, 0444,
    + rmi_driver_manufacturer_id_show, NULL);
    +
    +static ssize_t rmi_driver_date_of_manufacture_show(struct device *dev,
    + struct device_attribute *dattr,
    + char *buf)
    +{
    + struct rmi_driver_data *data = dev_get_drvdata(dev);
    + struct rmi_function *fn = data->f01_container;
    +
    + return scnprintf(buf, PAGE_SIZE, "%s\n",
    + rmi_f01_get_date_of_manufacture(fn));
    +}
    +
    +static DEVICE_ATTR(date_of_manufacture, 0444,
    + rmi_driver_date_of_manufacture_show, NULL);
    +
    +static ssize_t rmi_driver_product_id_show(struct device *dev,
    + struct device_attribute *dattr,
    + char *buf)
    +{
    + struct rmi_driver_data *data = dev_get_drvdata(dev);
    + struct rmi_function *fn = data->f01_container;
    +
    + return scnprintf(buf, PAGE_SIZE, "%s\n",
    + rmi_f01_get_product_ID(fn));
    +}
    +
    +static DEVICE_ATTR(product_id, 0444,
    + rmi_driver_product_id_show, NULL);
    +
    +static ssize_t rmi_driver_firmware_id_show(struct device *dev,
    + struct device_attribute *dattr,
    + char *buf)
    +{
    + struct rmi_driver_data *data = dev_get_drvdata(dev);
    + struct rmi_function *fn = data->f01_container;
    +
    + return scnprintf(buf, PAGE_SIZE, "%d\n",
    + rmi_f01_get_firmware_ID(fn));
    +}
    +
    +static DEVICE_ATTR(firmware_id, 0444,
    + rmi_driver_firmware_id_show, NULL);
    +
    +static ssize_t rmi_driver_bootloader_id_show(struct device *dev,
    + struct device_attribute *dattr,
    + char *buf)
    +{
    + struct rmi_driver_data *data = dev_get_drvdata(dev);
    + struct rmi_function *fn = data->f34_container;
    + struct f34_data *f34;
    +
    + if (fn) {
    + f34 = dev_get_drvdata(&fn->dev);
    +
    + if (f34->bl_version == BL_V5)
    + return scnprintf(buf, PAGE_SIZE, "%c%c\n",
    + f34->bootloader_id[0],
    + f34->bootloader_id[1]);
    + else
    + return scnprintf(buf, PAGE_SIZE, "V%d.%d\n",
    + f34->bootloader_id[1],
    + f34->bootloader_id[0]);
    + }
    +
    + return 0;
    +}
    +
    +static DEVICE_ATTR(bootloader_id, 0444,
    + rmi_driver_bootloader_id_show, NULL);
    +
    +static ssize_t rmi_driver_configuration_id_show(struct device *dev,
    + struct device_attribute *dattr,
    + char *buf)
    +{
    + struct rmi_driver_data *data = dev_get_drvdata(dev);
    + struct rmi_function *fn = data->f34_container;
    + struct f34_data *f34;
    +
    + if (fn) {
    + f34 = dev_get_drvdata(&fn->dev);
    +
    + return scnprintf(buf, PAGE_SIZE, "%s\n", f34->configuration_id);
    + }
    +
    + return 0;
    +}
    +
    +static DEVICE_ATTR(configuration_id, 0444,
    + rmi_driver_configuration_id_show, NULL);
    +
    +static int rmi_firmware_update(struct rmi_driver_data *data,
    + const struct firmware *fw);
    +
    static ssize_t rmi_driver_update_fw_store(struct device *dev,
    struct device_attribute *dattr,
    const char *buf, size_t count)
    @@ -434,6 +540,12 @@ static DEVICE_ATTR(update_fw_status, 0444,
    rmi_driver_update_fw_status_show, NULL);

    static struct attribute *rmi_firmware_attrs[] = {
    + &dev_attr_bootloader_id.attr,
    + &dev_attr_configuration_id.attr,
    + &dev_attr_manufacturer_id.attr,
    + &dev_attr_date_of_manufacture.attr,
    + &dev_attr_product_id.attr,
    + &dev_attr_firmware_id.attr,
    &dev_attr_update_fw.attr,
    &dev_attr_update_fw_status.attr,
    NULL
    --
    2.7.4
    \
     
     \ /
      Last update: 2016-10-19 01:28    [W:5.359 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site