Path: blob/main/sys/arm64/nvidia/tegra210/max77620.h
48266 views
/*-1* SPDX-License-Identifier: BSD-2-Clause2*3* Copyright 2020 Michal Meloun <[email protected]>4*5* Redistribution and use in source and binary forms, with or without6* modification, are permitted provided that the following conditions7* are met:8* 1. Redistributions of source code must retain the above copyright9* notice, this list of conditions and the following disclaimer.10* 2. Redistributions in binary form must reproduce the above copyright11* notice, this list of conditions and the following disclaimer in the12* documentation and/or other materials provided with the distribution.13*14* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND15* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE16* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE17* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE18* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL19* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS20* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)21* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT22* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY23* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF24* SUCH DAMAGE.25*/2627#ifndef _MAX77620_H_2829#include <sys/clock.h>3031#define MAX77620_REG_CNFGGLBL1 0x0032#define MAX77620_REG_CNFGGLBL2 0x0133#define MAX77620_REG_CNFGGLBL3 0x0234#define MAX77620_REG_CNFG1_32K 0x0335#define MAX77620_REG_CNFGBBC 0x0436#define MAX77620_REG_IRQTOP 0x0537#define MAX77620_REG_INTLBT 0x0638#define MAX77620_REG_IRQSD 0x0739#define MAX77620_REG_IRQ_LVL2_L0_7 0x0840#define MAX77620_REG_IRQ_LVL2_L8 0x0941#define MAX77620_REG_IRQ_LVL2_GPIO 0x0A42#define MAX77620_REG_ONOFFIRQ 0x0B43#define MAX77620_REG_NVERC 0x0C44#define MAX77620_REG_IRQTOPM 0x0D45#define MAX77620_REG_INTENLBT 0x0E46#define MAX77620_REG_IRQMASKSD 0x0F47#define MAX77620_REG_IRQ_MSK_L0_7 0x1048#define MAX77620_REG_IRQ_MSK_L8 0x1149#define MAX77620_REG_ONOFFIRQM 0x1250#define MAX77620_REG_STATLBT 0x1351#define MAX77620_REG_STATSD 0x1452#define MAX77620_REG_ONOFFSTAT 0x1553#define MAX77620_REG_SD0 0x1654#define MAX77620_SD0_VSEL_MASK 0x3F5556#define MAX77620_REG_SD1 0x1757#define MAX77620_SD1_VSEL_MASK 0x7F5859#define MAX77620_REG_SD2 0x1860#define MAX77620_REG_SD3 0x1961#define MAX77620_REG_SD4 0x1A62#define MAX77620_SDX_VSEL_MASK 0xFF6364#define MAX77620_REG_DVSSD0 0x1B65#define MAX77620_REG_DVSSD1 0x1C66#define MAX77620_REG_CFG_SD0 0x1D67#define MAX77620_REG_CFG_SD1 0x1E68#define MAX77620_REG_CFG_SD2 0x1F69#define MAX77620_REG_CFG_SD3 0x2070#define MAX77620_REG_CFG_SD4 0x2171#define MAX77620_SD_SR_MASK 0xC072#define MAX77620_SD_SR_SHIFT 673#define MAX77620_SD_POWER_MODE_MASK 0x3074#define MAX77620_SD_POWER_MODE_SHIFT 475#define MAX77620_SD_FPWM_MASK 0x0476#define MAX77620_SD_FPWM_SHIFT 277#define MAX77620_SD_FSRADE_MASK 0x0178#define MAX77620_SD_FSRADE_SHIFT 07980#define MAX77620_REG_CFG2_SD 0x2281#define MAX77620_REG_CFG_LDO0 0x2382#define MAX77620_REG_CFG2_LDO0 0x2483#define MAX77620_REG_CFG_LDO1 0x2584#define MAX77620_REG_CFG2_LDO1 0x2685#define MAX77620_REG_CFG_LDO2 0x2786#define MAX77620_REG_CFG2_LDO2 0x2887#define MAX77620_REG_CFG_LDO3 0x2988#define MAX77620_REG_CFG2_LDO3 0x2A89#define MAX77620_REG_CFG_LDO4 0x2B90#define MAX77620_REG_CFG2_LDO4 0x2C91#define MAX77620_REG_CFG_LDO5 0x2D92#define MAX77620_REG_CFG2_LDO5 0x2E93#define MAX77620_REG_CFG_LDO6 0x2F94#define MAX77620_REG_CFG2_LDO6 0x3095#define MAX77620_REG_CFG_LDO7 0x3196#define MAX77620_REG_CFG2_LDO7 0x3297#define MAX77620_REG_CFG_LDO8 0x3398#define MAX77620_LDO_POWER_MODE_MASK 0xC099#define MAX77620_LDO_POWER_MODE_SHIFT 6100#define MAX77620_LDO_VSEL_MASK 0x3F101102#define MAX77620_REG_CFG2_LDO8 0x34103#define MAX77620_LDO_SLEW_RATE_MASK 0x1104#define MAX77620_LDO_SLEW_RATE_SHIFT 0x0105106#define MAX77620_REG_CFG3_LDO 0x35107108#define MAX77620_REG_GPIO0 0x36109#define MAX77620_REG_GPIO1 0x37110#define MAX77620_REG_GPIO2 0x38111#define MAX77620_REG_GPIO3 0x39112#define MAX77620_REG_GPIO4 0x3A113#define MAX77620_REG_GPIO5 0x3B114#define MAX77620_REG_GPIO6 0x3C115#define MAX77620_REG_GPIO7 0x3D116#define MAX77620_REG_GPIO_INT_GET(x) (((x) >> 5) & 0x3)117#define MAX77620_REG_GPIO_INT(x) (((x) & 0x3) << 5)118#define MAX77620_REG_GPIO_INT_NONE 0119#define MAX77620_REG_GPIO_INT_FALLING 1120#define MAX77620_REG_GPIO_INT_RISING 2121#define MAX77620_REG_GPIO_INT_BOTH 3122#define MAX77620_REG_GPIO_OUTPUT_VAL_GET(x) (((x) >> 3) & 0x1)123#define MAX77620_REG_GPIO_OUTPUT_VAL(x) (((x) & 0x1) << 3)124#define MAX77620_REG_GPIO_INPUT_VAL_GET(x) (((x) << 2) & 0x1)125#define MAX77620_REG_GPIO_INPUT_VAL (1 << 2)126#define MAX77620_REG_GPIO_DRV_GET(x) (((x) >> 0) & 0x1)127#define MAX77620_REG_GPIO_DRV(x) (((x) & 0x1) << 0)128#define MAX77620_REG_GPIO_DRV_PUSHPULL 1129#define MAX77620_REG_GPIO_DRV_OPENDRAIN 0130131#define MAX77620_REG_PUE_GPIO 0x3E132#define MAX77620_REG_PDE_GPIO 0x3F133#define MAX77620_REG_AME_GPIO 0x40134#define MAX77620_REG_ONOFFCNFG1 0x41135#define MAX77620_REG_ONOFFCNFG2 0x42136137#define MAX77620_REG_FPS_CFG0 0x43138#define MAX77620_REG_FPS_CFG1 0x44139#define MAX77620_REG_FPS_CFG2 0x45140#define MAX77620_FPS_TIME_PERIOD_MASK 0x38141#define MAX77620_FPS_TIME_PERIOD_SHIFT 3142#define MAX77620_FPS_EN_SRC_MASK 0x06143#define MAX77620_FPS_EN_SRC_SHIFT 1144#define MAX77620_FPS_ENFPS_SW_MASK 0x01145#define MAX77620_FPS_ENFPS_SW 0x01146147#define MAX77620_REG_FPS_LDO0 0x46148#define MAX77620_REG_FPS_LDO1 0x47149#define MAX77620_REG_FPS_LDO2 0x48150#define MAX77620_REG_FPS_LDO3 0x49151#define MAX77620_REG_FPS_LDO4 0x4A152#define MAX77620_REG_FPS_LDO5 0x4B153#define MAX77620_REG_FPS_LDO6 0x4C154#define MAX77620_REG_FPS_LDO7 0x4D155#define MAX77620_REG_FPS_LDO8 0x4E156#define MAX77620_REG_FPS_SD0 0x4F157#define MAX77620_REG_FPS_SD1 0x50158#define MAX77620_REG_FPS_SD2 0x51159#define MAX77620_REG_FPS_SD3 0x52160#define MAX77620_REG_FPS_SD4 0x53161#define MAX77620_REG_FPS_GPIO1 0x54162#define MAX77620_REG_FPS_GPIO2 0x55163#define MAX77620_REG_FPS_GPIO3 0x56164#define MAX77620_REG_FPS_RSO 0x57165#define MAX77620_FPS_SRC_MASK 0xC0166#define MAX77620_FPS_SRC_SHIFT 6167#define MAX77620_FPS_PU_PERIOD_MASK 0x38168#define MAX77620_FPS_PU_PERIOD_SHIFT 3169#define MAX77620_FPS_PD_PERIOD_MASK 0x07170#define MAX77620_FPS_PD_PERIOD_SHIFT 0171172#define MAX77620_REG_CID0 0x58173#define MAX77620_REG_CID1 0x59174#define MAX77620_REG_CID2 0x5A175#define MAX77620_REG_CID3 0x5B176#define MAX77620_REG_CID4 0x5C177#define MAX77620_REG_CID5 0x5D178#define MAX77620_REG_DVSSD4 0x5E179#define MAX20024_REG_MAX_ADD 0x70180181/* MIsc FPS definitions. */182#define MAX77620_FPS_COUNT 3183#define MAX77620_FPS_PERIOD_MIN_US 40184#define MAX77620_FPS_PERIOD_MAX_US 2560185186/* Power modes */187#define MAX77620_POWER_MODE_NORMAL 3188#define MAX77620_POWER_MODE_LPM 2189#define MAX77620_POWER_MODE_GLPM 1190#define MAX77620_POWER_MODE_DISABLE 0191192193struct max77620_reg_sc;194struct max77620_gpio_pin;195196struct max77620_softc {197device_t dev;198struct sx lock;199int bus_addr;200struct resource *irq_res;201void *irq_h;202203int shutdown_fps[MAX77620_FPS_COUNT];204int suspend_fps[MAX77620_FPS_COUNT];205int event_source[MAX77620_FPS_COUNT];206207/* Regulators. */208struct max77620_reg_sc **regs;209int nregs;210211/* GPIO */212device_t gpio_busdev;213struct max77620_gpio_pin **gpio_pins;214int gpio_npins;215struct sx gpio_lock;216uint8_t gpio_reg_pue; /* pull-up enables */217uint8_t gpio_reg_pde; /* pull-down enables */218uint8_t gpio_reg_ame; /* alternate fnc */219220221};222223#define RD1(sc, reg, val) max77620_read(sc, reg, val)224#define WR1(sc, reg, val) max77620_write(sc, reg, val)225#define RM1(sc, reg, clr, set) max77620_modify(sc, reg, clr, set)226227int max77620_read(struct max77620_softc *sc, uint8_t reg, uint8_t *val);228int max77620_write(struct max77620_softc *sc, uint8_t reg, uint8_t val);229int max77620_modify(struct max77620_softc *sc, uint8_t reg, uint8_t clear,230uint8_t set);231int max77620_read_buf(struct max77620_softc *sc, uint8_t reg, uint8_t *buf,232size_t size);233int max77620_write_buf(struct max77620_softc *sc, uint8_t reg, uint8_t *buf,234size_t size);235236/* Regulators */237int max77620_regulator_attach(struct max77620_softc *sc, phandle_t node);238int max77620_regulator_map(device_t dev, phandle_t xref, int ncells,239pcell_t *cells, intptr_t *num);240241/* RTC */242int max77620_rtc_create(struct max77620_softc *sc, phandle_t node);243244/* GPIO */245device_t max77620_gpio_get_bus(device_t dev);246int max77620_gpio_pin_max(device_t dev, int *maxpin);247int max77620_gpio_pin_getname(device_t dev, uint32_t pin, char *name);248int max77620_gpio_pin_getflags(device_t dev, uint32_t pin, uint32_t *flags);249int max77620_gpio_pin_getcaps(device_t dev, uint32_t pin, uint32_t *caps);250int max77620_gpio_pin_setflags(device_t dev, uint32_t pin, uint32_t flags);251int max77620_gpio_pin_set(device_t dev, uint32_t pin, unsigned int value);252int max77620_gpio_pin_get(device_t dev, uint32_t pin, unsigned int *val);253int max77620_gpio_pin_toggle(device_t dev, uint32_t pin);254int max77620_gpio_map_gpios(device_t dev, phandle_t pdev, phandle_t gparent,255int gcells, pcell_t *gpios, uint32_t *pin, uint32_t *flags);256int max77620_gpio_attach(struct max77620_softc *sc, phandle_t node);257int max77620_pinmux_configure(device_t dev, phandle_t cfgxref);258259#endif /* _MAX77620_H_ */260261262