| /* |
| * 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; |
| __le32 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; |
| __le16 len; |
| __be16 addr; |
| unsigned char payload[]; |
| }; |
| |
| static inline u32 sigma_action_len(struct sigma_action *sa) |
| { |
| return (sa->len_hi << 16) | le16_to_cpu(sa->len); |
| } |
| |
| extern int process_sigma_firmware(struct i2c_client *client, const char *name); |
| |
| #endif |