Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc
[cris-mirror.git] / include / linux / sigma.h
blobe2accb3164d8d969245e4567b0f308d4a35cb152
1 /*
2 * Load firmware files from Analog Devices SigmaStudio
4 * Copyright 2009-2011 Analog Devices Inc.
6 * Licensed under the GPL-2 or later.
7 */
9 #ifndef __SIGMA_FIRMWARE_H__
10 #define __SIGMA_FIRMWARE_H__
12 #include <linux/firmware.h>
13 #include <linux/types.h>
15 struct i2c_client;
17 #define SIGMA_MAGIC "ADISIGM"
19 struct sigma_firmware {
20 const struct firmware *fw;
21 size_t pos;
24 struct sigma_firmware_header {
25 unsigned char magic[7];
26 u8 version;
27 u32 crc;
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,
40 struct sigma_action {
41 u8 instr;
42 u8 len_hi;
43 u16 len;
44 u16 addr;
45 unsigned char payload[];
48 static inline u32 sigma_action_len(struct sigma_action *sa)
50 return (sa->len_hi << 16) | sa->len;
53 static inline size_t sigma_action_size(struct sigma_action *sa, u32 payload_len)
55 return sizeof(*sa) + payload_len + (payload_len % 2);
58 extern int process_sigma_firmware(struct i2c_client *client, const char *name);
60 #endif