123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- /*
- * Copyright (C) 2012, Samsung Electronics Co. Ltd. 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 as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- */
- #include "../ssp.h"
- #define VENDOR "MAXIM"
- #define CHIP_ID "MAX88920"
- static ssize_t gestrue_vendor_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- return snprintf(buf, PAGE_SIZE, "%s\n", VENDOR);
- }
- static ssize_t gestrue_name_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- return snprintf(buf, PAGE_SIZE, "%s\n", CHIP_ID);
- }
- static ssize_t raw_data_read(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- struct ssp_data *data = dev_get_drvdata(dev);
- return snprintf(buf, PAGE_SIZE, "%d,%d,%d,%d\n",
- data->buf[GESTURE_SENSOR].data[0],
- data->buf[GESTURE_SENSOR].data[1],
- data->buf[GESTURE_SENSOR].data[2],
- data->buf[GESTURE_SENSOR].data[3]);
- }
- static ssize_t gesture_get_selftest_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- s16 raw_A = 0, raw_B = 0, raw_C = 0, raw_D = 0;
- int iDelayCnt = 0, iRet = 0;
- char chTempBuf[2] = { 0, 10 };
- struct ssp_data *data = dev_get_drvdata(dev);
- iDelayCnt = 0;
- data->uFactorydataReady = 0;
- memset(data->uFactorydata, 0, sizeof(char) * FACTORY_DATA_MAX);
- iRet = send_instruction(data, FACTORY_MODE, GESTURE_FACTORY,
- chTempBuf, 2);
- while (!(data->uFactorydataReady & (1 << GESTURE_FACTORY))
- && (iDelayCnt++ < 100)
- && (iRet == SUCCESS))
- msleep(20);
- if ((iDelayCnt >= 100) || (iRet != SUCCESS)) {
- pr_err("[SSP]: %s - Gesture Selftest Timeout!!\n", __func__);
- goto exit;
- }
- raw_A = data->uFactorydata[0];
- raw_B = data->uFactorydata[1];
- raw_C = data->uFactorydata[2];
- raw_D = data->uFactorydata[3];
- pr_info("[SSP] %s: self test A = %d, B = %d, C = %d, D = %d\n",
- __func__, raw_A, raw_B, raw_C, raw_D);
- exit:
- return sprintf(buf, "%d,%d,%d,%d\n",
- raw_A, raw_B, raw_C, raw_D);
- }
- static ssize_t ir_current_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- struct ssp_data *data = dev_get_drvdata(dev);
- ssp_dbg("[SSP]: %s - Ir_Current Setting = %d\n",
- __func__, data->uIr_Current);
- return sprintf(buf, "%d\n", data->uIr_Current);
- }
- static ssize_t ir_current_store(struct device *dev,
- struct device_attribute *attr, const char *buf, size_t size)
- {
- u16 uNewIrCurrent = DEFUALT_IR_CURRENT;
- int iRet = 0;
- u16 current_index = 0;
- struct ssp_data *data = dev_get_drvdata(dev);
- static u16 set_current[2][16] = { {0, 25, 50, 75, 100, 125, 150, 175, 225, 250, 275, 300, 325, 350, 375, 400},
- {2, 28, 34, 50, 66, 82, 98, 114, 130, 146, 162, 178, 194, 210, 226, 242} };
- iRet = kstrtou16(buf, 10, &uNewIrCurrent);
- if (iRet < 0)
- pr_err("[SSP]: %s - kstrtoint failed.(%d)\n", __func__, iRet);
- else {
- for(current_index = 0; current_index < 16; current_index++) {
- if (set_current[0][current_index] == uNewIrCurrent) {
- data->uIr_Current = set_current[1][current_index];
- }
- }
- set_gesture_current(data, data->uIr_Current);
- data->uIr_Current = uNewIrCurrent;
- }
- ssp_dbg("[SSP]: %s - new Ir_Current Setting : %d\n",
- __func__, data->uIr_Current);
- return size;
- }
- static DEVICE_ATTR(vendor, S_IRUGO, gestrue_vendor_show, NULL);
- static DEVICE_ATTR(name, S_IRUGO, gestrue_name_show, NULL);
- static DEVICE_ATTR(raw_data, S_IRUGO, raw_data_read, NULL);
- static DEVICE_ATTR(selftest, S_IRUGO, gesture_get_selftest_show, NULL);
- static DEVICE_ATTR(ir_current, S_IRUGO | S_IWUSR | S_IWGRP,
- ir_current_show, ir_current_store);
- static struct device_attribute *gesture_attrs[] = {
- &dev_attr_vendor,
- &dev_attr_name,
- &dev_attr_raw_data,
- &dev_attr_selftest,
- &dev_attr_ir_current,
- NULL,
- };
- void initialize_gesture_factorytest(struct ssp_data *data)
- {
- sensors_register(data->ges_device, data,
- gesture_attrs, "gesture_sensor");
- }
- void remove_gesture_factorytest(struct ssp_data *data)
- {
- sensors_unregister(data->ges_device, gesture_attrs);
- }
|