/* * 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; u32 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; u16 len; u16 addr; unsigned char payload[]; }; static inline u32 sigma_action_len(struct sigma_action *sa) { return (sa->len_hi << 16) | sa->len; } static inline size_t sigma_action_size(struct sigma_action *sa, u32 payload_len) { return sizeof(*sa) + payload_len + (payload_len % 2); } extern int process_sigma_firmware(struct i2c_client *client, const char *name); #endif