61 lines
1 KiB
C
61 lines
1 KiB
C
|
/*
|
||
|
* Load firmware files from Analog Devices SigmaStudio
|
||
|
*
|
||
|
* Copyright 2009-2011 Analog Devices Inc.
|
||
|
*
|
||
|
* Licensed under the GPL-2 or later.
|
||
|
*/
|
||
|
|
||
|
#ifndef __SIGMA_FIRMWARE_H__
|
||
|
#define __SIGMA_FIRMWARE_H__
|
||
|
|
||
|
#include <linux/firmware.h>
|
||
|
#include <linux/types.h>
|
||
|
|
||
|
struct i2c_client;
|
||
|
|
||
|
#define SIGMA_MAGIC "ADISIGM"
|
||
|
|
||
|
struct sigma_firmware {
|
||
|
const struct firmware *fw;
|
||
|
size_t pos;
|
||
|
};
|
||
|
|
||
|
struct sigma_firmware_header {
|
||
|
unsigned char magic[7];
|
||
|
u8 version;
|
||
|
u32 crc;
|
||
|
};
|
||
|
|
||
|
enum {
|
||
|
SIGMA_ACTION_WRITEXBYTES = 0,
|
||
|
SIGMA_ACTION_WRITESINGLE,
|
||
|
SIGMA_ACTION_WRITESAFELOAD,
|
||
|
SIGMA_ACTION_DELAY,
|
||
|
SIGMA_ACTION_PLLWAIT,
|
||
|
SIGMA_ACTION_NOOP,
|
||
|
SIGMA_ACTION_END,
|
||
|
};
|
||
|
|
||
|
struct sigma_action {
|
||
|
u8 instr;
|
||
|
u8 len_hi;
|
||
|
u16 len;
|
||
|
u16 addr;
|
||
|
unsigned char payload[];
|
||
|
};
|
||
|
|
||
|
static inline u32 sigma_action_len(struct sigma_action *sa)
|
||
|
{
|
||
|
return (sa->len_hi << 16) | sa->len;
|
||
|
}
|
||
|
|
||
|
static inline size_t sigma_action_size(struct sigma_action *sa, u32 payload_len)
|
||
|
{
|
||
|
return sizeof(*sa) + payload_len + (payload_len % 2);
|
||
|
}
|
||
|
|
||
|
extern int process_sigma_firmware(struct i2c_client *client, const char *name);
|
||
|
|
||
|
#endif
|