1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (C) 2007-2009 ST-Ericsson AB 4 * 5 * ABX500 core access functions. 6 * The abx500 interface is used for the Analog Baseband chips. 7 * 8 * Author: Mattias Wallin <mattias.wallin@stericsson.com> 9 * Author: Mattias Nilsson <mattias.i.nilsson@stericsson.com> 10 * Author: Bengt Jonsson <bengt.g.jonsson@stericsson.com> 11 * Author: Rickard Andersson <rickard.andersson@stericsson.com> 12 */ 13 14 #include <linux/regulator/machine.h> 15 16 struct device; 17 18 #ifndef MFD_ABX500_H 19 #define MFD_ABX500_H 20 21 /** 22 * struct abx500_init_setting 23 * Initial value of the registers for driver to use during setup. 24 */ 25 struct abx500_init_settings { 26 u8 bank; 27 u8 reg; 28 u8 setting; 29 }; 30 31 int abx500_set_register_interruptible(struct device *dev, u8 bank, u8 reg, 32 u8 value); 33 int abx500_get_register_interruptible(struct device *dev, u8 bank, u8 reg, 34 u8 *value); 35 int abx500_get_register_page_interruptible(struct device *dev, u8 bank, 36 u8 first_reg, u8 *regvals, u8 numregs); 37 int abx500_set_register_page_interruptible(struct device *dev, u8 bank, 38 u8 first_reg, u8 *regvals, u8 numregs); 39 /** 40 * abx500_mask_and_set_register_inerruptible() - Modifies selected bits of a 41 * target register 42 * 43 * @dev: The AB sub device. 44 * @bank: The i2c bank number. 45 * @bitmask: The bit mask to use. 46 * @bitvalues: The new bit values. 47 * 48 * Updates the value of an AB register: 49 * value -> ((value & ~bitmask) | (bitvalues & bitmask)) 50 */ 51 int abx500_mask_and_set_register_interruptible(struct device *dev, u8 bank, 52 u8 reg, u8 bitmask, u8 bitvalues); 53 int abx500_get_chip_id(struct device *dev); 54 int abx500_event_registers_startup_state_get(struct device *dev, u8 *event); 55 int abx500_startup_irq_enabled(struct device *dev, unsigned int irq); 56 57 struct abx500_ops { 58 int (*get_chip_id) (struct device *); 59 int (*get_register) (struct device *, u8, u8, u8 *); 60 int (*set_register) (struct device *, u8, u8, u8); 61 int (*get_register_page) (struct device *, u8, u8, u8 *, u8); 62 int (*set_register_page) (struct device *, u8, u8, u8 *, u8); 63 int (*mask_and_set_register) (struct device *, u8, u8, u8, u8); 64 int (*event_registers_startup_state_get) (struct device *, u8 *); 65 int (*startup_irq_enabled) (struct device *, unsigned int); 66 void (*dump_all_banks) (struct device *); 67 }; 68 69 int abx500_register_ops(struct device *core_dev, struct abx500_ops *ops); 70 void abx500_remove_ops(struct device *dev); 71 #endif 72