| /* |
| * Copyright (C) 2018 Semtech Corporation. All rights reserved. |
| * |
| * Copyright (C) 2013 Samsung Electronics. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License |
| * version 2 as published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, but |
| * WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA |
| * 02110-1301 USA |
| */ |
| #ifndef _SX9360_I2C_SUB_REG_H_ |
| #define _SX9360_I2C_SUB_REG_H_ |
| |
| /* |
| * I2C Registers |
| */ |
| enum registers1 { |
| SX9360_IRQSTAT_REG = 0x00, |
| SX9360_STAT_REG, |
| SX9360_IRQ_ENABLE_REG, |
| SX9360_IRQCFG_REG, |
| /* General Control */ |
| SX9360_GNRLCTRL0_REG = 0x10, |
| SX9360_GNRLCTRL1_REG, |
| SX9360_GNRLCTRL2_REG, |
| /* Analog-Front-End (AFE) Control */ |
| SX9360_AFECTRL1_REG = 0x21, |
| SX9360_AFEPARAM0PHR_REG, |
| SX9360_AFEPARAM1PHR_REG, |
| SX9360_AFEPARAM0PHM_REG, |
| SX9360_AFEPARAM1PHM_REG, |
| /* PROX Data update */ |
| SX9360_PROXCTRL0PHR_REG = 0x40, |
| SX9360_PROXCTRL0PHM_REG, |
| SX9360_PROXCTRL1_REG, |
| SX9360_PROXCTRL2_REG, |
| SX9360_PROXCTRL3_REG, |
| SX9360_PROXCTRL4_REG, |
| SX9360_PROXCTRL5_REG, |
| /* Reference sensor correction */ |
| SX9360_REFCORR0_REG = 0x60, |
| SX9360_REFCORR1_REG, |
| /* USE Filter - Main phase only */ |
| SX9360_USEFILTER0_REG =0x70, |
| SX9360_USEFILTER1_REG, |
| SX9360_USEFILTER2_REG, |
| SX9360_USEFILTER3_REG, |
| SX9360_USEFILTER4_REG, |
| /* Sensor Data Readback */ |
| SX9360_REGUSEMSBPHR = 0x90, |
| SX9360_REGUSELSBPHR, |
| SX9360_REGOFFSETMSBPHR, |
| SX9360_REGOFFSETLSBPHR, |
| SX9360_REGUSEMSBPHM, |
| SX9360_REGUSELSBPHM, |
| SX9360_REGAVGMSBPHM, |
| SX9360_REGAVGLSBPHM, |
| SX9360_REGDIFFMSBPHM, |
| SX9360_REGDIFFLSBPHM, |
| SX9360_REGOFFSETMSBPHM, |
| SX9360_REGOFFSETLSBPHM, |
| /*DeltaVar value of USE filter */ |
| SX9360_USEFILTMSB = 0x9E, |
| SX9360_USEFILTLSB, |
| /* Miscellaneous */ |
| SX9360_SOFTRESET_REG = 0xCF, |
| SX9360_WHOAMI_REG = 0xFA, |
| SX9360_REV_REG = 0xFE, |
| }; |
| |
| /* IrqStat 0:Inactive 1:Active */ |
| #define SX9360_IRQSTAT_RESET_FLAG 0x10 |
| #define SX9360_IRQSTAT_TOUCH_FLAG 0x08 |
| #define SX9360_IRQSTAT_RELEASE_FLAG 0x04 |
| #define SX9360_IRQSTAT_COMPDONE_FLAG 0x02 |
| #define SX9360_IRQSTAT_CONV_FLAG 0x01 |
| |
| /* CpsStat */ |
| #define SX9360_STAT_PROXSTAT_FLAG 0x08 |
| |
| /* SoftReset */ |
| #define SX9360_SOFTRESET 0xDE |
| |
| /* Manual Compensation */ |
| #define SX9360_STAT_COMPSTAT_PHM 0x04 |
| #define SX9360_STAT_COMPSTAT_PHR 0x02 |
| #define SX9360_STAT_COMPSTAT_ALL_FLAG ( SX9360_STAT_COMPSTAT_PHM | SX9360_STAT_COMPSTAT_PHR ) |
| |
| /* Who Am I */ |
| #define WHO_AM_I 96 // 0x60 |
| |
| struct smtc_reg_data { |
| unsigned char reg; |
| unsigned char val; |
| }; |
| |
| enum { |
| SX9360_REFRESOLUTION_REG_IDX = 4, |
| SX9360_REFAGAINFREQ_REG_IDX = 5, |
| SX9360_RESOLUTION_REG_IDX = 6, |
| SX9360_AGAINFREQ_REG_IDX = 7, |
| SX9360_REFGAINRAWFILT_REG_IDX = 8, |
| SX9360_GAINRAWFILT_REG_IDX = 9, |
| SX9360_HYST_REG_IDX = 13, |
| SX9360_PROXTHRESH_REG_IDX = 14, |
| }; |
| |
| /* for device tree parse */ |
| #define SX9360_REFRESOLUTION "sx9360,refresolution_reg" |
| #define SX9360_REFAGAINFREQ "sx9360,refagainfreq_reg" |
| #define SX9360_RESOLUTION "sx9360,resolution_reg" |
| #define SX9360_AGAINFREQ "sx9360,againfreq_reg" |
| #define SX9360_REFGAINRAWFILT "sx9360,refgainrawfilt_reg" |
| #define SX9360_GAINRAWFILT "sx9360,gainrawfilt_reg" |
| #define SX9360_HYST "sx9360,hyst_reg" |
| #define SX9360_PROXTHRESH "sx9360,proxthresh_reg" |
| |
| /*define the value without Phase enable settings for easy changes in driver*/ |
| #define SX9360_GNRLCTRL0_VAL_PHOFF (0x00) |
| static struct smtc_reg_data setup_reg[] = { |
| /* 0x10~0x12, General Control*/ |
| { |
| .reg = SX9360_GNRLCTRL0_REG, |
| .val = SX9360_GNRLCTRL0_VAL_PHOFF | 0x02,//not user reference sensor |
| }, |
| { |
| .reg = SX9360_GNRLCTRL1_REG, |
| .val = 0x00, |
| }, |
| { |
| .reg = SX9360_GNRLCTRL2_REG, |
| .val = 0x32, |
| }, |
| /* 0x21~0x25, Analog-Front-End (AFE) Control */ |
| { |
| .reg = SX9360_AFECTRL1_REG, |
| .val = 0x00, |
| }, |
| { |
| .reg = SX9360_AFEPARAM0PHR_REG, |
| .val = 0x0E, //Resolution=512 |
| }, |
| { |
| .reg = SX9360_AFEPARAM1PHR_REG, |
| .val = 0x46, |
| }, |
| { |
| .reg = SX9360_AFEPARAM0PHM_REG, |
| .val = 0x0E, //Resolution=512 |
| }, |
| { |
| .reg = SX9360_AFEPARAM1PHM_REG, |
| .val = 0x46, |
| }, |
| /* 0x40~0x46, PROX Data update */ |
| { |
| .reg = SX9360_PROXCTRL0PHR_REG, |
| .val = 0x09, |
| }, |
| { |
| .reg = SX9360_PROXCTRL0PHM_REG, |
| .val = 0x09, |
| }, |
| { |
| .reg = SX9360_PROXCTRL1_REG, |
| .val = 0x20, |
| }, |
| { |
| .reg = SX9360_PROXCTRL2_REG, |
| .val = 0x60, |
| }, |
| { |
| .reg = SX9360_PROXCTRL3_REG, |
| .val = 0x0C, |
| }, |
| { |
| .reg = SX9360_PROXCTRL4_REG, |
| .val = 0x00, |
| }, |
| { |
| .reg = SX9360_PROXCTRL5_REG, |
| .val = 0x7E, //Threshold=7938 |
| }, |
| /* 0x60~0x61, Reference sensor correction */ |
| { |
| .reg = SX9360_REFCORR0_REG, |
| .val = 0x00, |
| }, |
| { |
| .reg = SX9360_REFCORR1_REG, |
| .val = 0x00, |
| }, |
| /* 0x70~0x74, USE Filter - Main phase only */ |
| { |
| .reg = SX9360_USEFILTER0_REG, |
| .val = 0x00, |
| }, |
| { |
| .reg = SX9360_USEFILTER1_REG, |
| .val = 0x00, |
| }, |
| { |
| .reg = SX9360_USEFILTER2_REG, |
| .val = 0x00, |
| }, |
| { |
| .reg = SX9360_USEFILTER3_REG, |
| .val = 0x00, |
| }, |
| { |
| .reg = SX9360_USEFILTER4_REG, |
| .val = 0x00, |
| }, |
| /* 0x02~0x03, Interrupt */ |
| { |
| .reg = SX9360_IRQ_ENABLE_REG, |
| .val = 0x00, |
| }, |
| { |
| .reg = SX9360_IRQCFG_REG, |
| .val = 0x00, |
| }, |
| }; |
| |
| enum { |
| OFF = 0, |
| ON = 1 |
| }; |
| |
| extern int sensors_create_symlink(struct input_dev *inputdev); |
| extern void sensors_remove_symlink(struct input_dev *inputdev); |
| extern int sensors_register(struct device *dev, void *drvdata, |
| struct device_attribute *attributes[], char *name); |
| extern void sensors_unregister(struct device *dev, |
| struct device_attribute *attributes[]); |
| |
| #endif /* _SX9360_I2C_REG_H_*/ |