1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Lochnagar internals 4 * 5 * Copyright (c) 2013-2018 Cirrus Logic, Inc. and 6 * Cirrus Logic International Semiconductor Ltd. 7 * 8 * Author: Charles Keepax <ckeepax@opensource.cirrus.com> 9 */ 10 11 #include <linux/device.h> 12 #include <linux/mutex.h> 13 #include <linux/regmap.h> 14 15 #ifndef CIRRUS_LOCHNAGAR_H 16 #define CIRRUS_LOCHNAGAR_H 17 18 enum lochnagar_type { 19 LOCHNAGAR1, 20 LOCHNAGAR2, 21 }; 22 23 /** 24 * struct lochnagar - Core data for the Lochnagar audio board driver. 25 * 26 * @type: The type of Lochnagar device connected. 27 * @dev: A pointer to the struct device for the main MFD. 28 * @regmap: The devices main register map. 29 * @analogue_config_lock: Lock used to protect updates in the analogue 30 * configuration as these must not be changed whilst the hardware is processing 31 * the last update. 32 */ 33 struct lochnagar { 34 enum lochnagar_type type; 35 struct device *dev; 36 struct regmap *regmap; 37 38 /* Lock to protect updates to the analogue configuration */ 39 struct mutex analogue_config_lock; 40 }; 41 42 /* Register Addresses */ 43 #define LOCHNAGAR_SOFTWARE_RESET 0x00 44 #define LOCHNAGAR_FIRMWARE_ID1 0x01 45 #define LOCHNAGAR_FIRMWARE_ID2 0x02 46 47 /* (0x0000) Software Reset */ 48 #define LOCHNAGAR_DEVICE_ID_MASK 0xFFFC 49 #define LOCHNAGAR_DEVICE_ID_SHIFT 2 50 #define LOCHNAGAR_REV_ID_MASK 0x0003 51 #define LOCHNAGAR_REV_ID_SHIFT 0 52 53 int lochnagar_update_config(struct lochnagar *lochnagar); 54 55 #endif 56