linux/drivers/input/touchscreen/goodix_berlin_core.c

// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * Goodix "Berlin" Touchscreen IC driver
 * Copyright (C) 2020 - 2021 Goodix, Inc.
 * Copyright (C) 2023 Linaro Ltd.
 *
 * Based on goodix_ts_berlin driver.
 *
 * This driver is distinct from goodix.c since hardware interface
 * is different enough to require a new driver.
 * None of the register address or data structure are close enough
 * to the previous generations.
 *
 * Currently the driver only handles Multitouch events with already
 * programmed firmware and "config" for "Revision D" Berlin IC.
 *
 * Support is missing for:
 * - ESD Management
 * - Firmware update/flashing
 * - "Config" update/flashing
 * - Stylus Events
 * - Gesture Events
 * - Support for older revisions (A & B)
 */

#include <linux/bitfield.h>
#include <linux/gpio/consumer.h>
#include <linux/input.h>
#include <linux/input/mt.h>
#include <linux/input/touchscreen.h>
#include <linux/regmap.h>
#include <linux/regulator/consumer.h>
#include <linux/sizes.h>
#include <linux/unaligned.h>

#include "goodix_berlin.h"

#define GOODIX_BERLIN_MAX_TOUCH

#define GOODIX_BERLIN_NORMAL_RESET_DELAY_MS

#define GOODIX_BERLIN_TOUCH_EVENT
#define GOODIX_BERLIN_REQUEST_EVENT
#define GOODIX_BERLIN_TOUCH_COUNT_MASK

#define GOODIX_BERLIN_REQUEST_CODE_RESET

#define GOODIX_BERLIN_POINT_TYPE_MASK
#define GOODIX_BERLIN_POINT_TYPE_STYLUS_HOVER
#define GOODIX_BERLIN_POINT_TYPE_STYLUS

#define GOODIX_BERLIN_TOUCH_ID_MASK

#define GOODIX_BERLIN_DEV_CONFIRM_VAL
#define GOODIX_BERLIN_BOOTOPTION_ADDR
#define GOODIX_BERLIN_FW_VERSION_INFO_ADDR

#define GOODIX_BERLIN_IC_INFO_MAX_LEN
#define GOODIX_BERLIN_IC_INFO_ADDR

#define GOODIX_BERLIN_CHECKSUM_SIZE

struct goodix_berlin_fw_version {};

struct goodix_berlin_ic_info_version {} __packed;

struct goodix_berlin_ic_info_feature {} __packed;

struct goodix_berlin_ic_info_misc {} __packed;

struct goodix_berlin_touch {};
#define GOODIX_BERLIN_TOUCH_SIZE

struct goodix_berlin_header {};
#define GOODIX_BERLIN_HEADER_SIZE

struct goodix_berlin_event {};

struct goodix_berlin_core {};

static bool goodix_berlin_checksum_valid(const u8 *data, int size)
{}

static bool goodix_berlin_is_dummy_data(struct goodix_berlin_core *cd,
					const u8 *data, int size)
{}

static int goodix_berlin_dev_confirm(struct goodix_berlin_core *cd)
{}

static int goodix_berlin_power_on(struct goodix_berlin_core *cd)
{}

static void goodix_berlin_power_off(struct goodix_berlin_core *cd)
{}

static int goodix_berlin_read_version(struct goodix_berlin_core *cd)
{}

/* Only extract necessary data for runtime */
static int goodix_berlin_parse_ic_info(struct goodix_berlin_core *cd,
				       const u8 *data, u16 length)
{}

static int goodix_berlin_get_ic_info(struct goodix_berlin_core *cd)
{}

static int goodix_berlin_get_remaining_contacts(struct goodix_berlin_core *cd,
						int n)
{}

static void goodix_berlin_report_state(struct goodix_berlin_core *cd, int n)
{}

static void goodix_berlin_touch_handler(struct goodix_berlin_core *cd)
{}

static int goodix_berlin_request_handle_reset(struct goodix_berlin_core *cd)
{}

static irqreturn_t goodix_berlin_irq(int irq, void *data)
{}

static int goodix_berlin_input_dev_config(struct goodix_berlin_core *cd,
					  const struct input_id *id)
{}

static int goodix_berlin_suspend(struct device *dev)
{}

static int goodix_berlin_resume(struct device *dev)
{}

EXPORT_GPL_SIMPLE_DEV_PM_OPS();

static void goodix_berlin_power_off_act(void *data)
{}

static ssize_t registers_read(struct file *filp, struct kobject *kobj,
			      struct bin_attribute *bin_attr,
			      char *buf, loff_t off, size_t count)
{}

static ssize_t registers_write(struct file *filp, struct kobject *kobj,
			       struct bin_attribute *bin_attr,
			       char *buf, loff_t off, size_t count)
{}

static BIN_ATTR_ADMIN_RW(registers, 0);

static struct bin_attribute *goodix_berlin_bin_attrs[] =;

static const struct attribute_group goodix_berlin_attr_group =;

const struct attribute_group *goodix_berlin_groups[] =;
EXPORT_SYMBOL_GPL();

int goodix_berlin_probe(struct device *dev, int irq, const struct input_id *id,
			struct regmap *regmap)
{}
EXPORT_SYMBOL_GPL();

MODULE_LICENSE();
MODULE_DESCRIPTION();
MODULE_AUTHOR();