Re: [PATCH 2/7] input: cyapa: add gen6 device module support in driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dudley,

A few more spelling errors...

On Fri, Jun 12, 2015 at 02:56:33PM +0800, Dudley Du wrote:
> Based on the cyapa core, add the gen6 trackpad device's basic functions
> supported, so gen6 trackpad device can work with kernel input system.
> And also based on the state parse interface, the cyapa driver can
> automatically determine the attached is gen3, gen5 or gen6 protocol
> trackpad device, then set the correct protocol to work with the attached
> trackpad device.
> TEST=test on Chromebook.
> 
> Signed-off-by: Dudley Du <dudl@xxxxxxxxxxx>
> ---
>  drivers/input/mouse/Makefile     |   2 +-
>  drivers/input/mouse/cyapa.c      |  22 ++
>  drivers/input/mouse/cyapa.h      |  15 +
>  drivers/input/mouse/cyapa_gen5.c |  69 +++-
>  drivers/input/mouse/cyapa_gen6.c | 729 +++++++++++++++++++++++++++++++++++++++
[...]
> +static int cyapa_get_pip_fixed_info(struct cyapa *cyapa,
> +		struct pip_fixed_info *pip_info, bool is_bootloader)
> +{
> +	u8 resp_data[PIP_READ_SYS_INFO_RESP_LENGTH];
> +	int resp_len;
> +	u16 product_family;
> +	int error;
> +
> +	if (is_bootloader) {
> +		/* Read Bootlaoder Inforamtion to determine Gen5 or Gen6. */
                       sp: ^^^^^^^^^^^

> +		resp_len = sizeof(resp_data);
> +		error = cyapa_i2c_pip_cmd_irq_sync(cyapa,
> +				pip_get_bl_info, sizeof(pip_get_bl_info),
> +				resp_data, &resp_len,
> +				2000, cyapa_sort_tsg_pip_bl_resp_data,
> +				false);
[...]
> +
> +	product_family = get_unaligned_le16(&resp_data[7]);
> +	if ((product_family & PIP_PRODUCT_FAMILY_MASK) !=
> +		PIP_PRODUCT_FAMILY_TRACKPAD)
> +		return -EINVAL;
> +
> +	pip_info->family_id = resp_data[19];
> +	pip_info->silicon_id_low = resp_data[21];
> +	pip_info->silicon_id_high = resp_data[22];
> +
> +	return 0;
> +
> +}
Why the extra blank line?

> +
> +int cyapa_pip_state_parse(struct cyapa *cyapa, u8 *reg_data, int len)
> +{
> +	u8 cmd[] = { 0x01, 0x00};
> +	struct pip_fixed_info pip_info;
> +	u8 resp_data[PIP_HID_DESCRIPTOR_SIZE];
> +	int resp_len;
> +	bool is_bootloader;
> +	int error;
> +
> +	cyapa->state = CYAPA_STATE_NO_DEVICE;
> +
> +	/* Try to wake from it deep sleep state if it is. */
> +	cyapa_pip_deep_sleep(cyapa, PIP_DEEP_SLEEP_STATE_ON);
> +
> +	/* Empty the buffer queue to get fresh data with later commands. */
> +	cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL);
[...]
> +static ssize_t cyapa_gen6_show_baseline(struct device *dev,
> +		struct device_attribute *attr, char *buf)
> +{
> +	struct cyapa *cyapa = dev_get_drvdata(dev);
> +	u8 data[GEN6_MAX_RX_NUM];
> +	int data_len;
> +	int size = 0;
> +	int i;
> +	int error;
> +	int resume_error;
> +
> +	if (!cyapa_is_pip_app_mode(cyapa))
> +		return -EBUSY;
> +
> +	/* 1. Suspend Scanning*/
                  space? ^^^

> +	error = cyapa_pip_suspend_scanning(cyapa);
> +	if (error)
> +		return error;
> +
> +	/* 2. IDAC and RX Attenuator Calibration Data (Center Frequency). */
> +	data_len = sizeof(data);
> +	error = cyapa_pip_reterive_data_structure(cyapa, 0, data_len,
> +			GEN6_RETERIVE_DATA_ID_RX_ATTENURATOR_IDAC,
> +			data, &data_len);
> +	if (error)
> +		goto resume_scanning;
> +
> +	size = scnprintf(buf, PAGE_SIZE, "%d %d %d %d %d %d ",
> +			data[0],  /* RX Attenuator Mutal */
> +			data[1],  /* IDAC Mutual */
> +			data[2],  /* RX Attenuator Self RX */
> +			data[3],  /* IDAC Self RX */
> +			data[4],  /* RX Attenuator Self TX */
> +			data[5]	  /* IDAC Self TX */
> +			);
> +
> +	/* 3. Read Attenuator Trim. */
> +	data_len = sizeof(data);
> +	error = cyapa_pip_reterive_data_structure(cyapa, 0, data_len,
> +			GEN6_RETERIVE_DATA_ID_ATTENURATOR_TRIM,
> +			data, &data_len);
> +	if (error)
> +		goto resume_scanning;
> +
> +	/* set attenuator trim values. */
> +	for (i = 0; i < data_len; i++)
> +		size += scnprintf(buf + size, PAGE_SIZE - size,	"%d ", data[i]);
> +	size += scnprintf(buf + size, PAGE_SIZE - size, "\n");
> +
> +resume_scanning:
> +	/* 4. Resume Scanning*/
                  space? ^^^

> +	resume_error = cyapa_pip_resume_scanning(cyapa);
> +	if (resume_error || error) {
> +		memset(buf, 0, PAGE_SIZE);
> +		return resume_error ? resume_error : error;
> +	}
> +
> +	return size;
> +}
> +
> +static int cyapa_gen6_operational_check(struct cyapa *cyapa)
> +{
> +	struct device *dev = &cyapa->client->dev;
> +	int error;
> +
> +	if (cyapa->gen != CYAPA_GEN6)
> +		return -ENODEV;
> +
> +	switch (cyapa->state) {
> +	case CYAPA_STATE_GEN6_BL:
> +		error = cyapa_pip_bl_exit(cyapa);
> +		if (error) {
> +			/* Rry to update trackpad product information. */
           sp: ^^^

> +			cyapa_gen6_bl_read_app_info(cyapa);
> +			goto out;
> +		}
> +
> +		cyapa->state = CYAPA_STATE_GEN6_APP;
> +
> +	case CYAPA_STATE_GEN6_APP:
> +		/*
> +		 * If trackpad device in deep sleep mode,
> +		 * the app command will fail.
> +		 * So always try to reset trackpad device to full active when
> +		 * the device state is requeried.
> +		 */
[...]

-- 
- Jeremiah Mahler
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux