linux/drivers/iio/light/rpr0521.c

// SPDX-License-Identifier: GPL-2.0-only
/*
 * RPR-0521 ROHM Ambient Light and Proximity Sensor
 *
 * Copyright (c) 2015, Intel Corporation.
 *
 * IIO driver for RPR-0521RS (7-bit I2C slave address 0x38).
 *
 * TODO: illuminance channel
 */

#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <linux/init.h>
#include <linux/i2c.h>
#include <linux/regmap.h>
#include <linux/delay.h>

#include <linux/iio/iio.h>
#include <linux/iio/buffer.h>
#include <linux/iio/trigger.h>
#include <linux/iio/trigger_consumer.h>
#include <linux/iio/triggered_buffer.h>
#include <linux/iio/sysfs.h>
#include <linux/pm_runtime.h>

#define RPR0521_REG_SYSTEM_CTRL
#define RPR0521_REG_MODE_CTRL
#define RPR0521_REG_ALS_CTRL
#define RPR0521_REG_PXS_CTRL
#define RPR0521_REG_PXS_DATA
#define RPR0521_REG_ALS_DATA0
#define RPR0521_REG_ALS_DATA1
#define RPR0521_REG_INTERRUPT
#define RPR0521_REG_PS_OFFSET_LSB
#define RPR0521_REG_ID

#define RPR0521_MODE_ALS_MASK
#define RPR0521_MODE_PXS_MASK
#define RPR0521_MODE_MEAS_TIME_MASK
#define RPR0521_ALS_DATA0_GAIN_MASK
#define RPR0521_ALS_DATA0_GAIN_SHIFT
#define RPR0521_ALS_DATA1_GAIN_MASK
#define RPR0521_ALS_DATA1_GAIN_SHIFT
#define RPR0521_PXS_GAIN_MASK
#define RPR0521_PXS_GAIN_SHIFT
#define RPR0521_PXS_PERSISTENCE_MASK
#define RPR0521_INTERRUPT_INT_TRIG_PS_MASK
#define RPR0521_INTERRUPT_INT_TRIG_ALS_MASK
#define RPR0521_INTERRUPT_INT_REASSERT_MASK
#define RPR0521_INTERRUPT_ALS_INT_STATUS_MASK
#define RPR0521_INTERRUPT_PS_INT_STATUS_MASK

#define RPR0521_MODE_ALS_ENABLE
#define RPR0521_MODE_ALS_DISABLE
#define RPR0521_MODE_PXS_ENABLE
#define RPR0521_MODE_PXS_DISABLE
#define RPR0521_PXS_PERSISTENCE_DRDY

#define RPR0521_INTERRUPT_INT_TRIG_PS_ENABLE
#define RPR0521_INTERRUPT_INT_TRIG_PS_DISABLE
#define RPR0521_INTERRUPT_INT_TRIG_ALS_ENABLE
#define RPR0521_INTERRUPT_INT_TRIG_ALS_DISABLE
#define RPR0521_INTERRUPT_INT_REASSERT_ENABLE
#define RPR0521_INTERRUPT_INT_REASSERT_DISABLE

#define RPR0521_MANUFACT_ID
#define RPR0521_DEFAULT_MEAS_TIME

#define RPR0521_DRV_NAME
#define RPR0521_IRQ_NAME
#define RPR0521_REGMAP_NAME

#define RPR0521_SLEEP_DELAY_MS

#define RPR0521_ALS_SCALE_AVAIL
#define RPR0521_PXS_SCALE_AVAIL

struct rpr0521_gain {};

static const struct rpr0521_gain rpr0521_als_gain[4] =;

static const struct rpr0521_gain rpr0521_pxs_gain[3] =;

enum rpr0521_channel {};

struct rpr0521_reg_desc {};

static const struct rpr0521_reg_desc rpr0521_data_reg[] =;

static const struct rpr0521_gain_info {} rpr0521_gain[] =;

struct rpr0521_samp_freq {};

static const struct rpr0521_samp_freq rpr0521_samp_freq_i[13] =;

struct rpr0521_data {};

static IIO_CONST_ATTR(in_intensity_scale_available, RPR0521_ALS_SCALE_AVAIL);
static IIO_CONST_ATTR(in_proximity_scale_available, RPR0521_PXS_SCALE_AVAIL);

/*
 * Start with easy freq first, whole table of freq combinations is more
 * complicated.
 */
static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("2.5 10");

static struct attribute *rpr0521_attributes[] =;

static const struct attribute_group rpr0521_attribute_group =;

/* Order of the channel data in buffer */
enum rpr0521_scan_index_order {};

static const unsigned long rpr0521_available_scan_masks[] =;

static const struct iio_chan_spec rpr0521_channels[] =;

static int rpr0521_als_enable(struct rpr0521_data *data, u8 status)
{}

static int rpr0521_pxs_enable(struct rpr0521_data *data, u8 status)
{}

/**
 * rpr0521_set_power_state - handles runtime PM state and sensors enabled status
 *
 * @data: rpr0521 device private data
 * @on: state to be set for devices in @device_mask
 * @device_mask: bitmask specifying for which device we need to update @on state
 *
 * Calls for this function must be balanced so that each ON should have matching
 * OFF. Otherwise pm usage_count gets out of sync.
 */
static int rpr0521_set_power_state(struct rpr0521_data *data, bool on,
				   u8 device_mask)
{}

/* Interrupt register tells if this sensor caused the interrupt or not. */
static inline bool rpr0521_is_triggered(struct rpr0521_data *data)
{}

/* IRQ to trigger handler */
static irqreturn_t rpr0521_drdy_irq_handler(int irq, void *private)
{}

static irqreturn_t rpr0521_drdy_irq_thread(int irq, void *private)
{}

static irqreturn_t rpr0521_trigger_consumer_store_time(int irq, void *p)
{}

static irqreturn_t rpr0521_trigger_consumer_handler(int irq, void *p)
{}

static int rpr0521_write_int_enable(struct rpr0521_data *data)
{}

static int rpr0521_write_int_disable(struct rpr0521_data *data)
{}

/*
 * Trigger producer enable / disable. Note that there will be trigs only when
 * measurement data is ready to be read.
 */
static int rpr0521_pxs_drdy_set_state(struct iio_trigger *trigger,
	bool enable_drdy)
{}

static const struct iio_trigger_ops rpr0521_trigger_ops =;


static int rpr0521_buffer_preenable(struct iio_dev *indio_dev)
{}

static int rpr0521_buffer_postdisable(struct iio_dev *indio_dev)
{}

static const struct iio_buffer_setup_ops rpr0521_buffer_setup_ops =;

static int rpr0521_get_gain(struct rpr0521_data *data, int chan,
			    int *val, int *val2)
{}

static int rpr0521_set_gain(struct rpr0521_data *data, int chan,
			    int val, int val2)
{}

static int rpr0521_read_samp_freq(struct rpr0521_data *data,
				enum iio_chan_type chan_type,
			    int *val, int *val2)
{}

static int rpr0521_write_samp_freq_common(struct rpr0521_data *data,
				enum iio_chan_type chan_type,
				int val, int val2)
{}

static int rpr0521_read_ps_offset(struct rpr0521_data *data, int *offset)
{}

static int rpr0521_write_ps_offset(struct rpr0521_data *data, int offset)
{}

static int rpr0521_read_raw(struct iio_dev *indio_dev,
			    struct iio_chan_spec const *chan, int *val,
			    int *val2, long mask)
{}

static int rpr0521_write_raw(struct iio_dev *indio_dev,
			     struct iio_chan_spec const *chan, int val,
			     int val2, long mask)
{}

static const struct iio_info rpr0521_info =;

static int rpr0521_init(struct rpr0521_data *data)
{}

static int rpr0521_poweroff(struct rpr0521_data *data)
{}

static bool rpr0521_is_volatile_reg(struct device *dev, unsigned int reg)
{}

static const struct regmap_config rpr0521_regmap_config =;

static int rpr0521_probe(struct i2c_client *client)
{}

static void rpr0521_remove(struct i2c_client *client)
{}

static int rpr0521_runtime_suspend(struct device *dev)
{}

static int rpr0521_runtime_resume(struct device *dev)
{}

static const struct dev_pm_ops rpr0521_pm_ops =;

static const struct acpi_device_id rpr0521_acpi_match[] =;
MODULE_DEVICE_TABLE(acpi, rpr0521_acpi_match);

static const struct i2c_device_id rpr0521_id[] =;

MODULE_DEVICE_TABLE(i2c, rpr0521_id);

static struct i2c_driver rpr0521_driver =;

module_i2c_driver();

MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_LICENSE();