fpc1020: Enable fpc class device only for multi fp.

Enable class fingerprint only when multi fingerprint sensor enabled.
Do not change if only has one fingerprint sensor.

Change-Id: I90c85ba3399241d7652f164603cf7f571ab98118
Signed-off-by: haojl2 <haojl2@motorola.com>
Reviewed-on: https://gerrit.mot.com/1356399
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Reviewed-by: Jianqi Yang <yangj@motorola.com>
Submit-Approved: Jira Key
Tested-by: Jira Key
This commit is contained in:
haojl2 2019-05-17 16:02:09 +08:00 • committed by Jialei Hao
commit 3399eeb923
3 changed files with 34 additions and 0 deletions

View file

@ -1,6 +1,10 @@
DLKM_DIR := motorola/kernel/modules
LOCAL_PATH := $(call my-dir)
ifeq ($(BOARD_HAS_MULTI_FPS),true)
KERNEL_CFLAGS += CONFIG_INPUT_MISC_FPC1020_SAVE_TO_CLASS_DEVICE=y
endif
include $(CLEAR_VARS)
LOCAL_MODULE := fpc1020_mmi.ko
LOCAL_MODULE_TAGS := optional

View file

@ -2,6 +2,10 @@
EXTRA_CFLAGS += -Wall
EXTRA_CFLAGS += -I$(TOP)/motorola/kernel/modules/include
ifneq ($(filter m y,$(CONFIG_INPUT_MISC_FPC1020_SAVE_TO_CLASS_DEVICE)),)
EXTRA_CFLAGS += -DCONFIG_INPUT_MISC_FPC1020_SAVE_TO_CLASS_DEVICE
endif
fpc1020_mmi-y += fpc1020_tee.o
obj-m += fpc1020_mmi.o

View file

@ -111,7 +111,9 @@ void FPS_notify(unsigned long stype, int state)
struct fpc1020_data {
struct device *dev;
#ifdef CONFIG_INPUT_MISC_FPC1020_SAVE_TO_CLASS_DEVICE
struct device *class_dev;
#endif
struct platform_device *pdev;
struct notifier_block nb;
int irq_gpio;
@ -153,6 +155,7 @@ static ssize_t irq_cnt_get(struct device *device,
}
static DEVICE_ATTR(irq_cnt, S_IRUSR, irq_cnt_get, NULL);
#ifdef CONFIG_INPUT_MISC_FPC1020_SAVE_TO_CLASS_DEVICE
/* Attribute: vendor (RO) */
static ssize_t vendor_show(struct device *dev,
struct device_attribute *attr, char *buf)
@ -167,13 +170,16 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
return scnprintf(buf, PAGE_SIZE, "fpc1020");
}
static DEVICE_ATTR_RO(modalias);
#endif
static struct attribute *attributes[] = {
&dev_attr_dev_enable.attr,
&dev_attr_irq.attr,
&dev_attr_irq_cnt.attr,
#ifdef CONFIG_INPUT_MISC_FPC1020_SAVE_TO_CLASS_DEVICE
&dev_attr_vendor.attr,
&dev_attr_modalias.attr,
#endif
NULL
};
@ -181,10 +187,12 @@ static const struct attribute_group attribute_group = {
.attrs = attributes,
};
#ifdef CONFIG_INPUT_MISC_FPC1020_SAVE_TO_CLASS_DEVICE
static const struct attribute_group *attribute_groups[] = {
&attribute_group,
NULL
};
#endif
#define MAX_UP_TIME (1 * MSEC_PER_SEC)
@ -195,7 +203,11 @@ static irqreturn_t fpc1020_irq_handler(int irq, void *handle)
pm_wakeup_event(fpc1020->dev, MAX_UP_TIME);
dev_dbg(fpc1020->dev, "%s\n", __func__);
fpc1020->irq_cnt++;
#ifdef CONFIG_INPUT_MISC_FPC1020_SAVE_TO_CLASS_DEVICE
sysfs_notify(&fpc1020->class_dev->kobj, NULL, dev_attr_irq.attr.name);
#else
sysfs_notify(&fpc1020->dev->kobj, NULL, dev_attr_irq.attr.name);
#endif
return IRQ_HANDLED;
}
@ -216,6 +228,7 @@ static int fpc1020_request_named_gpio(struct fpc1020_data *fpc1020,
return 0;
}
#ifdef CONFIG_INPUT_MISC_FPC1020_SAVE_TO_CLASS_DEVICE
#define MAX_INSTANCE 5
#define MAJOR_BASE 32
static int fpc1020_create_sysfs(struct fpc1020_data *fpc1020, bool create) {
@ -260,6 +273,7 @@ CLASS_CREATE_ERR:
ALLOC_REGION:
return rc;
}
#endif
static int fpc1020_probe(struct platform_device *pdev)
{
@ -296,7 +310,11 @@ static int fpc1020_probe(struct platform_device *pdev)
if (rc)
goto exit;
#ifdef CONFIG_INPUT_MISC_FPC1020_SAVE_TO_CLASS_DEVICE
rc = fpc1020_create_sysfs(fpc1020, true);
#else
rc = sysfs_create_group(&dev->kobj, &attribute_group);
#endif
if (rc) {
dev_err(dev, "could not create sysfs\n");
goto exit;
@ -323,7 +341,11 @@ static int fpc1020_probe(struct platform_device *pdev)
return 0;
irq_exit:
#ifdef CONFIG_INPUT_MISC_FPC1020_SAVE_TO_CLASS_DEVICE
fpc1020_create_sysfs(fpc1020, false);
#else
sysfs_remove_group(&pdev->dev.kobj, &attribute_group);
#endif
exit:
return rc;
}
@ -332,7 +354,11 @@ static int fpc1020_remove(struct platform_device *pdev)
{
struct fpc1020_data *fpc1020 = dev_get_drvdata(&pdev->dev);
#ifdef CONFIG_INPUT_MISC_FPC1020_SAVE_TO_CLASS_DEVICE
fpc1020_create_sysfs(fpc1020, false);
#else
sysfs_remove_group(&pdev->dev.kobj, &attribute_group);
#endif
device_init_wakeup(fpc1020->dev, false);
devm_free_irq(fpc1020->dev,gpio_to_irq(fpc1020->irq_gpio),fpc1020);