root/include/linux/platform_data/mlxreg.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * Copyright (c) 2017 Mellanox Technologies. All rights reserved.
   3  * Copyright (c) 2017 Vadim Pasternak <vadimp@mellanox.com>
   4  *
   5  * Redistribution and use in source and binary forms, with or without
   6  * modification, are permitted provided that the following conditions are met:
   7  *
   8  * 1. Redistributions of source code must retain the above copyright
   9  *    notice, this list of conditions and the following disclaimer.
  10  * 2. Redistributions in binary form must reproduce the above copyright
  11  *    notice, this list of conditions and the following disclaimer in the
  12  *    documentation and/or other materials provided with the distribution.
  13  * 3. Neither the names of the copyright holders nor the names of its
  14  *    contributors may be used to endorse or promote products derived from
  15  *    this software without specific prior written permission.
  16  *
  17  * Alternatively, this software may be distributed under the terms of the
  18  * GNU General Public License ("GPL") version 2 as published by the Free
  19  * Software Foundation.
  20  *
  21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  25  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  31  * POSSIBILITY OF SUCH DAMAGE.
  32  */
  33 
  34 #ifndef __LINUX_PLATFORM_DATA_MLXREG_H
  35 #define __LINUX_PLATFORM_DATA_MLXREG_H
  36 
  37 #define MLXREG_CORE_LABEL_MAX_SIZE      32
  38 #define MLXREG_CORE_WD_FEATURE_NOWAYOUT         BIT(0)
  39 #define MLXREG_CORE_WD_FEATURE_START_AT_BOOT    BIT(1)
  40 
  41 /**
  42  * enum mlxreg_wdt_type - type of HW watchdog
  43  *
  44  * TYPE1 HW watchdog implementation exist in old systems.
  45  * All new systems have TYPE2 HW watchdog.
  46  */
  47 enum mlxreg_wdt_type {
  48         MLX_WDT_TYPE1,
  49         MLX_WDT_TYPE2,
  50 };
  51 
  52 /**
  53  * struct mlxreg_hotplug_device - I2C device data:
  54  *
  55  * @adapter: I2C device adapter;
  56  * @client: I2C device client;
  57  * @brdinfo: device board information;
  58  * @nr: I2C device adapter number, to which device is to be attached;
  59  *
  60  * Structure represents I2C hotplug device static data (board topology) and
  61  * dynamic data (related kernel objects handles).
  62  */
  63 struct mlxreg_hotplug_device {
  64         struct i2c_adapter *adapter;
  65         struct i2c_client *client;
  66         struct i2c_board_info *brdinfo;
  67         int nr;
  68 };
  69 
  70 /**
  71  * struct mlxreg_core_data - attributes control data:
  72  *
  73  * @label: attribute label;
  74  * @reg: attribute register;
  75  * @mask: attribute access mask;
  76  * @bit: attribute effective bit;
  77  * @capability: attribute capability register;
  78  * @mode: access mode;
  79  * @np - pointer to node platform associated with attribute;
  80  * @hpdev - hotplug device data;
  81  * @health_cntr: dynamic device health indication counter;
  82  * @attached: true if device has been attached after good health indication;
  83  */
  84 struct mlxreg_core_data {
  85         char label[MLXREG_CORE_LABEL_MAX_SIZE];
  86         u32 reg;
  87         u32 mask;
  88         u32 bit;
  89         u32 capability;
  90         umode_t mode;
  91         struct device_node *np;
  92         struct mlxreg_hotplug_device hpdev;
  93         u8 health_cntr;
  94         bool attached;
  95 };
  96 
  97 /**
  98  * struct mlxreg_core_item - same type components controlled by the driver:
  99  *
 100  * @data: component data;
 101  * @aggr_mask: group aggregation mask;
 102  * @reg: group interrupt status register;
 103  * @mask: group interrupt mask;
 104  * @cache: last status value for elements fro the same group;
 105  * @count: number of available elements in the group;
 106  * @ind: element's index inside the group;
 107  * @inversed: if 0: 0 for signal status is OK, if 1 - 1 is OK;
 108  * @health: true if device has health indication, false in other case;
 109  */
 110 struct mlxreg_core_item {
 111         struct mlxreg_core_data *data;
 112         u32 aggr_mask;
 113         u32 reg;
 114         u32 mask;
 115         u32 cache;
 116         u8 count;
 117         u8 ind;
 118         u8 inversed;
 119         u8 health;
 120 };
 121 
 122 /**
 123  * struct mlxreg_core_platform_data - platform data:
 124  *
 125  * @data: instance private data;
 126  * @regmap: register map of parent device;
 127  * @counter: number of instances;
 128  * @features: supported features of device;
 129  * @version: implementation version;
 130  * @identity: device identity name;
 131  */
 132 struct mlxreg_core_platform_data {
 133         struct mlxreg_core_data *data;
 134         void *regmap;
 135         int counter;
 136         u32 features;
 137         u32 version;
 138         char identity[MLXREG_CORE_LABEL_MAX_SIZE];
 139 };
 140 
 141 /**
 142  * struct mlxreg_core_hotplug_platform_data - hotplug platform data:
 143  *
 144  * @items: same type components with the hotplug capability;
 145  * @irq: platform interrupt number;
 146  * @regmap: register map of parent device;
 147  * @counter: number of the components with the hotplug capability;
 148  * @cell: location of top aggregation interrupt register;
 149  * @mask: top aggregation interrupt common mask;
 150  * @cell_low: location of low aggregation interrupt register;
 151  * @mask_low: low aggregation interrupt common mask;
 152  * @deferred_nr: I2C adapter number must be exist prior probing execution;
 153  * @shift_nr: I2C adapter numbers must be incremented by this value;
 154  */
 155 struct mlxreg_core_hotplug_platform_data {
 156         struct mlxreg_core_item *items;
 157         int irq;
 158         void *regmap;
 159         int counter;
 160         u32 cell;
 161         u32 mask;
 162         u32 cell_low;
 163         u32 mask_low;
 164         int deferred_nr;
 165         int shift_nr;
 166 };
 167 
 168 #endif /* __LINUX_PLATFORM_DATA_MLXREG_H */

/* [<][>][^][v][top][bottom][index][help] */