1*80503b23SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
28476d6cdSWolfram Sang /*
38476d6cdSWolfram Sang  * Definitions and platform data for Analog Devices
48476d6cdSWolfram Sang  * Backlight drivers ADP8860
58476d6cdSWolfram Sang  *
68476d6cdSWolfram Sang  * Copyright 2009-2010 Analog Devices Inc.
78476d6cdSWolfram Sang  */
88476d6cdSWolfram Sang 
98476d6cdSWolfram Sang #ifndef __LINUX_I2C_ADP8860_H
108476d6cdSWolfram Sang #define __LINUX_I2C_ADP8860_H
118476d6cdSWolfram Sang 
128476d6cdSWolfram Sang #include <linux/leds.h>
138476d6cdSWolfram Sang #include <linux/types.h>
148476d6cdSWolfram Sang 
158476d6cdSWolfram Sang #define ID_ADP8860		8860
168476d6cdSWolfram Sang 
178476d6cdSWolfram Sang #define ADP8860_MAX_BRIGHTNESS	0x7F
188476d6cdSWolfram Sang #define FLAG_OFFT_SHIFT 8
198476d6cdSWolfram Sang 
208476d6cdSWolfram Sang /*
218476d6cdSWolfram Sang  * LEDs subdevice platform data
228476d6cdSWolfram Sang  */
238476d6cdSWolfram Sang 
248476d6cdSWolfram Sang #define ADP8860_LED_DIS_BLINK	(0 << FLAG_OFFT_SHIFT)
258476d6cdSWolfram Sang #define ADP8860_LED_OFFT_600ms	(1 << FLAG_OFFT_SHIFT)
268476d6cdSWolfram Sang #define ADP8860_LED_OFFT_1200ms	(2 << FLAG_OFFT_SHIFT)
278476d6cdSWolfram Sang #define ADP8860_LED_OFFT_1800ms	(3 << FLAG_OFFT_SHIFT)
288476d6cdSWolfram Sang 
298476d6cdSWolfram Sang #define ADP8860_LED_ONT_200ms	0
308476d6cdSWolfram Sang #define ADP8860_LED_ONT_600ms	1
318476d6cdSWolfram Sang #define ADP8860_LED_ONT_800ms	2
328476d6cdSWolfram Sang #define ADP8860_LED_ONT_1200ms	3
338476d6cdSWolfram Sang 
348476d6cdSWolfram Sang #define ADP8860_LED_D7		(7)
358476d6cdSWolfram Sang #define ADP8860_LED_D6		(6)
368476d6cdSWolfram Sang #define ADP8860_LED_D5		(5)
378476d6cdSWolfram Sang #define ADP8860_LED_D4		(4)
388476d6cdSWolfram Sang #define ADP8860_LED_D3		(3)
398476d6cdSWolfram Sang #define ADP8860_LED_D2		(2)
408476d6cdSWolfram Sang #define ADP8860_LED_D1		(1)
418476d6cdSWolfram Sang 
428476d6cdSWolfram Sang /*
438476d6cdSWolfram Sang  * Backlight subdevice platform data
448476d6cdSWolfram Sang  */
458476d6cdSWolfram Sang 
468476d6cdSWolfram Sang #define ADP8860_BL_D7		(1 << 6)
478476d6cdSWolfram Sang #define ADP8860_BL_D6		(1 << 5)
488476d6cdSWolfram Sang #define ADP8860_BL_D5		(1 << 4)
498476d6cdSWolfram Sang #define ADP8860_BL_D4		(1 << 3)
508476d6cdSWolfram Sang #define ADP8860_BL_D3		(1 << 2)
518476d6cdSWolfram Sang #define ADP8860_BL_D2		(1 << 1)
528476d6cdSWolfram Sang #define ADP8860_BL_D1		(1 << 0)
538476d6cdSWolfram Sang 
548476d6cdSWolfram Sang #define ADP8860_FADE_T_DIS	0	/* Fade Timer Disabled */
558476d6cdSWolfram Sang #define ADP8860_FADE_T_300ms	1	/* 0.3 Sec */
568476d6cdSWolfram Sang #define ADP8860_FADE_T_600ms	2
578476d6cdSWolfram Sang #define ADP8860_FADE_T_900ms	3
588476d6cdSWolfram Sang #define ADP8860_FADE_T_1200ms	4
598476d6cdSWolfram Sang #define ADP8860_FADE_T_1500ms	5
608476d6cdSWolfram Sang #define ADP8860_FADE_T_1800ms	6
618476d6cdSWolfram Sang #define ADP8860_FADE_T_2100ms	7
628476d6cdSWolfram Sang #define ADP8860_FADE_T_2400ms	8
638476d6cdSWolfram Sang #define ADP8860_FADE_T_2700ms	9
648476d6cdSWolfram Sang #define ADP8860_FADE_T_3000ms	10
658476d6cdSWolfram Sang #define ADP8860_FADE_T_3500ms	11
668476d6cdSWolfram Sang #define ADP8860_FADE_T_4000ms	12
678476d6cdSWolfram Sang #define ADP8860_FADE_T_4500ms	13
688476d6cdSWolfram Sang #define ADP8860_FADE_T_5000ms	14
698476d6cdSWolfram Sang #define ADP8860_FADE_T_5500ms	15	/* 5.5 Sec */
708476d6cdSWolfram Sang 
718476d6cdSWolfram Sang #define ADP8860_FADE_LAW_LINEAR	0
728476d6cdSWolfram Sang #define ADP8860_FADE_LAW_SQUARE	1
738476d6cdSWolfram Sang #define ADP8860_FADE_LAW_CUBIC1	2
748476d6cdSWolfram Sang #define ADP8860_FADE_LAW_CUBIC2	3
758476d6cdSWolfram Sang 
768476d6cdSWolfram Sang #define ADP8860_BL_AMBL_FILT_80ms	0	/* Light sensor filter time */
778476d6cdSWolfram Sang #define ADP8860_BL_AMBL_FILT_160ms	1
788476d6cdSWolfram Sang #define ADP8860_BL_AMBL_FILT_320ms	2
798476d6cdSWolfram Sang #define ADP8860_BL_AMBL_FILT_640ms	3
808476d6cdSWolfram Sang #define ADP8860_BL_AMBL_FILT_1280ms	4
818476d6cdSWolfram Sang #define ADP8860_BL_AMBL_FILT_2560ms	5
828476d6cdSWolfram Sang #define ADP8860_BL_AMBL_FILT_5120ms	6
838476d6cdSWolfram Sang #define ADP8860_BL_AMBL_FILT_10240ms	7	/* 10.24 sec */
848476d6cdSWolfram Sang 
858476d6cdSWolfram Sang /*
868476d6cdSWolfram Sang  * Blacklight current 0..30mA
878476d6cdSWolfram Sang  */
888476d6cdSWolfram Sang #define ADP8860_BL_CUR_mA(I)		((I * 127) / 30)
898476d6cdSWolfram Sang 
908476d6cdSWolfram Sang /*
918476d6cdSWolfram Sang  * L2 comparator current 0..1106uA
928476d6cdSWolfram Sang  */
938476d6cdSWolfram Sang #define ADP8860_L2_COMP_CURR_uA(I)	((I * 255) / 1106)
948476d6cdSWolfram Sang 
958476d6cdSWolfram Sang /*
968476d6cdSWolfram Sang  * L3 comparator current 0..138uA
978476d6cdSWolfram Sang  */
988476d6cdSWolfram Sang #define ADP8860_L3_COMP_CURR_uA(I)	((I * 255) / 138)
998476d6cdSWolfram Sang 
1008476d6cdSWolfram Sang struct adp8860_backlight_platform_data {
1018476d6cdSWolfram Sang 	u8 bl_led_assign;	/* 1 = Backlight 0 = Individual LED */
1028476d6cdSWolfram Sang 
1038476d6cdSWolfram Sang 	u8 bl_fade_in;		/* Backlight Fade-In Timer */
1048476d6cdSWolfram Sang 	u8 bl_fade_out;		/* Backlight Fade-Out Timer */
1058476d6cdSWolfram Sang 	u8 bl_fade_law;		/* fade-on/fade-off transfer characteristic */
1068476d6cdSWolfram Sang 
1078476d6cdSWolfram Sang 	u8 en_ambl_sens;	/* 1 = enable ambient light sensor */
1088476d6cdSWolfram Sang 	u8 abml_filt;		/* Light sensor filter time */
1098476d6cdSWolfram Sang 
1108476d6cdSWolfram Sang 	u8 l1_daylight_max;	/* use BL_CUR_mA(I) 0 <= I <= 30 mA */
1118476d6cdSWolfram Sang 	u8 l1_daylight_dim;	/* typ = 0, use BL_CUR_mA(I) 0 <= I <= 30 mA */
1128476d6cdSWolfram Sang 	u8 l2_office_max;	/* use BL_CUR_mA(I) 0 <= I <= 30 mA */
1138476d6cdSWolfram Sang 	u8 l2_office_dim;	/* typ = 0, use BL_CUR_mA(I) 0 <= I <= 30 mA */
1148476d6cdSWolfram Sang 	u8 l3_dark_max;		/* use BL_CUR_mA(I) 0 <= I <= 30 mA */
1158476d6cdSWolfram Sang 	u8 l3_dark_dim;		/* typ = 0, use BL_CUR_mA(I) 0 <= I <= 30 mA */
1168476d6cdSWolfram Sang 
1178476d6cdSWolfram Sang 	u8 l2_trip;		/* use L2_COMP_CURR_uA(I) 0 <= I <= 1106 uA */
1188476d6cdSWolfram Sang 	u8 l2_hyst;		/* use L2_COMP_CURR_uA(I) 0 <= I <= 1106 uA */
1198476d6cdSWolfram Sang 	u8 l3_trip;		/* use L3_COMP_CURR_uA(I) 0 <= I <= 551 uA */
1208476d6cdSWolfram Sang 	u8 l3_hyst;		/* use L3_COMP_CURR_uA(I) 0 <= I <= 551 uA */
1218476d6cdSWolfram Sang 
1228476d6cdSWolfram Sang 	/**
1238476d6cdSWolfram Sang 	 * Independent Current Sinks / LEDS
1248476d6cdSWolfram Sang 	 * Sinks not assigned to the Backlight can be exposed to
1258476d6cdSWolfram Sang 	 * user space using the LEDS CLASS interface
1268476d6cdSWolfram Sang 	 */
1278476d6cdSWolfram Sang 
1288476d6cdSWolfram Sang 	int num_leds;
1298476d6cdSWolfram Sang 	struct led_info	*leds;
1308476d6cdSWolfram Sang 	u8 led_fade_in;		/* LED Fade-In Timer */
1318476d6cdSWolfram Sang 	u8 led_fade_out;	/* LED Fade-Out Timer */
1328476d6cdSWolfram Sang 	u8 led_fade_law;	/* fade-on/fade-off transfer characteristic */
1338476d6cdSWolfram Sang 	u8 led_on_time;
1348476d6cdSWolfram Sang 
1358476d6cdSWolfram Sang 	/**
1368476d6cdSWolfram Sang 	 * Gain down disable. Setting this option does not allow the
1378476d6cdSWolfram Sang 	 * charge pump to switch to lower gains. NOT AVAILABLE on ADP8860
1388476d6cdSWolfram Sang 	 * 1 = the charge pump doesn't switch down in gain until all LEDs are 0.
1398476d6cdSWolfram Sang 	 *  The charge pump switches up in gain as needed. This feature is
1408476d6cdSWolfram Sang 	 *  useful if the ADP8863 charge pump is used to drive an external load.
1418476d6cdSWolfram Sang 	 *  This feature must be used when utilizing small fly capacitors
1428476d6cdSWolfram Sang 	 *  (0402 or smaller).
1438476d6cdSWolfram Sang 	 * 0 = the charge pump automatically switches up and down in gain.
1448476d6cdSWolfram Sang 	 *  This provides optimal efficiency, but is not suitable for driving
1458476d6cdSWolfram Sang 	 *  loads that are not connected through the ADP8863 diode drivers.
1468476d6cdSWolfram Sang 	 *  Additionally, the charge pump fly capacitors should be low ESR
1478476d6cdSWolfram Sang 	 * and sized 0603 or greater.
1488476d6cdSWolfram Sang 	 */
1498476d6cdSWolfram Sang 
1508476d6cdSWolfram Sang 	u8 gdwn_dis;
1518476d6cdSWolfram Sang };
1528476d6cdSWolfram Sang 
1538476d6cdSWolfram Sang #endif /* __LINUX_I2C_ADP8860_H */
154