File Index
Files and directories
Sign in
FILE

adp1653.h

File preview with syntax highlighting.

linux-6.19.14/include/media/i2c/adp1653.h C
  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 */
~/ Read-only file preview.