android_kernel_cmhtcleo/arch/arm/mach-msm/htc_bluetooth.c
2010-08-27 11:19:57 +02:00

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