linux/include/linux/mfd/lochnagar.h
<<
>>
Prefs
   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
  56