コード例 #1
0
ファイル: mma8452.c プロジェクト: krizhanovsky/linux
static irqreturn_t mma8452_interrupt(int irq, void *p)
{
    struct iio_dev *indio_dev = p;
    struct mma8452_data *data = iio_priv(indio_dev);
    const struct mma_chip_info *chip = data->chip_info;
    int ret = IRQ_NONE;
    int src;

    src = i2c_smbus_read_byte_data(data->client, MMA8452_INT_SRC);
    if (src < 0)
        return IRQ_NONE;

    if (src & MMA8452_INT_DRDY) {
        iio_trigger_poll_chained(indio_dev->trig);
        ret = IRQ_HANDLED;
    }

    if ((src & MMA8452_INT_TRANS &&
            chip->ev_src == MMA8452_TRANSIENT_SRC) ||
            (src & MMA8452_INT_FF_MT &&
             chip->ev_src == MMA8452_FF_MT_SRC)) {
        mma8452_transient_interrupt(indio_dev);
        ret = IRQ_HANDLED;
    }

    return ret;
}
コード例 #2
0
ファイル: mma8452.c プロジェクト: DenisLug/mptcp
static irqreturn_t mma8452_interrupt(int irq, void *p)
{
	struct iio_dev *indio_dev = p;
	struct mma8452_data *data = iio_priv(indio_dev);
	int ret = IRQ_NONE;
	int src;

	src = i2c_smbus_read_byte_data(data->client, MMA8452_INT_SRC);
	if (src < 0)
		return IRQ_NONE;

	if (src & MMA8452_INT_DRDY) {
		iio_trigger_poll_chained(indio_dev->trig);
		ret = IRQ_HANDLED;
	}

	if (src & MMA8452_INT_TRANS) {
		mma8452_transient_interrupt(indio_dev);
		ret = IRQ_HANDLED;
	}

	return ret;
}