linux/include/linux/mfd/samsung/core.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 * Copyright (c) 2011 Samsung Electronics Co., Ltd
   4 *              http://www.samsung.com
   5 */
   6
   7#ifndef __LINUX_MFD_SEC_CORE_H
   8#define __LINUX_MFD_SEC_CORE_H
   9
  10/* Macros to represent minimum voltages for LDO/BUCK */
  11#define MIN_3000_MV             3000000
  12#define MIN_2500_MV             2500000
  13#define MIN_2000_MV             2000000
  14#define MIN_1800_MV             1800000
  15#define MIN_1500_MV             1500000
  16#define MIN_1400_MV             1400000
  17#define MIN_1000_MV             1000000
  18
  19#define MIN_900_MV              900000
  20#define MIN_850_MV              850000
  21#define MIN_800_MV              800000
  22#define MIN_750_MV              750000
  23#define MIN_650_MV              650000
  24#define MIN_600_MV              600000
  25#define MIN_500_MV              500000
  26
  27/* Ramp delay in uV/us */
  28#define RAMP_DELAY_12_MVUS      12000
  29
  30/* Macros to represent steps for LDO/BUCK */
  31#define STEP_50_MV              50000
  32#define STEP_25_MV              25000
  33#define STEP_12_5_MV            12500
  34#define STEP_6_25_MV            6250
  35
  36struct gpio_desc;
  37
  38enum sec_device_type {
  39        S5M8751X,
  40        S5M8763X,
  41        S5M8767X,
  42        S2MPA01,
  43        S2MPS11X,
  44        S2MPS13X,
  45        S2MPS14X,
  46        S2MPS15X,
  47        S2MPU02,
  48};
  49
  50/**
  51 * struct sec_pmic_dev - s2m/s5m master device for sub-drivers
  52 * @dev:                Master device of the chip
  53 * @pdata:              Platform data populated with data from DTS
  54 *                      or board files
  55 * @regmap_pmic:        Regmap associated with PMIC's I2C address
  56 * @i2c:                I2C client of the main driver
  57 * @device_type:        Type of device, matches enum sec_device_type
  58 * @irq_base:           Base IRQ number for device, required for IRQs
  59 * @irq:                Generic IRQ number for device
  60 * @irq_data:           Runtime data structure for IRQ controller
  61 * @wakeup:             Whether or not this is a wakeup device
  62 */
  63struct sec_pmic_dev {
  64        struct device *dev;
  65        struct sec_platform_data *pdata;
  66        struct regmap *regmap_pmic;
  67        struct i2c_client *i2c;
  68
  69        unsigned long device_type;
  70        int irq;
  71        struct regmap_irq_chip_data *irq_data;
  72};
  73
  74int sec_irq_init(struct sec_pmic_dev *sec_pmic);
  75void sec_irq_exit(struct sec_pmic_dev *sec_pmic);
  76int sec_irq_resume(struct sec_pmic_dev *sec_pmic);
  77
  78struct sec_platform_data {
  79        struct sec_regulator_data       *regulators;
  80        struct sec_opmode_data          *opmode;
  81        int                             num_regulators;
  82
  83        int                             buck_gpios[3];
  84        int                             buck_ds[3];
  85        unsigned int                    buck2_voltage[8];
  86        bool                            buck2_gpiodvs;
  87        unsigned int                    buck3_voltage[8];
  88        bool                            buck3_gpiodvs;
  89        unsigned int                    buck4_voltage[8];
  90        bool                            buck4_gpiodvs;
  91
  92        int                             buck_default_idx;
  93        int                             buck_ramp_delay;
  94
  95        bool                            buck2_ramp_enable;
  96        bool                            buck3_ramp_enable;
  97        bool                            buck4_ramp_enable;
  98
  99        int                             buck2_init;
 100        int                             buck3_init;
 101        int                             buck4_init;
 102        /* Whether or not manually set PWRHOLD to low during shutdown. */
 103        bool                            manual_poweroff;
 104        /* Disable the WRSTBI (buck voltage warm reset) when probing? */
 105        bool                            disable_wrstbi;
 106};
 107
 108/**
 109 * sec_regulator_data - regulator data
 110 * @id: regulator id
 111 * @initdata: regulator init data (contraints, supplies, ...)
 112 */
 113struct sec_regulator_data {
 114        int                             id;
 115        struct regulator_init_data      *initdata;
 116        struct device_node              *reg_node;
 117        struct gpio_desc                *ext_control_gpiod;
 118};
 119
 120/*
 121 * sec_opmode_data - regulator operation mode data
 122 * @id: regulator id
 123 * @mode: regulator operation mode
 124 */
 125struct sec_opmode_data {
 126        int id;
 127        unsigned int mode;
 128};
 129
 130/*
 131 * samsung regulator operation mode
 132 * SEC_OPMODE_OFF       Regulator always OFF
 133 * SEC_OPMODE_ON        Regulator always ON
 134 * SEC_OPMODE_LOWPOWER  Regulator is on in low-power mode
 135 * SEC_OPMODE_SUSPEND   Regulator is changed by PWREN pin
 136 *                      If PWREN is high, regulator is on
 137 *                      If PWREN is low, regulator is off
 138 */
 139
 140enum sec_opmode {
 141        SEC_OPMODE_OFF,
 142        SEC_OPMODE_ON,
 143        SEC_OPMODE_LOWPOWER,
 144        SEC_OPMODE_SUSPEND,
 145};
 146
 147#endif /*  __LINUX_MFD_SEC_CORE_H */
 148