Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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