| Mike Frysinger | e359dc2 | 2011-03-22 16:34:40 -0700 | [diff] [blame] | 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 | u32 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 | u16 len; | 
|  | 44 | u16 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) | sa->len; | 
|  | 51 | } | 
|  | 52 |  | 
|  | 53 | static inline size_t sigma_action_size(struct sigma_action *sa, u32 payload_len) | 
|  | 54 | { | 
|  | 55 | return sizeof(*sa) + payload_len + (payload_len % 2); | 
|  | 56 | } | 
|  | 57 |  | 
|  | 58 | extern int process_sigma_firmware(struct i2c_client *client, const char *name); | 
|  | 59 |  | 
|  | 60 | #endif |