62 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* arch/arm/mach-msm/htc_bluetooth.c
 | |
|  * 
 | |
|  * Code to extract Bluetooth bd_address information 
 | |
|  * from ATAG set up by the bootloader. 
 | |
|  *
 | |
|  * Copyright (C) 2009 HTC Corporation
 | |
|  * Author:Yomin Lin <yomin_lin@htc.com>
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #include <linux/kernel.h>
 | |
| #include <linux/init.h>
 | |
| #include <linux/platform_device.h>
 | |
| 
 | |
| #include <asm/setup.h>
 | |
| 
 | |
| /* configuration tags specific to Bluetooth*/
 | |
| #define ATAG_BLUETOOTH	  0x43294329
 | |
| 
 | |
| #define ATAG_BT_DEBUG
 | |
| #define MAX_BT_SIZE 0x8U
 | |
| static unsigned char bt_bd_ram[MAX_BT_SIZE];
 | |
| 
 | |
| unsigned char *get_bt_bd_ram(void)
 | |
| {
 | |
| 	return (bt_bd_ram);
 | |
| }
 | |
| 
 | |
| EXPORT_SYMBOL(get_bt_bd_ram);
 | |
| #ifdef ATAG_BT_DEBUG
 | |
| static int __init parse_tag_bt(const struct tag *tag)
 | |
| {
 | |
| 	unsigned char *dptr=(unsigned char *)(&tag->u);
 | |
| 	unsigned size;
 | |
|     unsigned i;
 | |
| 	unsigned char *ptr;
 | |
| 
 | |
| 	size=min((tag->hdr.size-2)*sizeof(__u32),MAX_BT_SIZE);
 | |
| 
 | |
| 	ptr=dptr;
 | |
|         printk("BT Data size= %d, 0x%x,", tag->hdr.size, tag->hdr.tag);
 | |
| 	for(i=0;i<size;i++)
 | |
| 	{
 | |
| 		printk("%02x,", *ptr++);
 | |
| 	}
 | |
| 
 | |
|         memcpy((void *)bt_bd_ram ,(void *)dptr, size);
 | |
|         return 0;
 | |
| }
 | |
| #else
 | |
| static int __init parse_tag_bt(const struct tag *tag)
 | |
| {
 | |
| 	unsigned char *dptr=(unsigned char *)(&tag->u);
 | |
| 	unsigned size;
 | |
| 
 | |
|         size=min((tag->hdr.size-2)*sizeof(__u32),MAX_BT_SIZE);
 | |
|         memcpy((void *)bt_bd_ram ,(void *)dptr, size);
 | |
|         return 0;
 | |
| }
 | |
| #endif
 | |
|  __tagtable(ATAG_BLUETOOTH, parse_tag_bt);
 |