cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

adp1653.h (3703B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * include/media/i2c/adp1653.h
      4 *
      5 * Copyright (C) 2008--2011 Nokia Corporation
      6 *
      7 * Contact: Sakari Ailus <sakari.ailus@iki.fi>
      8 *
      9 * Contributors:
     10 *	Sakari Ailus <sakari.ailus@iki.fi>
     11 *	Tuukka Toivonen <tuukkat76@gmail.com>
     12 */
     13
     14#ifndef ADP1653_H
     15#define ADP1653_H
     16
     17#include <linux/i2c.h>
     18#include <linux/mutex.h>
     19#include <linux/videodev2.h>
     20#include <media/v4l2-ctrls.h>
     21#include <media/v4l2-subdev.h>
     22
     23#define ADP1653_NAME				"adp1653"
     24#define ADP1653_I2C_ADDR			(0x60 >> 1)
     25
     26/* Register definitions */
     27#define ADP1653_REG_OUT_SEL			0x00
     28#define ADP1653_REG_OUT_SEL_HPLED_TORCH_MIN	0x01
     29#define ADP1653_REG_OUT_SEL_HPLED_TORCH_MAX	0x0b
     30#define ADP1653_REG_OUT_SEL_HPLED_FLASH_MIN	0x0c
     31#define ADP1653_REG_OUT_SEL_HPLED_FLASH_MAX	0x1f
     32#define ADP1653_REG_OUT_SEL_HPLED_SHIFT		3
     33#define ADP1653_REG_OUT_SEL_ILED_MAX		0x07
     34#define ADP1653_REG_OUT_SEL_ILED_SHIFT		0
     35
     36#define ADP1653_REG_CONFIG			0x01
     37#define ADP1653_REG_CONFIG_TMR_CFG		(1 << 4)
     38#define ADP1653_REG_CONFIG_TMR_SET_MAX		0x0f
     39#define ADP1653_REG_CONFIG_TMR_SET_SHIFT	0
     40
     41#define ADP1653_REG_SW_STROBE			0x02
     42#define ADP1653_REG_SW_STROBE_SW_STROBE		(1 << 0)
     43
     44#define ADP1653_REG_FAULT			0x03
     45#define ADP1653_REG_FAULT_FLT_SCP		(1 << 3)
     46#define ADP1653_REG_FAULT_FLT_OT		(1 << 2)
     47#define ADP1653_REG_FAULT_FLT_TMR		(1 << 1)
     48#define ADP1653_REG_FAULT_FLT_OV		(1 << 0)
     49
     50#define ADP1653_INDICATOR_INTENSITY_MIN		0
     51#define ADP1653_INDICATOR_INTENSITY_STEP	2500
     52#define ADP1653_INDICATOR_INTENSITY_MAX		\
     53	(ADP1653_REG_OUT_SEL_ILED_MAX * ADP1653_INDICATOR_INTENSITY_STEP)
     54#define ADP1653_INDICATOR_INTENSITY_uA_TO_REG(a) \
     55	((a) / ADP1653_INDICATOR_INTENSITY_STEP)
     56#define ADP1653_INDICATOR_INTENSITY_REG_TO_uA(a) \
     57	((a) * ADP1653_INDICATOR_INTENSITY_STEP)
     58
     59#define ADP1653_FLASH_INTENSITY_BASE		35
     60#define ADP1653_FLASH_INTENSITY_STEP		15
     61#define ADP1653_FLASH_INTENSITY_MIN					\
     62	(ADP1653_FLASH_INTENSITY_BASE					\
     63	 + ADP1653_REG_OUT_SEL_HPLED_FLASH_MIN * ADP1653_FLASH_INTENSITY_STEP)
     64#define ADP1653_FLASH_INTENSITY_MAX			\
     65	(ADP1653_FLASH_INTENSITY_MIN +			\
     66	 (ADP1653_REG_OUT_SEL_HPLED_FLASH_MAX -		\
     67	  ADP1653_REG_OUT_SEL_HPLED_FLASH_MIN + 1) *	\
     68	 ADP1653_FLASH_INTENSITY_STEP)
     69
     70#define ADP1653_FLASH_INTENSITY_mA_TO_REG(a)				\
     71	((a) < ADP1653_FLASH_INTENSITY_BASE ? 0 :			\
     72	 (((a) - ADP1653_FLASH_INTENSITY_BASE) / ADP1653_FLASH_INTENSITY_STEP))
     73#define ADP1653_FLASH_INTENSITY_REG_TO_mA(a)		\
     74	((a) * ADP1653_FLASH_INTENSITY_STEP + ADP1653_FLASH_INTENSITY_BASE)
     75
     76#define ADP1653_TORCH_INTENSITY_MIN					\
     77	(ADP1653_FLASH_INTENSITY_BASE					\
     78	 + ADP1653_REG_OUT_SEL_HPLED_TORCH_MIN * ADP1653_FLASH_INTENSITY_STEP)
     79#define ADP1653_TORCH_INTENSITY_MAX			\
     80	(ADP1653_TORCH_INTENSITY_MIN +			\
     81	 (ADP1653_REG_OUT_SEL_HPLED_TORCH_MAX -		\
     82	  ADP1653_REG_OUT_SEL_HPLED_TORCH_MIN + 1) *	\
     83	 ADP1653_FLASH_INTENSITY_STEP)
     84
     85struct adp1653_platform_data {
     86	int (*power)(struct v4l2_subdev *sd, int on);
     87
     88	u32 max_flash_timeout;		/* flash light timeout in us */
     89	u32 max_flash_intensity;	/* led intensity, flash mode, mA */
     90	u32 max_torch_intensity;	/* led intensity, torch mode, mA */
     91	u32 max_indicator_intensity;	/* indicator led intensity, uA */
     92
     93	struct gpio_desc *enable_gpio;	/* for device-tree based boot */
     94};
     95
     96#define to_adp1653_flash(sd)	container_of(sd, struct adp1653_flash, subdev)
     97
     98struct adp1653_flash {
     99	struct v4l2_subdev subdev;
    100	struct adp1653_platform_data *platform_data;
    101
    102	struct v4l2_ctrl_handler ctrls;
    103	struct v4l2_ctrl *led_mode;
    104	struct v4l2_ctrl *flash_timeout;
    105	struct v4l2_ctrl *flash_intensity;
    106	struct v4l2_ctrl *torch_intensity;
    107	struct v4l2_ctrl *indicator_intensity;
    108
    109	struct mutex power_lock;
    110	int power_count;
    111	int fault;
    112};
    113
    114#endif /* ADP1653_H */