/*
 * Ambient light sensor driver for Nintendo Switch's Rohm BH1730
 *
 * Copyright (c) 2018 CTCaer
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope 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.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef __ALS_H_
#define __ALS_H_

#include "../utils/types.h"

#define BH1730_I2C_ADDR 0x29

#define BH1730_CMD_MAGIC   0x80
#define BH1730_CMD_SETADDR 0x00
#define BH1730_CMD_SPECCMD 0x60
#define  BH1730_SPECCMD_RESET 0x4

#define BH1730_CONTROL_REG   0x00
#define  BH1730_CTL_ADC_VALID 0x10
#define  BH1730_CTL_ONE_TIME  0x08
#define  BH1730_CTL_DAT0_ONLY 0x04
#define  BH1730_CTL_ADC_EN    0x02
#define  BH1730_CTL_POWER_ON  0x01
#define BH1730_TIMING_REG    0x01
#define BH1730_GAIN_REG      0x07
#define  BH1730_GAIN_1X      0x00
#define  BH1730_GAIN_2X      0x01
#define  BH1730_GAIN_64X     0x02
#define  BH1730_GAIN_128X    0x03
#define BH1730_DATA0LOW_REG  0x14
#define BH1730_DATA0HIGH_REG 0x15
#define BH1730_DATA1LOW_REG  0x16
#define BH1730_DATA1HIGH_REG 0x17

#define BH1730_ADDR(reg) (BH1730_CMD_MAGIC | BH1730_CMD_SETADDR | reg)
#define BH1730_SPEC(cmd) (BH1730_CMD_MAGIC | BH1730_CMD_SPECCMD | cmd)

typedef struct _als_table_t
{
	float lux;
	bool over_limit;
	u32 vi_light;
	u32 ir_light;
	u8 gain;
	u8 itime;
} als_table_t;

void set_als_cfg(als_table_t *als_val, u8 gain, u8 itime);
void get_als_lux(als_table_t *als_val);
u8 als_init(als_table_t *als_val);

#endif /* __ALS_H_ */