aboutsummaryrefslogtreecommitdiff
path: root/drivers/power/stress_test.c
blob: bcf5d838a0561b2b62ee39ddcd6a7143eb0a35b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#define BATTERY_IOC_MAGIC	0xF9
#define BATTERY_IOC_MAXNR	15
#define BATTERY_POLLING_DATA _IOR(BATTERY_IOC_MAGIC, 1,int) //magic, ioctl index, parameter
#define BATTERY_START_POLLING _IOR(BATTERY_IOC_MAGIC, 2,int) //magic, ioctl index, parameter
#define BATTERY_POWER_KEY _IOR(BATTERY_IOC_MAGIC, 3,int*) //magic, ioctl index, parameter
#define BATTERY_DOCKING_STATUS  _IOR(BATTERY_IOC_MAGIC, 4,int*)
#define BATTERY_ENABLE_CHARGER     _IOR(BATTERY_IOC_MAGIC, 5,int)
#define BATTERY_ENABLE_BACKLIGHT     _IOR(BATTERY_IOC_MAGIC, 6,int)
#define BATTERY_USB_STATUS  	          _IOR(BATTERY_IOC_MAGIC, 7,int*)
#define BATTERY_REBOOT_TEST_TOOL      _IOR(BATTERY_IOC_MAGIC, 8,int)
#define BATTERY_STATUS 	                         _IOR(BATTERY_IOC_MAGIC, 9,int*)
#define BOOT_REASON	                         _IOR(BATTERY_IOC_MAGIC, 10,int*)

#define DACKING_INSTERTION (1<0)
#define DACKING_BATTERY_HIGHER_10  (1<1)

#define TEST_END (0)
#define START_NORMAL (1)
#define START_HEAVY (2)
#define IOCTL_ERROR (-1)
extern unsigned int boot_reason;
static void battery_strees_test(struct work_struct *work)
{
	int ret=0;
	int rt_value;
       struct bq27541_device_info *battery_device =container_of(work, struct bq27541_device_info, battery_stress_test.work);

	ret = bq27541_smbus_read_data(REG_STATUS,0,&rt_value);
	if (ret < 0) {
		printk("battery_strees_test: i2c read for REG_STATUS failed  ret=%d\n", ret);
	}
	queue_delayed_work(battery_work_queue , &battery_device->battery_stress_test, 2*HZ);
}

long battery_ioctl(struct file *filp,unsigned int cmd, unsigned long arg)
{
       int fc=0;
	int battery_status=0;
	if (_IOC_TYPE(cmd) == BATTERY_IOC_MAGIC ){
	     //printk("  battery_ioctl vaild magic \n");
	}
	else	
		return -ENOTTY;
	switch(cmd)
	{
	       case BATTERY_POLLING_DATA:
		    if ((arg==START_NORMAL)||(arg==START_HEAVY)){
				 printk(" BATTERY:  battery stress test start (%s)\n",(arg==START_NORMAL)?"normal":"heavy");
				 queue_delayed_work(battery_work_queue , &bq27541_device->battery_stress_test, 2*HZ);
			}
		else{
				 printk(" BATTERY:  battery stress test end\n");
				 cancel_delayed_work_sync(&bq27541_device->battery_stress_test);
			}
		break;
               case BATTERY_REBOOT_TEST_TOOL:
			break;
		case BOOT_REASON:
			(*(int*)arg)=boot_reason;
			printk(" BATTERY: BOOT_REASON=%u\n",(*(int*)arg));
			break;
	  default:  /* redundant, as cmd was checked against MAXNR */
	           printk(" BATTERY: unknow i2c  stress test  command cmd=%x arg=%lu\n",cmd,arg);
		    printk(" BATTERY_POLLING_DATA=%x\n",BATTERY_POLLING_DATA);
		return -ENOTTY;
	}
return 0;
}
int battery_open(struct inode *inode, struct file *filp)
{
	return 0;
}
struct file_operations battery_fops = {
	.owner =    THIS_MODULE,
	.unlocked_ioctl =   battery_ioctl,
	.open =   battery_open,
};