136 lines
3.5 KiB
C
136 lines
3.5 KiB
C
|
/*
|
||
|
* Copyright 2019 Broadcom.
|
||
|
* The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation; either version 2 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
*
|
||
|
* Description:
|
||
|
* Platform I2C client defines/structures header file
|
||
|
*/
|
||
|
|
||
|
#ifndef __PDDF_CLIENT_DEFS_H__
|
||
|
#define __PDDF_CLIENT_DEFS_H__
|
||
|
|
||
|
#include <linux/i2c.h>
|
||
|
|
||
|
#define PSU "PDDF_PSU"
|
||
|
#define LED "PDDF_LED"
|
||
|
#define FAN "PDDF_FAN"
|
||
|
#define CLIENT "PDDF_CLIENT"
|
||
|
#define CPLD "PDDF_CPLD"
|
||
|
#define CPLDMUX "PDDF_CPLDMUX"
|
||
|
#define MUX "PDDF_MUX"
|
||
|
#define GPIO "PDDF_GPIO"
|
||
|
#define SYSSTATUS "PDDF_SYSSTATUS"
|
||
|
#define XCVR "PDDF_XCVR"
|
||
|
|
||
|
#define PDDF_DEBUG
|
||
|
#ifdef PDDF_DEBUG
|
||
|
#define pddf_dbg(filter,...) printk("%s\t", filter); printk(KERN_CONT __VA_ARGS__)
|
||
|
#else
|
||
|
#define pddf_dbg(...)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#define GEN_NAME_SIZE 32
|
||
|
#define ERR_STR_SIZE 128
|
||
|
|
||
|
|
||
|
typedef struct pddf_data_attribute{
|
||
|
struct device_attribute dev_attr;
|
||
|
int type;
|
||
|
int len;
|
||
|
char *addr;
|
||
|
char *data;
|
||
|
}PDDF_ATTR;
|
||
|
|
||
|
#define PDDF_DATA_ATTR(_name, _mode, _show, _store, _type, _len, _addr, _data) \
|
||
|
struct pddf_data_attribute attr_##_name = { .dev_attr = __ATTR(_name, _mode, _show, _store), \
|
||
|
.type = _type , \
|
||
|
.len = _len , \
|
||
|
.addr = _addr, \
|
||
|
.data = _data }
|
||
|
|
||
|
|
||
|
enum attribute_data_type {
|
||
|
PDDF_CHAR,
|
||
|
PDDF_UCHAR,
|
||
|
PDDF_INT_HEX, // integer represented in HEX
|
||
|
PDDF_INT_DEC, // integer represented in DECIMAL
|
||
|
PDDF_USHORT, // HEX
|
||
|
PDDF_UINT32 // HEX
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// PSU Specific details
|
||
|
|
||
|
typedef struct NEW_DEV_ATTR
|
||
|
{
|
||
|
char i2c_type[GEN_NAME_SIZE];
|
||
|
char i2c_name[GEN_NAME_SIZE];
|
||
|
int parent_bus;
|
||
|
char dev_type[GEN_NAME_SIZE];
|
||
|
int dev_id;
|
||
|
int dev_addr;
|
||
|
char *data;
|
||
|
int error;
|
||
|
char errstr[ERR_STR_SIZE];
|
||
|
|
||
|
}NEW_DEV_ATTR;
|
||
|
extern NEW_DEV_ATTR pddf_data;
|
||
|
|
||
|
extern struct attribute_group pddf_clients_data_group;
|
||
|
extern ssize_t store_pddf_data(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
|
||
|
extern ssize_t show_pddf_data(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
struct kobject* get_device_i2c_kobj(void);
|
||
|
void set_attr_data(void * ptr);
|
||
|
void set_error_code(int, char *);
|
||
|
ssize_t show_error_code(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
ssize_t show_all_devices(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
void traverse_device_table(void );
|
||
|
|
||
|
|
||
|
|
||
|
/*Various Ops hook which can be used by vendors to provide some deviation from usual pddf functionality*/
|
||
|
struct pddf_ops_t
|
||
|
{
|
||
|
/*Module init ops*/
|
||
|
int (*pre_init)(void);
|
||
|
int (*post_init)(void);
|
||
|
/*probe ops*/
|
||
|
int (*pre_probe)(struct i2c_client *, const struct i2c_device_id *);
|
||
|
int (*post_probe)(struct i2c_client *, const struct i2c_device_id *);
|
||
|
/*remove ops*/
|
||
|
int (*pre_remove)(struct i2c_client *);
|
||
|
int (*post_remove)(struct i2c_client *);
|
||
|
/*Module exit ops*/
|
||
|
void (*pre_exit)(void);
|
||
|
void (*post_exit)(void);
|
||
|
};
|
||
|
|
||
|
|
||
|
typedef struct PDEVICE
|
||
|
{
|
||
|
struct hlist_node node;
|
||
|
char name[GEN_NAME_SIZE];
|
||
|
void *data;
|
||
|
|
||
|
}PDEVICE;
|
||
|
|
||
|
void add_device_table(char *name, void *ptr);
|
||
|
|
||
|
|
||
|
#endif
|