nanohub: remove stale code

Change-Id: Ic888ea7339d4a9db500bc4edf5eb981e8f6e8a86
diff --git a/firmware/src/drivers/synaptics_s3708/synaptics_s3708.c b/firmware/src/drivers/synaptics_s3708/synaptics_s3708.c
deleted file mode 100644
index 79b6a0f..0000000
--- a/firmware/src/drivers/synaptics_s3708/synaptics_s3708.c
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <errno.h>
-#include <float.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <eventnums.h>
-#include <gpio.h>
-#include <heap.h>
-#include <hostIntf.h>
-#include <isr.h>
-#include <i2c.h>
-#include <nanohubPacket.h>
-#include <sensors.h>
-#include <seos.h>
-#include <timer.h>
-#include <util.h>
-
-#include <plat/inc/exti.h>
-#include <plat/inc/gpio.h>
-#include <plat/inc/syscfg.h>
-
-#define S3708_APP_ID                APP_ID_MAKE(APP_ID_VENDOR_GOOGLE, 13)
-#define S3708_APP_VERSION           1
-
-#define I2C_BUS_ID                  0
-#define I2C_SPEED                   400000
-#define I2C_ADDR                    0x20
-
-#define S3708_ID                    0x34
-
-#define S3708_REG_PAGE_SELECT       0xFF
-
-#define S3708_REG_F01_DATA_BASE     0x06
-#define S3708_INT_STATUS_LPWG       0x04
-
-#define S3708_REG_DATA_BASE         0x08
-#define S3708_REG_DATA_4_OFFSET     0x02
-#define S3708_INT_STATUS_DOUBLE_TAP 0x03
-
-#define S3708_REG_F01_CTRL_BASE     0x14
-#define S3708_NORMAL_MODE           0x00
-#define S3708_SLEEP_MODE            0x01
-
-#define S3708_REG_CTRL_BASE         0x1b
-#define S3708_REG_CTRL_20_OFFSET    0x07
-#define S3708_REPORT_MODE_CONT      0x00
-#define S3708_REPORT_MODE_LPWG      0x02
-
-#define S3708_REG_PDT_BASE          0xee
-
-#define MAX_PENDING_I2C_REQUESTS    4
-#define MAX_I2C_TRANSFER_SIZE       8
-#define MAX_I2C_RETRY_DELAY         250000000ull // 250 milliseconds
-#define MAX_I2C_RETRY_COUNT         (15000000000ull / MAX_I2C_RETRY_DELAY) // 15 seconds
-#define HACK_RETRY_SKIP_COUNT       1
-
-#define ENABLE_DEBUG 0
-
-#define INFO_PRINT(fmt, ...) osLog(LOG_INFO, "[S3708] " fmt, ##__VA_ARGS__)
-#define ERROR_PRINT(fmt, ...) osLog(LOG_ERROR, "[S3708] " fmt, ##__VA_ARGS__)
-#if ENABLE_DEBUG
-#define DEBUG_PRINT(fmt, ...) INFO_PRINT(fmt, ##__VA_ARGS__)
-#else
-#define DEBUG_PRINT(fmt, ...) ((void)0)
-#endif
-
-
-#ifndef TOUCH_PIN
-#error "TOUCH_PIN is not defined; please define in variant.h"
-#endif
-
-#ifndef TOUCH_IRQ
-#error "TOUCH_IRQ is not defined; please define in variant.h"
-#endif
-
-enum SensorEvents
-{
-    EVT_SENSOR_I2C = EVT_APP_START + 1,
-    EVT_SENSOR_TOUCH_INTERRUPT,
-    EVT_SENSOR_RETRY_TIMER,
-};
-
-enum TaskState
-{
-    STATE_ENABLE_0,
-    STATE_ENABLE_1,
-    STATE_ENABLE_2,
-    STATE_DISABLE_0,
-    STATE_INT_HANDLE_0,
-    STATE_INT_HANDLE_1,
-    STATE_IDLE,
-    STATE_CANCELLED,
-};
-
-struct I2cTransfer
-{
-    uint8_t txrxBuf[MAX_I2C_TRANSFER_SIZE];
-    uint8_t state;
-    bool inUse;
-};
-
-static struct TaskStruct
-{
-    struct Gpio *pin;
-    struct ChainedIsr isr;
-    uint32_t id;
-    uint32_t handle;
-    uint32_t retryTimerHandle;
-    uint32_t retryCnt;
-    struct I2cTransfer transfers[MAX_PENDING_I2C_REQUESTS];
-    bool on;
-} mTask;
-
-static inline void enableInterrupt(bool enable)
-{
-    if (enable) {
-        extiEnableIntGpio(mTask.pin, EXTI_TRIGGER_FALLING);
-        extiChainIsr(TOUCH_IRQ, &mTask.isr);
-    } else {
-        extiUnchainIsr(TOUCH_IRQ, &mTask.isr);
-        extiDisableIntGpio(mTask.pin);
-    }
-}
-
-static bool touchIsr(struct ChainedIsr *localIsr)
-{
-    struct TaskStruct *data = container_of(localIsr, struct TaskStruct, isr);
-
-    if (!extiIsPendingGpio(data->pin)) {
-        return false;
-    }
-
-    osEnqueuePrivateEvt(EVT_SENSOR_TOUCH_INTERRUPT, NULL, NULL, data->id);
-
-    extiClearPendingGpio(data->pin);
-
-    return true;
-}
-
-static void i2cCallback(void *cookie, size_t tx, size_t rx, int err)
-{
-    if (err == 0) {
-        osEnqueuePrivateEvt(EVT_SENSOR_I2C, cookie, NULL, mTask.id);
-    } else {
-        ERROR_PRINT("I2C error (%d)", err);
-    }
-}
-
-static void retryTimerCallback(uint32_t timerId, void *cookie)
-{
-    osEnqueuePrivateEvt(EVT_SENSOR_RETRY_TIMER, cookie, NULL, mTask.id);
-}
-
-// Allocate a buffer and mark it as in use with the given state, or return NULL
-// if no buffers available. Must *not* be called from interrupt context.
-static struct I2cTransfer *allocXfer(uint8_t state)
-{
-    size_t i;
-
-    for (i = 0; i < ARRAY_SIZE(mTask.transfers); i++) {
-        if (!mTask.transfers[i].inUse) {
-            mTask.transfers[i].inUse = true;
-            mTask.transfers[i].state = state;
-            memset(mTask.transfers[i].txrxBuf, 0x00, sizeof(mTask.transfers[i].txrxBuf));
-            return &mTask.transfers[i];
-        }
-    }
-
-    ERROR_PRINT("Ran out of I2C buffers!");
-    return NULL;
-}
-
-// Helper function to initiate the I2C transfer. Returns true is the transaction
-// was successfully register by I2C driver. Otherwise, returns false.
-static bool performXfer(struct I2cTransfer *xfer, size_t txBytes, size_t rxBytes)
-{
-    int ret;
-
-    if ((txBytes > MAX_I2C_TRANSFER_SIZE) || (rxBytes > MAX_I2C_TRANSFER_SIZE)) {
-        ERROR_PRINT("txBytes and rxBytes must be less than %d", MAX_I2C_TRANSFER_SIZE);
-        return false;
-    }
-
-    if (rxBytes) {
-        ret = i2cMasterTxRx(I2C_BUS_ID, I2C_ADDR, xfer->txrxBuf, txBytes, xfer->txrxBuf, rxBytes, i2cCallback, xfer);
-    } else {
-        ret = i2cMasterTx(I2C_BUS_ID, I2C_ADDR, xfer->txrxBuf, txBytes, i2cCallback, xfer);
-    }
-
-    if (ret != 0) {
-        ERROR_PRINT("I2C transfer was not successful (error %d)!", ret);
-    }
-
-    return (ret == 0);
-}
-
-// Helper function to write a one byte register. Returns true if we got a
-// successful return value from i2cMasterTx().
-static bool writeRegister(uint8_t reg, uint8_t value, uint8_t state)
-{
-    struct I2cTransfer *xfer = allocXfer(state);
-
-    if (xfer != NULL) {
-        xfer->txrxBuf[0] = reg;
-        xfer->txrxBuf[1] = value;
-        return performXfer(xfer, 2, 0);
-    }
-
-    return false;
-}
-
-static bool setSleepEnable(bool enable, uint8_t state)
-{
-    return writeRegister(S3708_REG_F01_CTRL_BASE, enable ? S3708_SLEEP_MODE : S3708_NORMAL_MODE, state);
-}
-
-static bool setReportingMode(uint8_t mode, uint8_t state)
-{
-    struct I2cTransfer *xfer;
-
-    xfer = allocXfer(state);
-    if (xfer != NULL) {
-        xfer->txrxBuf[0] = S3708_REG_CTRL_BASE + S3708_REG_CTRL_20_OFFSET;
-        xfer->txrxBuf[1] = 0x00;
-        xfer->txrxBuf[2] = 0x00;
-        xfer->txrxBuf[3] = mode;
-        return performXfer(xfer, 4, 0);
-    }
-
-    return false;
-}
-
-static bool callbackPower(bool on, void *cookie)
-{
-    bool ret;
-    size_t i;
-
-    INFO_PRINT("enable %d", on);
-
-    // Cancel any pending I2C transactions by changing the callback state
-    for (i = 0; i < ARRAY_SIZE(mTask.transfers); i++) {
-        if (mTask.transfers[i].inUse) {
-            mTask.transfers[i].state = STATE_CANCELLED;
-        }
-    }
-
-    if (on) {
-        mTask.retryCnt = 0;
-
-        // Set page number to 0x00
-        ret = writeRegister(S3708_REG_PAGE_SELECT, 0x00, STATE_ENABLE_0);
-    } else {
-        // Cancel any pending retries
-        if (mTask.retryTimerHandle) {
-            timTimerCancel(mTask.retryTimerHandle);
-            mTask.retryTimerHandle = 0;
-        }
-
-        // Reset to continuous reporting mode
-        ret = setReportingMode(S3708_REPORT_MODE_CONT, STATE_DISABLE_0);
-    }
-
-    if (ret) {
-        mTask.on = on;
-        enableInterrupt(mTask.on);
-        sensorSignalInternalEvt(mTask.handle, SENSOR_INTERNAL_EVT_POWER_STATE_CHG, mTask.on, 0);
-    }
-
-    return ret;
-}
-
-static bool callbackFirmwareUpload(void *cookie)
-{
-    return sensorSignalInternalEvt(mTask.handle, SENSOR_INTERNAL_EVT_FW_STATE_CHG, 1, 0);
-}
-
-static bool callbackSetRate(uint32_t rate, uint64_t latency, void *cookie)
-{
-    return sensorSignalInternalEvt(mTask.handle, SENSOR_INTERNAL_EVT_RATE_CHG, rate, latency);
-}
-
-static bool callbackFlush(void *cookie)
-{
-    return osEnqueueEvt(sensorGetMyEventType(SENS_TYPE_DOUBLE_TOUCH), SENSOR_DATA_EVENT_FLUSH, NULL);
-}
-
-static const struct SensorInfo mSensorInfo = {
-    .sensorName = "Double Touch",
-    .sensorType = SENS_TYPE_DOUBLE_TOUCH,
-    .numAxis = NUM_AXIS_EMBEDDED,
-    .interrupt = NANOHUB_INT_WAKEUP,
-    .minSamples = 20,
-    .flags1 = SENSOR_INFO_FLAGS1_LOCAL_ONLY
-};
-
-static const struct SensorOps mSensorOps =
-{
-    .sensorPower = callbackPower,
-    .sensorFirmwareUpload = callbackFirmwareUpload,
-    .sensorSetRate = callbackSetRate,
-    .sensorFlush = callbackFlush,
-};
-
-static void handleI2cEvent(struct I2cTransfer *xfer)
-{
-    struct I2cTransfer *nextXfer;
-    union EmbeddedDataPoint sample;
-
-    switch (xfer->state) {
-        case STATE_ENABLE_0:
-            // Disable sleep
-            setSleepEnable(false, STATE_ENABLE_1);
-            break;
-
-        case STATE_ENABLE_1:
-            // Verify that we can talk to the chip
-            nextXfer = allocXfer(STATE_ENABLE_2);
-            if (nextXfer != NULL) {
-                nextXfer->txrxBuf[0] = S3708_REG_PDT_BASE;
-                performXfer(nextXfer, 1, 1);
-            }
-            break;
-
-        case STATE_ENABLE_2:
-            DEBUG_PRINT("ID: 0x%02x", xfer->txrxBuf[0]);
-
-            // HACK: DozeService reactivates pickup gesture before the screen
-            // comes on, so we need to wait for some time after enabling before
-            // trying to talk to touch controller. We may see the touch
-            // controller on the first few samples and then have communication
-            // switched off. So, wait HACK_RETRY_SKIP_COUNT samples before we
-            // consider the transaction.
-            if ((mTask.retryCnt < HACK_RETRY_SKIP_COUNT) || (xfer->txrxBuf[0] != S3708_ID)) {
-                mTask.retryCnt++;
-                if (mTask.retryCnt < MAX_I2C_RETRY_COUNT) {
-                    mTask.retryTimerHandle = timTimerSet(MAX_I2C_RETRY_DELAY, 0, 50, retryTimerCallback, NULL, true);
-                    if (!mTask.retryTimerHandle) {
-                        ERROR_PRINT("failed to allocate timer");
-                    }
-                } else {
-                    ERROR_PRINT("could not communicate with touch controller");
-                }
-            } else {
-                // Set reporting control to lpwg mode
-                setReportingMode(S3708_REPORT_MODE_LPWG, STATE_IDLE);
-            }
-            break;
-
-        case STATE_DISABLE_0:
-            // Enable sleep
-            setSleepEnable(true, STATE_IDLE);
-            break;
-
-        case STATE_INT_HANDLE_0:
-            // If the interrupt was from the LPWG function, read the function interrupt status register
-            if (xfer->txrxBuf[1] & S3708_INT_STATUS_LPWG) {
-                nextXfer = allocXfer(STATE_INT_HANDLE_1);
-                if (nextXfer != NULL) {
-                    nextXfer->txrxBuf[0] = S3708_REG_DATA_BASE + S3708_REG_DATA_4_OFFSET;
-                    performXfer(nextXfer, 1, 5);
-                }
-            }
-            break;
-
-        case STATE_INT_HANDLE_1:
-            // Verify the LPWG interrupt status
-            if (xfer->txrxBuf[0] & S3708_INT_STATUS_DOUBLE_TAP) {
-                DEBUG_PRINT("Sending event");
-                sample.idata = 1;
-                osEnqueueEvt(sensorGetMyEventType(SENS_TYPE_DOUBLE_TOUCH), sample.vptr, NULL);
-            }
-            break;
-
-        default:
-            break;
-    }
-
-    xfer->inUse = false;
-}
-
-static void handleEvent(uint32_t evtType, const void* evtData)
-{
-    struct I2cTransfer *xfer;
-    int ret;
-
-    switch (evtType) {
-        case EVT_APP_START:
-            osEventUnsubscribe(mTask.id, EVT_APP_START);
-            ret = i2cMasterRequest(I2C_BUS_ID, I2C_SPEED);
-            // Since the i2c bus can be shared with other drivers, it is
-            // possible that one of the other drivers requested the bus first.
-            // Therefore, either 0 or -EBUSY is an acceptable return.
-            if ((ret < 0) && (ret != -EBUSY)) {
-                ERROR_PRINT("i2cMasterRequest() failed!");
-            }
-            sensorRegisterInitComplete(mTask.handle);
-            break;
-
-        case EVT_SENSOR_I2C:
-            handleI2cEvent((struct I2cTransfer *)evtData);
-            break;
-
-        case EVT_SENSOR_TOUCH_INTERRUPT:
-            if (mTask.on) {
-                // Read the interrupt status register
-                xfer = allocXfer(STATE_INT_HANDLE_0);
-                if (xfer != NULL) {
-                    xfer->txrxBuf[0] = S3708_REG_F01_DATA_BASE;
-                    performXfer(xfer, 1, 2);
-                }
-            }
-            break;
-
-        case EVT_SENSOR_RETRY_TIMER:
-            if (mTask.on) {
-                // Set page number to 0x00
-                writeRegister(S3708_REG_PAGE_SELECT, 0x00, STATE_ENABLE_0);
-            }
-            break;
-    }
-}
-
-static bool startTask(uint32_t taskId)
-{
-    mTask.id = taskId;
-    mTask.handle = sensorRegister(&mSensorInfo, &mSensorOps, NULL, false);
-
-    mTask.pin = gpioRequest(TOUCH_PIN);
-    gpioConfigInput(mTask.pin, GPIO_SPEED_LOW, GPIO_PULL_NONE);
-    syscfgSetExtiPort(mTask.pin);
-    mTask.isr.func = touchIsr;
-
-    osEventSubscribe(taskId, EVT_APP_START);
-    return true;
-}
-
-static void endTask(void)
-{
-    enableInterrupt(false);
-    extiUnchainIsr(TOUCH_IRQ, &mTask.isr);
-    extiClearPendingGpio(mTask.pin);
-    gpioRelease(mTask.pin);
-
-    i2cMasterRelease(I2C_BUS_ID);
-
-    sensorUnregister(mTask.handle);
-}
-
-INTERNAL_APP_INIT(S3708_APP_ID, S3708_APP_VERSION, startTask, endTask, handleEvent);