blob: d0de882c0d96d5277f23306bf1d2884c40807292 [file] [log] [blame]
Mike Frysingere359dc22011-03-22 16:34:40 -07001/*
2 * Load firmware files from Analog Devices SigmaStudio
3 *
4 * Copyright 2009-2011 Analog Devices Inc.
5 *
6 * Licensed under the GPL-2 or later.
7 */
8
9#ifndef __SIGMA_FIRMWARE_H__
10#define __SIGMA_FIRMWARE_H__
11
12#include <linux/firmware.h>
13#include <linux/types.h>
14
15struct i2c_client;
16
17#define SIGMA_MAGIC "ADISIGM"
18
19struct sigma_firmware {
20 const struct firmware *fw;
21 size_t pos;
22};
23
24struct sigma_firmware_header {
25 unsigned char magic[7];
26 u8 version;
Lars-Peter Clausenbda63582011-11-28 09:44:16 +010027 __le32 crc;
Mike Frysingere359dc22011-03-22 16:34:40 -070028};
29
30enum {
31 SIGMA_ACTION_WRITEXBYTES = 0,
32 SIGMA_ACTION_WRITESINGLE,
33 SIGMA_ACTION_WRITESAFELOAD,
34 SIGMA_ACTION_DELAY,
35 SIGMA_ACTION_PLLWAIT,
36 SIGMA_ACTION_NOOP,
37 SIGMA_ACTION_END,
38};
39
40struct sigma_action {
41 u8 instr;
42 u8 len_hi;
Lars-Peter Clausenbda63582011-11-28 09:44:16 +010043 __le16 len;
44 __be16 addr;
Mike Frysingere359dc22011-03-22 16:34:40 -070045 unsigned char payload[];
46};
47
48static inline u32 sigma_action_len(struct sigma_action *sa)
49{
Lars-Peter Clausenbda63582011-11-28 09:44:16 +010050 return (sa->len_hi << 16) | le16_to_cpu(sa->len);
Mike Frysingere359dc22011-03-22 16:34:40 -070051}
52
Mike Frysingere359dc22011-03-22 16:34:40 -070053extern int process_sigma_firmware(struct i2c_client *client, const char *name);
54
55#endif