linux/include/linux/mfd/max8997.h
<<
>>
Prefs
   1/*
   2 * max8997.h - Driver for the Maxim 8997/8966
   3 *
   4 *  Copyright (C) 2009-2010 Samsung Electrnoics
   5 *  MyungJoo Ham <myungjoo.ham@samsung.com>
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License as published by
   9 * the Free Software Foundation; either version 2 of the License, or
  10 * (at your option) any later version.
  11 *
  12 * This program is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 * GNU General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU General Public License
  18 * along with this program; if not, write to the Free Software
  19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  20 *
  21 * This driver is based on max8998.h
  22 *
  23 * MAX8997 has PMIC, MUIC, HAPTIC, RTC, FLASH, and Fuel Gauge devices.
  24 * Except Fuel Gauge, every device shares the same I2C bus and included in
  25 * this mfd driver. Although the fuel gauge is included in the chip, it is
  26 * excluded from the driver because a) it has a different I2C bus from
  27 * others and b) it can be enabled simply by using MAX17042 driver.
  28 */
  29
  30#ifndef __LINUX_MFD_MAX8998_H
  31#define __LINUX_MFD_MAX8998_H
  32
  33#include <linux/regulator/consumer.h>
  34
  35/* MAX8997/8966 regulator IDs */
  36enum max8998_regulators {
  37        MAX8997_LDO1 = 0,
  38        MAX8997_LDO2,
  39        MAX8997_LDO3,
  40        MAX8997_LDO4,
  41        MAX8997_LDO5,
  42        MAX8997_LDO6,
  43        MAX8997_LDO7,
  44        MAX8997_LDO8,
  45        MAX8997_LDO9,
  46        MAX8997_LDO10,
  47        MAX8997_LDO11,
  48        MAX8997_LDO12,
  49        MAX8997_LDO13,
  50        MAX8997_LDO14,
  51        MAX8997_LDO15,
  52        MAX8997_LDO16,
  53        MAX8997_LDO17,
  54        MAX8997_LDO18,
  55        MAX8997_LDO21,
  56        MAX8997_BUCK1,
  57        MAX8997_BUCK2,
  58        MAX8997_BUCK3,
  59        MAX8997_BUCK4,
  60        MAX8997_BUCK5,
  61        MAX8997_BUCK6,
  62        MAX8997_BUCK7,
  63        MAX8997_EN32KHZ_AP,
  64        MAX8997_EN32KHZ_CP,
  65        MAX8997_ENVICHG,
  66        MAX8997_ESAFEOUT1,
  67        MAX8997_ESAFEOUT2,
  68        MAX8997_CHARGER_CV, /* control MBCCV of MBCCTRL3 */
  69        MAX8997_CHARGER, /* charger current, MBCCTRL4 */
  70        MAX8997_CHARGER_TOPOFF, /* MBCCTRL5 */
  71
  72        MAX8997_REG_MAX,
  73};
  74
  75struct max8997_regulator_data {
  76        int id;
  77        struct regulator_init_data *initdata;
  78        struct device_node *reg_node;
  79};
  80
  81struct max8997_muic_reg_data {
  82        u8 addr;
  83        u8 data;
  84};
  85
  86/**
  87 * struct max8997_muic_platform_data
  88 * @init_data: array of max8997_muic_reg_data
  89 *             used for initializing registers of MAX8997 MUIC device
  90 * @num_init_data: array size of init_data
  91 */
  92struct max8997_muic_platform_data {
  93        struct max8997_muic_reg_data *init_data;
  94        int num_init_data;
  95
  96        /* Check cable state after certain delay */
  97        int detcable_delay_ms;
  98
  99        /*
 100         * Default usb/uart path whether UART/USB or AUX_UART/AUX_USB
 101         * h/w path of COMP2/COMN1 on CONTROL1 register.
 102         */
 103        int path_usb;
 104        int path_uart;
 105};
 106
 107enum max8997_haptic_motor_type {
 108        MAX8997_HAPTIC_ERM,
 109        MAX8997_HAPTIC_LRA,
 110};
 111
 112enum max8997_haptic_pulse_mode {
 113        MAX8997_EXTERNAL_MODE,
 114        MAX8997_INTERNAL_MODE,
 115};
 116
 117enum max8997_haptic_pwm_divisor {
 118        MAX8997_PWM_DIVISOR_32,
 119        MAX8997_PWM_DIVISOR_64,
 120        MAX8997_PWM_DIVISOR_128,
 121        MAX8997_PWM_DIVISOR_256,
 122};
 123
 124/**
 125 * max8997_haptic_platform_data
 126 * @pwm_channel_id: channel number of PWM device
 127 *                  valid for MAX8997_EXTERNAL_MODE
 128 * @pwm_period: period in nano second for PWM device
 129 *              valid for MAX8997_EXTERNAL_MODE
 130 * @type: motor type
 131 * @mode: pulse mode
 132 *     MAX8997_EXTERNAL_MODE: external PWM device is used to control motor
 133 *     MAX8997_INTERNAL_MODE: internal pulse generator is used to control motor
 134 * @pwm_divisor: divisor for external PWM device
 135 * @internal_mode_pattern: internal mode pattern for internal mode
 136 *     [0 - 3]: valid pattern number
 137 * @pattern_cycle: the number of cycles of the waveform
 138 *                 for the internal mode pattern
 139 *     [0 - 15]: available cycles
 140 * @pattern_signal_period: period of the waveform for the internal mode pattern
 141 *     [0 - 255]: available period
 142 */
 143struct max8997_haptic_platform_data {
 144        unsigned int pwm_channel_id;
 145        unsigned int pwm_period;
 146
 147        enum max8997_haptic_motor_type type;
 148        enum max8997_haptic_pulse_mode mode;
 149        enum max8997_haptic_pwm_divisor pwm_divisor;
 150
 151        unsigned int internal_mode_pattern;
 152        unsigned int pattern_cycle;
 153        unsigned int pattern_signal_period;
 154};
 155
 156enum max8997_led_mode {
 157        MAX8997_NONE,
 158        MAX8997_FLASH_MODE,
 159        MAX8997_MOVIE_MODE,
 160        MAX8997_FLASH_PIN_CONTROL_MODE,
 161        MAX8997_MOVIE_PIN_CONTROL_MODE,
 162};
 163
 164/**
 165 *  struct max8997_led_platform_data
 166 *  The number of LED devices for MAX8997 is two
 167 *  @mode: LED mode for each LED device
 168 *  @brightness: initial brightness for each LED device
 169 *      range:
 170 *      [0 - 31]: MAX8997_FLASH_MODE and MAX8997_FLASH_PIN_CONTROL_MODE
 171 *      [0 - 15]: MAX8997_MOVIE_MODE and MAX8997_MOVIE_PIN_CONTROL_MODE
 172 */
 173struct max8997_led_platform_data {
 174        enum max8997_led_mode mode[2];
 175        u8 brightness[2];
 176};
 177
 178struct max8997_platform_data {
 179        /* IRQ */
 180        int ono;
 181        int wakeup;
 182
 183        /* ---- PMIC ---- */
 184        struct max8997_regulator_data *regulators;
 185        int num_regulators;
 186
 187        /*
 188         * SET1~3 DVS GPIOs control Buck1, 2, and 5 simultaneously. Therefore,
 189         * With buckx_gpiodvs enabled, the buckx cannot be controlled
 190         * independently. To control buckx (of 1, 2, and 5) independently,
 191         * disable buckx_gpiodvs and control with BUCKxDVS1 register.
 192         *
 193         * When buckx_gpiodvs and bucky_gpiodvs are both enabled, set_voltage
 194         * on buckx will change the voltage of bucky at the same time.
 195         *
 196         */
 197        bool ignore_gpiodvs_side_effect;
 198        int buck125_gpios[3]; /* GPIO of [0]SET1, [1]SET2, [2]SET3 */
 199        int buck125_default_idx; /* Default value of SET1, 2, 3 */
 200        unsigned int buck1_voltage[8]; /* buckx_voltage in uV */
 201        bool buck1_gpiodvs;
 202        unsigned int buck2_voltage[8];
 203        bool buck2_gpiodvs;
 204        unsigned int buck5_voltage[8];
 205        bool buck5_gpiodvs;
 206
 207        /* ---- Charger control ---- */
 208        /* eoc stands for 'end of charge' */
 209        int eoc_mA; /* 50 ~ 200mA by 10mA step */
 210        /* charge Full Timeout */
 211        int timeout; /* 0 (no timeout), 5, 6, 7 hours */
 212
 213        /* ---- MUIC ---- */
 214        struct max8997_muic_platform_data *muic_pdata;
 215
 216        /* ---- HAPTIC ---- */
 217        struct max8997_haptic_platform_data *haptic_pdata;
 218
 219        /* RTC: Not implemented */
 220        /* ---- LED ---- */
 221        struct max8997_led_platform_data *led_pdata;
 222};
 223
 224#endif /* __LINUX_MFD_MAX8998_H */
 225