firmware: Sigma: Fix endianess issues
[linux-2.6.git] / include / linux / sigma.h
1 /*
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
15 struct i2c_client;
16
17 #define SIGMA_MAGIC "ADISIGM"
18
19 struct sigma_firmware {
20         const struct firmware *fw;
21         size_t pos;
22 };
23
24 struct sigma_firmware_header {
25         unsigned char magic[7];
26         u8 version;
27         __le32 crc;
28 };
29
30 enum {
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
40 struct sigma_action {
41         u8 instr;
42         u8 len_hi;
43         __le16 len;
44         __be16 addr;
45         unsigned char payload[];
46 };
47
48 static inline u32 sigma_action_len(struct sigma_action *sa)
49 {
50         return (sa->len_hi << 16) | le16_to_cpu(sa->len);
51 }
52
53 extern int process_sigma_firmware(struct i2c_client *client, const char *name);
54
55 #endif