#include <linux/kernel.h>
 #include <linux/dmi.h>
 #include <linux/firmware.h>
-#include <linux/gpio/consumer.h>
-#include <linux/i2c.h>
-#include <linux/input.h>
-#include <linux/input/mt.h>
-#include <linux/input/touchscreen.h>
 #include <linux/module.h>
 #include <linux/delay.h>
 #include <linux/irq.h>
 #include <linux/interrupt.h>
-#include <linux/regulator/consumer.h>
 #include <linux/slab.h>
 #include <linux/acpi.h>
 #include <linux/of.h>
 #include <asm/unaligned.h>
+#include "goodix.h"
 
 #define GOODIX_GPIO_INT_NAME           "irq"
 #define GOODIX_GPIO_RST_NAME           "reset"
 #define GOODIX_CONTACT_SIZE            8
 #define GOODIX_MAX_CONTACT_SIZE                9
 #define GOODIX_MAX_CONTACTS            10
-#define GOODIX_MAX_KEYS                        7
 
 #define GOODIX_CONFIG_MIN_LENGTH       186
 #define GOODIX_CONFIG_911_LENGTH       186
 #define GOODIX_CONFIG_967_LENGTH       228
 #define GOODIX_CONFIG_GT9X_LENGTH      240
-#define GOODIX_CONFIG_MAX_LENGTH       240
-
-/* Register defines */
-#define GOODIX_REG_COMMAND             0x8040
-#define GOODIX_CMD_SCREEN_OFF          0x05
-
-#define GOODIX_READ_COOR_ADDR          0x814E
-#define GOODIX_GT1X_REG_CONFIG_DATA    0x8050
-#define GOODIX_GT9X_REG_CONFIG_DATA    0x8047
-#define GOODIX_REG_ID                  0x8140
 
 #define GOODIX_BUFFER_STATUS_READY     BIT(7)
 #define GOODIX_HAVE_KEY                        BIT(4)
 #define ACPI_GPIO_SUPPORT
 #endif
 
-struct goodix_ts_data;
-
-enum goodix_irq_pin_access_method {
-       IRQ_PIN_ACCESS_NONE,
-       IRQ_PIN_ACCESS_GPIO,
-       IRQ_PIN_ACCESS_ACPI_GPIO,
-       IRQ_PIN_ACCESS_ACPI_METHOD,
-};
-
-struct goodix_chip_data {
-       u16 config_addr;
-       int config_len;
-       int (*check_config)(struct goodix_ts_data *ts, const u8 *cfg, int len);
-       void (*calc_config_checksum)(struct goodix_ts_data *ts);
-};
-
 struct goodix_chip_id {
        const char *id;
        const struct goodix_chip_data *data;
 };
 
-#define GOODIX_ID_MAX_LEN      4
-
-struct goodix_ts_data {
-       struct i2c_client *client;
-       struct input_dev *input_dev;
-       const struct goodix_chip_data *chip;
-       struct touchscreen_properties prop;
-       unsigned int max_touch_num;
-       unsigned int int_trigger_type;
-       struct regulator *avdd28;
-       struct regulator *vddio;
-       struct gpio_desc *gpiod_int;
-       struct gpio_desc *gpiod_rst;
-       int gpio_count;
-       int gpio_int_idx;
-       char id[GOODIX_ID_MAX_LEN + 1];
-       u16 version;
-       const char *cfg_name;
-       bool reset_controller_at_probe;
-       bool load_cfg_from_disk;
-       struct completion firmware_loading_complete;
-       unsigned long irq_flags;
-       enum goodix_irq_pin_access_method irq_pin_access_method;
-       unsigned int contact_size;
-       u8 config[GOODIX_CONFIG_MAX_LENGTH];
-       unsigned short keymap[GOODIX_MAX_KEYS];
-};
-
 static int goodix_check_cfg_8(struct goodix_ts_data *ts,
                              const u8 *cfg, int len);
 static int goodix_check_cfg_16(struct goodix_ts_data *ts,
  * @buf: raw write data buffer.
  * @len: length of the buffer to write
  */
-static int goodix_i2c_read(struct i2c_client *client,
-                          u16 reg, u8 *buf, int len)
+int goodix_i2c_read(struct i2c_client *client, u16 reg, u8 *buf, int len)
 {
        struct i2c_msg msgs[2];
        __be16 wbuf = cpu_to_be16(reg);
  * @buf: raw data buffer to write.
  * @len: length of the buffer to write
  */
-static int goodix_i2c_write(struct i2c_client *client, u16 reg, const u8 *buf,
-                           int len)
+int goodix_i2c_write(struct i2c_client *client, u16 reg, const u8 *buf, int len)
 {
        u8 *addr_buf;
        struct i2c_msg msg;
        return ret < 0 ? ret : (ret != 1 ? -EIO : 0);
 }
 
-static int goodix_i2c_write_u8(struct i2c_client *client, u16 reg, u8 value)
+int goodix_i2c_write_u8(struct i2c_client *client, u16 reg, u8 value)
 {
        return goodix_i2c_write(client, reg, &value, sizeof(value));
 }
  * @cfg: config firmware to write to device
  * @len: config data length
  */
-static int goodix_send_cfg(struct goodix_ts_data *ts, const u8 *cfg, int len)
+int goodix_send_cfg(struct goodix_ts_data *ts, const u8 *cfg, int len)
 {
        int error;
 
        return -EINVAL; /* Never reached */
 }
 
-static int goodix_int_sync(struct goodix_ts_data *ts)
+int goodix_int_sync(struct goodix_ts_data *ts)
 {
        int error;
 
 
--- /dev/null
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef __GOODIX_H__
+#define __GOODIX_H__
+
+#include <linux/gpio/consumer.h>
+#include <linux/i2c.h>
+#include <linux/input.h>
+#include <linux/input/mt.h>
+#include <linux/input/touchscreen.h>
+#include <linux/regulator/consumer.h>
+
+/* Register defines */
+#define GOODIX_REG_COMMAND                     0x8040
+#define GOODIX_CMD_SCREEN_OFF                  0x05
+
+#define GOODIX_GT1X_REG_CONFIG_DATA            0x8050
+#define GOODIX_GT9X_REG_CONFIG_DATA            0x8047
+#define GOODIX_REG_ID                          0x8140
+#define GOODIX_READ_COOR_ADDR                  0x814E
+
+#define GOODIX_ID_MAX_LEN                      4
+#define GOODIX_CONFIG_MAX_LENGTH               240
+#define GOODIX_MAX_KEYS                                7
+
+enum goodix_irq_pin_access_method {
+       IRQ_PIN_ACCESS_NONE,
+       IRQ_PIN_ACCESS_GPIO,
+       IRQ_PIN_ACCESS_ACPI_GPIO,
+       IRQ_PIN_ACCESS_ACPI_METHOD,
+};
+
+struct goodix_ts_data;
+
+struct goodix_chip_data {
+       u16 config_addr;
+       int config_len;
+       int (*check_config)(struct goodix_ts_data *ts, const u8 *cfg, int len);
+       void (*calc_config_checksum)(struct goodix_ts_data *ts);
+};
+
+struct goodix_ts_data {
+       struct i2c_client *client;
+       struct input_dev *input_dev;
+       const struct goodix_chip_data *chip;
+       struct touchscreen_properties prop;
+       unsigned int max_touch_num;
+       unsigned int int_trigger_type;
+       struct regulator *avdd28;
+       struct regulator *vddio;
+       struct gpio_desc *gpiod_int;
+       struct gpio_desc *gpiod_rst;
+       int gpio_count;
+       int gpio_int_idx;
+       char id[GOODIX_ID_MAX_LEN + 1];
+       u16 version;
+       const char *cfg_name;
+       bool reset_controller_at_probe;
+       bool load_cfg_from_disk;
+       struct completion firmware_loading_complete;
+       unsigned long irq_flags;
+       enum goodix_irq_pin_access_method irq_pin_access_method;
+       unsigned int contact_size;
+       u8 config[GOODIX_CONFIG_MAX_LENGTH];
+       unsigned short keymap[GOODIX_MAX_KEYS];
+};
+
+int goodix_i2c_read(struct i2c_client *client, u16 reg, u8 *buf, int len);
+int goodix_i2c_write(struct i2c_client *client, u16 reg, const u8 *buf, int len);
+int goodix_i2c_write_u8(struct i2c_client *client, u16 reg, u8 value);
+int goodix_send_cfg(struct goodix_ts_data *ts, const u8 *cfg, int len);
+int goodix_int_sync(struct goodix_ts_data *ts);
+
+#endif