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);
|