lochnagar.h (1624B)
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 18enum 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 */ 33struct 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 53int lochnagar_update_config(struct lochnagar *lochnagar); 54 55#endif