| /* |
| * leds-s2mu005.h - Flash-led driver for Samsung S2MU003 |
| * |
| * Copyright (C) 2015 Samsung Electronics |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| * |
| */ |
| #ifndef __LEDS_S2MU005_H__ |
| #define __LEDS_S2MU005_H__ |
| |
| #ifdef CONFIG_MUIC_NOTIFIER |
| #include <linux/muic/muic.h> |
| #include <linux/muic/muic_notifier.h> |
| #endif /* CONFIG_MUIC_NOTIFIER */ |
| |
| #define S2MU005_EN_CHANNEL_SHARE_MASK 0x80 |
| #define S2MU005_BOOST_VOUT_FLASH_MASK 0x1F |
| |
| #define S2MU005_TIMEOUT_MAX 0xF |
| |
| #define S2MU005_FLASH_IOUT_MASK 0x1F |
| #define S2MU005_TORCH_IOUT_MASK 0x0F |
| |
| #define S2MU005_CH1_FLASH_ON_I2C 0xC0 |
| #define S2MU005_CH1_TORCH_ON_I2C 0x30 |
| #define S2MU005_CH2_FLASH_ON_I2C 0x0C |
| #define S2MU005_CH2_TORCH_ON_I2C 0x03 |
| |
| #define S2MU005_CH1_FLASH_ON_GPIO 0x40 |
| #define S2MU005_CH1_TORCH_ON_GPIO 0x20 |
| #define S2MU005_CH2_FLASH_ON_GPIO 0x04 |
| #define S2MU005_CH2_TORCH_ON_GPIO 0x02 |
| |
| #define S2MU005_CH1_FLASH_ENABLE_MASK 0xC0 |
| #define S2MU005_CH1_TORCH_ENABLE_MASK 0x30 |
| #define S2MU005_CH2_FLASH_ENABLE_MASK 0x0C |
| #define S2MU005_CH2_TORCH_ENABLE_MASK 0x03 |
| |
| #define S2MU005_FLASH_TORCH_OFF 0x00 |
| #define S2MU005_FLASH_BOOST_EN_MASK 0x40 |
| |
| #define S2MU005_FLASH_LIGHT_MAX 5 |
| |
| enum s2mu005_led_id { |
| S2MU005_OFF, |
| S2MU005_FLASH_LED = 0, |
| S2MU005_TORCH_LED, |
| S2MU005_LED_MAX, |
| }; |
| |
| enum torch_step_current { |
| STEP0_CURRENT = 25, |
| STEP1_CURRENT = 50, |
| STEP2_CURRENT = 75, |
| STEP3_CURRENT = 100, |
| STEP4_CURRENT = 150, |
| }; |
| |
| enum s2mu005_flash_current { |
| S2MU005_FLASH_OUT_I_25MA, |
| S2MU005_FLASH_OUT_I_50MA, |
| S2MU005_FLASH_OUT_I_75MA, |
| S2MU005_FLASH_OUT_I_100MA, |
| S2MU005_FLASH_OUT_I_125MA, |
| S2MU005_FLASH_OUT_I_150MA, |
| S2MU005_FLASH_OUT_I_175MA, |
| S2MU005_FLASH_OUT_I_200MA, |
| S2MU005_FLASH_OUT_I_225MA, |
| S2MU005_FLASH_OUT_I_250MA, |
| S2MU005_FLASH_OUT_I_275MA, |
| S2MU005_FLASH_OUT_I_300MA, |
| S2MU005_FLASH_OUT_I_325MA, |
| S2MU005_FLASH_OUT_I_350MA, |
| S2MU005_FLASH_OUT_I_375MA, |
| S2MU005_FLASH_OUT_I_400MA, |
| S2MU005_FLASH_OUT_I_450MA, |
| S2MU005_FLASH_OUT_I_500MA, |
| S2MU005_FLASH_OUT_I_550MA, |
| S2MU005_FLASH_OUT_I_600MA, |
| S2MU005_FLASH_OUT_I_650MA, |
| S2MU005_FLASH_OUT_I_700MA, |
| S2MU005_FLASH_OUT_I_755MA, |
| S2MU005_FLASH_OUT_I_800MA, |
| S2MU005_FLASH_OUT_I_850MA, |
| S2MU005_FLASH_OUT_I_900MA, |
| S2MU005_FLASH_OUT_I_950MA, |
| S2MU005_FLASH_OUT_I_1000MA, |
| S2MU005_FLASH_OUT_I_1050MA, |
| S2MU005_FLASH_OUT_I_1100MA, |
| S2MU005_FLASH_OUT_I_1150MA, |
| S2MU005_FLASH_OUT_I_1200MA, |
| }; |
| |
| enum s2mu005_torch_current { |
| S2MU005_TORCH_OUT_I_25MA, |
| S2MU005_TORCH_OUT_I_50MA, |
| S2MU005_TORCH_OUT_I_75MA, |
| S2MU005_TORCH_OUT_I_100MA, |
| S2MU005_TORCH_OUT_I_125MA, |
| S2MU005_TORCH_OUT_I_150MA, |
| S2MU005_TORCH_OUT_I_175MA, |
| S2MU005_TORCH_OUT_I_200MA, |
| S2MU005_TORCH_OUT_I_225MA, |
| S2MU005_TORCH_OUT_I_250MA, |
| S2MU005_TORCH_OUT_I_275MA, |
| S2MU005_TORCH_OUT_I_300MA, |
| S2MU005_TORCH_OUT_I_325MA, |
| S2MU005_TORCH_OUT_I_350MA, |
| S2MU005_TORCH_OUT_I_375MA, |
| S2MU005_TORCH_OUT_I_400MA |
| }; |
| |
| enum s2mu005_flash_timeout { |
| S2MU005_FLASH_TIMEOUT_62MS, |
| S2MU005_FLASH_TIMEOUT_124MS, |
| S2MU005_FLASH_TIMEOUT_186MS, |
| S2MU005_FLASH_TIMEOUT_248MS, |
| S2MU005_FLASH_TIMEOUT_310MS, |
| S2MU005_FLASH_TIMEOUT_372MS, |
| S2MU005_FLASH_TIMEOUT_434MS, |
| S2MU005_FLASH_TIMEOUT_496MS, |
| S2MU005_FLASH_TIMEOUT_558MS, |
| S2MU005_FLASH_TIMEOUT_620MS, |
| S2MU005_FLASH_TIMEOUT_682MS, |
| S2MU005_FLASH_TIMEOUT_744MS, |
| S2MU005_FLASH_TIMEOUT_806MS, |
| S2MU005_FLASH_TIMEOUT_868MS, |
| S2MU005_FLASH_TIMEOUT_930MS, |
| S2MU005_FLASH_TIMEOUT_992MS, |
| }; |
| |
| |
| enum s2mu005_torch_timeout { |
| S2MU005_TORCH_TIMEOUT_262MS, |
| S2MU005_TORCH_TIMEOUT_524MS, |
| S2MU005_TORCH_TIMEOUT_768MS, |
| S2MU005_TORCH_TIMEOUT_1048MS, |
| S2MU005_TORCH_TIMEOUT_1572MS, |
| S2MU005_TORCH_TIMEOUT_2096MS, |
| S2MU005_TORCH_TIMEOUT_2620MS, |
| S2MU005_TORCH_TIMEOUT_3144MS, |
| S2MU005_TORCH_TIMEOUT_4192MS, |
| S2MU005_TORCH_TIMEOUT_5242MS, |
| S2MU005_TORCH_TIMEOUT_6291MS, |
| S2MU005_TORCH_TIMEOUT_7340MS, |
| S2MU005_TORCH_TIMEOUT_9437MS, |
| S2MU005_TORCH_TIMEOUT_11534MS, |
| S2MU005_TORCH_TIMEOUT_13631MS, |
| S2MU005_TORCH_TIMEOUT_15728MS, |
| }; |
| |
| enum s2mu005_fled_mode { |
| S2MU005_FLED_MODE_OFF = 0, |
| S2MU005_FLED_MODE_PREFLASH, |
| S2MU005_FLED_MODE_FLASH, |
| S2MU005_FLED_MODE_MOVIE, |
| }; |
| |
| enum s2mu005_fled_select { |
| S2MU005_FLED_OFF = 0, |
| S2MU005_FLED_CH1, /* FLED1 */ |
| S2MU005_FLED_CH2, /* FLED2 */ |
| }; |
| |
| #define S2MU005_FLASH_BRIGHTNESS(mA) mA<=400?(((mA-25)/25) & 0x1f):(((((mA-400)/50)+0x0F)) & 0x1f) |
| #define S2MU005_TORCH_BRIGHTNESS(mA) (((mA - 25) /25) & 0x0f) |
| |
| struct s2mu005_led { |
| const char *name; |
| u32 id; |
| int brightness; |
| int timeout; |
| int max_brightness; |
| }; |
| |
| struct s2mu005_fled_platform_data { |
| int num_leds; |
| struct s2mu005_led leds[S2MU005_LED_MAX]; |
| int torch_pin; |
| int flash_pin; |
| unsigned int flash_brightness; |
| unsigned int preflash_brightness; |
| unsigned int movie_brightness; |
| unsigned int torch_brightness; |
| unsigned int factory_brightness; |
| #if defined(CONFIG_LEDS_SUPPORT_FRONT_FLASH) |
| unsigned int front_brightness; |
| #endif |
| unsigned int flashlight_current[S2MU005_FLASH_LIGHT_MAX]; |
| }; |
| int s2mu005_led_dump_reg(void); |
| #ifdef CONFIG_LEDS_SUPPORT_FRONT_FLASH |
| int s2mu005_led_select_ctrl(int ch); |
| int s2mu005_led_set_front_flash_brightness(int brightness); |
| #endif |
| int s2mu005_led_mode_ctrl(int mode); |
| #endif |