1struct platform_device; 2typedef unsigned long __kernel_size_t; 3typedef unsigned short __u16; 4typedef unsigned int __u32; 5typedef unsigned char u8; 6typedef unsigned short u16; 7typedef __kernel_size_t size_t; 8typedef __u32 uint32_t; 9static inline __attribute__ ((always_inline)) 10uint32_t __attribute__ ((pure)) bfin_dspid (void) 11{ 12 return ( { 13 uint32_t __v; __v;} 14 ); 15} 16struct list_head { 17 struct list_head *next, *prev; 18}; 19struct page { 20 union { 21 }; 22 struct list_head lru; 23}; 24struct device_driver { 25 const char *name; 26 struct module *owner; 27}; 28struct fb_info { 29 struct device *dev; 30}; 31struct platform_driver { 32 int (*probe) (struct platform_device *); 33 int (*remove) (struct platform_device *); 34 struct device_driver driver; 35}; 36struct firmware { 37 size_t size; 38 const u8 *data; 39}; 40struct metronomefb_par { 41 struct fb_info *info; 42}; 43struct waveform_hdr { 44 u8 trc; 45}; 46static u8 calc_cksum (int start, int end, u8 * mem) 47{ 48 u8 tmp = 0; 49 int i; 50 for (i = start; i < end; i++) 51 tmp += mem[i]; 52 return tmp; 53} 54extern struct waveform_hdr *wfm_hdr; 55extern int wmta; 56 57static int 58load_waveform (u8 * mem, size_t size, int m, int t, struct metronomefb_par *par) 59{ 60 int tta; 61 int trn = 0; 62 int i; 63 u8 cksum; 64 int cksum_idx; 65 struct device *dev = par->info->dev; 66 for (i = 0; i <= sizeof (*wfm_hdr) + wfm_hdr->trc; i++) { 67 if (mem[i] > t) { 68 trn = i - sizeof (*wfm_hdr) - 1; 69 } 70 } 71 tta = * (mem + wmta + m * 4) & 0x00FFFFFF; 72 cksum_idx = tta + trn * 4 + 3; 73 cksum = calc_cksum (cksum_idx - 3, cksum_idx, mem); 74 if (cksum != mem[cksum_idx]) { 75 abort(); 76 } 77} 78extern struct firmware *fw_entry; 79extern struct metronomefb_par *par; 80 81int metronomefb_probe (struct platform_device *dev) 82{ 83 return load_waveform ((u8 *) fw_entry->data, fw_entry->size, 3, 31, par); 84} 85