dlkm: sec_nfc: add samsung nfc driver

Rhode 5G + will use samsung rn4v NFC controller.
Add sec driver for it

Change-Id: I5c88e07953fec45b458d47b803a3afd119ee9f10
Signed-off-by: wuwl10 <wuwl10@motorola.com>
Reviewed-on: https://gerrit.mot.com/2131748
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Ningkai Zhuang <zhuangnk1@lenovo.com>
Reviewed-by: Xu Du <duxu1@motorola.com>
Reviewed-by: Huosheng Liao <liaohs@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
wuwl10 2021-12-01 14:36:38 +08:00 • committed by Weilong Wu
commit 3ca68e2cf9
5 changed files with 1348 additions and 0 deletions

View file

@ -0,0 +1,19 @@
DLKM_DIR := motorola/kernel/modules
LOCAL_PATH := $(call my-dir)
ifeq ($(SEC_NFC_PRODUCT_N3), true)
KERNEL_CFLAGS += CONFIG_SEC_NFC_PRODUCT_N3=y
else
KERNEL_CFLAGS += CONFIG_SEC_NFC_PRODUCT_N5=y
endif
KERNEL_CFLAGS += CONFIG_SEC_NFC_PRODUCT_N5=y
KERNEL_CFLAGS += CONFIG_SEC_NFC_IF_I2C=y
include $(CLEAR_VARS)
LOCAL_MODULE := sec_nfc.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
LOCAL_ADDITIONAL_DEPENDENCIES := $(KERNEL_MODULES_OUT)/mmi_info.ko
include $(DLKM_DIR)/AndroidKernelModule.mk

View file

@ -0,0 +1,14 @@
# add -Wall to try to catch everything we can.
EXTRA_CFLAGS += -Wall
EXTRA_CFLAGS += -I$(ANDROID_BUILD_TOP)/motorola/kernel/modules/include
ifneq ($(filter m y,$(CONFIG_SEC_NFC_PRODUCT_N5)),)
EXTRA_CFLAGS += -DCONFIG_SEC_NFC_PRODUCT_N5
endif
ifneq ($(filter m y,$(CONFIG_SEC_NFC_IF_I2C)),)
EXTRA_CFLAGS += -DCONFIG_SEC_NFC_IF_I2C
endif
obj-m += sec_nfc.o
KBUILD_EXTRA_SYMBOLS += $(CURDIR)/$(KBUILD_EXTMOD)/../../mmi_info/Module.symvers

View file

@ -0,0 +1,17 @@
all: modules
modules:
$(MAKE) -C $(KERNEL_SRC) M=$(M) modules $(KBUILD_OPTIONS)
modules_install:
$(MAKE) INSTALL_MOD_STRIP=1 -C $(KERNEL_SRC) M=$(M) modules_install
%:
$(MAKE) -C $(KERNEL_SRC) M=$(M) $@ $(KBUILD_OPTIONS)
clean:
rm -f *.o *.ko *.mod.c *.mod.o *~ .*.cmd Module.symvers
rm -rf .tmp_versions
KBUILD_EXTRA_SYMBOLS := $(M)/../../mmi_info/Module.symvers

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,142 @@
/*
* SAMSUNG NFC Controller
*
* Copyright (C) 2013 Samsung Electronics Co.Ltd
* Author: Woonki Lee <woonki84.lee@samsung.com>
* Author: Heejae Kim <heejae12.kim@samsung.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* Last update: 2016-01-14
*/
#include <linux/platform_device.h>
#ifdef CONFIG_SEC_NFC_GPIO_CLK
#include <linux/clk.h>
#endif
#ifdef CONFIG_SEC_NFC_PMIC_LDO
#include <linux/regulator/consumer.h>
#include <linux/err.h>
#endif
#ifdef CONFIG_SEC_NFC_I2C /* support old driver configuration */
#ifndef CONFIG_SEC_NFC
#define CONFIG_SEC_NFC
#endif
#if !defined(CONFIG_SEC_NFC_IF_I2C) && !defined(CONFIG_SEC_NFC_IF_UART)
#define CONFIG_SEC_NFC_IF_I2C
#endif
#if !defined(CONFIG_SEC_NFC_PRODUCT_N3) && !defined(CONFIG_SEC_NFC_PRODUCT_N5)
#define CONFIG_SEC_NFC_PRODUCT_N5
#endif
#endif /* CONFIG_SEC_NFC_I2C */
#define SEC_NFC_DRIVER_NAME "sec-nfc"
#define SEC_NFC_MAX_BUFFER_SIZE 512
/* ioctl */
#define SEC_NFC_MAGIC 'S'
#define SEC_NFC_GET_MODE _IOW(SEC_NFC_MAGIC, 0, unsigned int)
#define SEC_NFC_SET_MODE _IOW(SEC_NFC_MAGIC, 1, unsigned int)
#define SEC_NFC_SLEEP _IOW(SEC_NFC_MAGIC, 2, unsigned int)
#define SEC_NFC_WAKEUP _IOW(SEC_NFC_MAGIC, 3, unsigned int)
#ifdef CONFIG_SEC_ESE_COLDRESET
#define SEC_NFC_COLD_RESET _IOW(SEC_NFC_MAGIC, 5, unsigned int)
#define SEC_NFC_SHUTDOWN _IOW(SEC_NFC_MAGIC, 6, unsigned int)
#endif
/* size */
#define SEC_NFC_MSG_MAX_SIZE (256 + 4)
/* wait for device stable */
#ifdef CONFIG_SEC_NFC_MARGINTIME
#define SEC_NFC_VEN_WAIT_TIME (150)
#else
#define SEC_NFC_VEN_WAIT_TIME (20)
#endif
/* gpio pin configuration */
struct sec_nfc_platform_data {
int irq;
int ven;
int firm;
int wake;
int pvdd_en;
unsigned int tvdd;
unsigned int avdd;
#ifdef CONFIG_SEC_ESE_COLDRESET
unsigned int coldreset;
#endif
#ifdef CONFIG_SEC_NFC_GPIO_CLK
unsigned int clk_req;
struct clk *clk;
#endif
void (*cfg_gpio)(void);
u32 ven_gpio_flags;
u32 firm_gpio_flags;
u32 irq_gpio_flags;
const char *nfc_pvdd;
#ifdef CONFIG_SEC_NFC_PMIC_LDO
const char *pvdd_regulator_name;
struct regulator *pvdd_regulator;
#endif
#ifdef CONFIG_SEC_NFC_DEDICATED_CLK
phys_addr_t clkctrl_addr;
#endif
};
enum sec_nfc_mode {
SEC_NFC_MODE_OFF = 0,
SEC_NFC_MODE_FIRMWARE,
SEC_NFC_MODE_BOOTLOADER,
SEC_NFC_MODE_COUNT,
};
#ifdef CONFIG_SEC_NFC_PRODUCT_N3
enum sec_nfc_power {
SEC_NFC_PW_OFF = 0,
SEC_NFC_PW_ON,
};
#else /* CONFIG_SEC_NFC_PRODUCT_N3 */
enum sec_nfc_power {
SEC_NFC_PW_ON = 0,
SEC_NFC_PW_OFF,
};
#endif
enum sec_nfc_firmpin {
SEC_NFC_FW_OFF = 0,
SEC_NFC_FW_ON,
};
enum sec_nfc_wake {
SEC_NFC_WAKE_SLEEP = 0,
SEC_NFC_WAKE_UP,
};
#ifdef CONFIG_SEC_ESE_COLDRESET
enum sec_nfc_coldreset{
SEC_NFC_COLDRESET_OFF = 0,
SEC_NFC_COLDRESET_ON,
};
#define FIRMWARE_GUARD_TIME (4)
#define DEVICEHOST_ID (0x00)
#define ESE_ID (0x02)
#define IDX_SLEEP_WAKEUP_NFC 0
#define IDX_SLEEP_WAKEUP_ESE 1
#endif
bool is_charging_mode;
#define NFC_I2C_LDO_ON 1
#define NFC_I2C_LDO_OFF 0