Re: [PATCH v7 3/4] SFH: Transport Driver to add support of AMD Sensor Fusion Hub (SFH)

From: Andy Shevchenko
Date: Wed Aug 19 2020 - 06:32:26 EST


On Tue, Aug 11, 2020 at 12:31 AM Sandeep Singh <Sandeep.Singh@xxxxxxx> wrote:

> This part of module will provide the interaction between HID framework

of the module

> and client layer.This module will registered client layer with

register

> HID framework.

...

> +/*

Is it kernel doc or not? Fix this in all occurrences.

> + * amdtp_hid_parse() - hid-core .parse() callback
> + * @hid: hid device instance
> + *
> + * This function gets called during call to hid_add_device
> + *
> + * Return: 0 on success and non zero on error
> + */

...

> +static void amdtp_hid_request(struct hid_device *hid, struct hid_report *rep, int reqtype)
> +{
> + int rc;
> +
> + switch (reqtype) {
> + case HID_REQ_GET_REPORT:
> + rc = amd_sfh_get_report(hid, rep->id, rep->type);
> + if (rc)
> + pr_err("AMDSFH get report error ");

Use dev_err() and similar in the other places.

> + break;
> + case HID_REQ_SET_REPORT:
> + amd_sfh_set_report(hid, rep->id, reqtype);
> + break;
> + default:
> + break;
> + }
> +}

...

> + if (!cli_data->request_done[i])
> + ret = wait_event_interruptible_timeout(hid_data->hid_wait,
> + cli_data->request_done[i], 1500);

Magic number!

> + if (ret > 0)
> + return 0;

Usually we return errors first...

> + else if (ret == -ERESTARTSYS)
> + return -ERESTARTSYS;
> + else
> + return -ETIMEDOUT;
> +}

...

> + hid = hid_allocate_device();
> + if (IS_ERR(hid)) {

> + rc = PTR_ERR(hid);
> + return rc;

Why do you need two lines here?

> + }

...

> + hid_data = kzalloc(sizeof(*hid_data), GFP_KERNEL);

devm_kzalloc() ?

> + if (!hid_data) {
> + rc = -ENOMEM;
> + goto err_hid_data;
> + }

...

> +#define AMD_SFH_HID_VENDOR 1022

Decimal?!

> +#define AMD_SFH_HID_PRODUCT 0x0001

...

> +#include <linux/dma-mapping.h>
> +#include <linux/hid.h>
> +#include <linux/list.h>
> +#include <linux/slab.h>
> +#include <linux/workqueue.h>

> +#include <uapi/asm-generic/errno-base.h>

Huh?! linux/errno.h

+ blank line here.

> +#include "hid_descriptor/amd_sfh_hid_descriptor.h"
> +#include "amdsfh_hid.h"
> +#include "amd_mp2_pcie.h"

...

> +#define PERIOD 200

Too generic name (namespace?), absence of unit.

...

> + for (i = 0; i < cli_data->num_hid_devices; i++) {
> + if (cli_data->hid_sensor_hubs[i] == hid) {

if (!...)
continue;

?

> + struct request_list *new = kzalloc(sizeof(*new), GFP_KERNEL);
> +
> + if (!new)
> + return -ENOMEM;
> + new->current_index = i;
> + new->sensor_idx = cli_data->sensor_idx[i];
> + new->hid = hid;
> + new->report_type = report_type;
> + new->report_id = report_id;
> + cli_data->report_id[i] = report_id;
> + cli_data->request_done[i] = false;
> + list_add(&new->list, &req_list.list);
> + break;
> + }
> + }

--
With Best Regards,
Andy Shevchenko