mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-10 22:40:54 -04:00
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:
parent
af6293f942
commit
3ca68e2cf9
5 changed files with 1348 additions and 0 deletions
19
drivers/nfc/sec_nfc/Android.mk
Normal file
19
drivers/nfc/sec_nfc/Android.mk
Normal 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
|
||||
|
||||
14
drivers/nfc/sec_nfc/Kbuild
Normal file
14
drivers/nfc/sec_nfc/Kbuild
Normal 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
|
||||
17
drivers/nfc/sec_nfc/Makefile
Normal file
17
drivers/nfc/sec_nfc/Makefile
Normal 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
|
||||
|
||||
1156
drivers/nfc/sec_nfc/sec_nfc.c
Normal file
1156
drivers/nfc/sec_nfc/sec_nfc.c
Normal file
File diff suppressed because it is too large
Load diff
142
drivers/nfc/sec_nfc/sec_nfc.h
Normal file
142
drivers/nfc/sec_nfc/sec_nfc.h
Normal 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
|
||||
Loading…
Reference in a new issue