summaryrefslogtreecommitdiff
path: root/firmware/target/hosted/ypr0/sc900776.h
blob: 32eb90f797a42dc061053822ac0bfd666c6c00a0 (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/* This file originates from the linux kernel provided in Samsung's YP-R0 Open
 * Source package.
 */

/*
* Bigbang project
* Copyright (c) 2009 VPS R&D Group, Samsung Electronics, Inc.
* All rights reserved.
*/

/**
* This file defines data structures and APIs for Freescale SC900776
*
* @name    sc900776.h
* @author  Eung Chan Kim (eungchan.kim@samsung.com)
* @version 0.1
* @see
*/

#ifndef __SC900776_H__
#define __SC900776_H__


typedef enum
{
	SC900776_DEVICE_ID = 0x01,		/* 01h		R   */
	SC900776_CONTROL,				/* 02h		R/W */
	SC900776_INTERRUPT1,			/* 03h		R/C */
	SC900776_INTERRUPT2,			/* 04h		R/C */
	SC900776_INTERRUPT_MASK1,		/* 05h		R/W */
	SC900776_INTERRUPT_MASK2,		/* 06h		R/W */
	SC900776_ADC_RESULT,			/* 07h		R   */
	SC900776_TIMING_SET1,			/* 08h		R/W */
	SC900776_TIMING_SET2,			/* 09h		R/W */
	SC900776_DEVICE_TYPE1,			/* 0Ah		R   */
	SC900776_DEVICE_TYPE2,			/* 0Bh		R   */
	SC900776_BUTTON1,				/* 0Ch		R/C */
	SC900776_BUTTON2,				/* 0Dh		R/C */
	/* 0Eh ~ 12h : reserved */
	SC900776_MANUAL_SWITCH1 = 0x13,	/* 13h		R/W */
	SC900776_MANUAL_SWITCH2, 		/* 14h		R/W */
	/* 15h ~ 1Fh : reserved */
	SC900776_FSL_STATUS = 0x20, 	/* 20h		R   */
	SC900776_FSL_CONTROL,			/* 21h		R/W */
	SC900776_TIME_DELAY,			/* 22h		R/W */
	SC900776_DEVICE_MODE,			/* 23h		R/W */

	SC900776_REG_MAX
} eSc900776_register_t;

typedef enum
{
	DEVICETYPE1_UNDEFINED = 0,
	DEVICETYPE1_USB,				// 0x04 0x00	// normal usb cable & ad200
	DEVICETYPE1_DEDICATED, 			// 0x40 0x00	// dedicated charger cable
	DEVICETYPE2_JIGUARTON,			// 0x00 0x08	// Anygate_UART jig
	DEVICETYPE2_JIGUSBOFF,			// 0x00 0x01	// USB jig(AS center)
	DEVICETYPE2_JIGUSBON,			// 0x00 0x02    // Anygate_USB jig with boot-on, not tested
} eMinivet_device_t;

/*
 * sc900776 register bit definitions
 */
#define MINIVET_DEVICETYPE1_USBOTG 		0x80	/* 1: a USBOTG device is attached */
#define MINIVET_DEVICETYPE1_DEDICATED 	0x40	/* 1: a dedicated charger is attached */
#define MINIVET_DEVICETYPE1_USBCHG 		0x20	/* 1: a USB charger is attached */
#define MINIVET_DEVICETYPE1_5WCHG 		0x10	/* 1: a 5-wire charger (type 1 or 2) is attached */
#define MINIVET_DEVICETYPE1_UART 		0x08	/* 1: a UART cable is attached */
#define MINIVET_DEVICETYPE1_USB 		0x04	/* 1: a USB host is attached */
#define MINIVET_DEVICETYPE1_AUDIO2 		0x02	/* 1: an audio accessory type 2 is attached */
#define MINIVET_DEVICETYPE1_AUDIO1 		0x01	/* 1: an audio accessory type 1 is attached */

#define MINIVET_DEVICETYPE2_AV			0x40	/* 1: an audio/video cable is attached */
#define MINIVET_DEVICETYPE2_TTY			0x20	/* 1: a TTY converter is attached */
#define MINIVET_DEVICETYPE2_PPD			0x10	/* 1: a phone powered device is attached */
#define MINIVET_DEVICETYPE2_JIGUARTON 	0x08	/* 1: a UART jig cable with the BOOT-on option is attached */
#define MINIVET_DEVICETYPE2_JIGUARTOFF 	0x04	/* 1: a UART jig cable with the BOOT-off option is attached */
#define MINIVET_DEVICETYPE2_JIGUSBON 	0x02	/* 1: a USB jig cable with the BOOT-on option is attached */
#define MINIVET_DEVICETYPE2_JIGUSBOFF 	0x01	/* 1: a USB jig cable with the BOOT-off option is attached */

#define MINIVET_FSLSTATUS_FETSTATUS		0x40	/* 1: The on status of the power MOSFET */
#define MINIVET_FSLSTATUS_IDDETEND		0x20	/* 1: ID resistance detection finished */
#define MINIVET_FSLSTATUS_VBUSDETEND	0x10	/* 1: VBUS power supply type identification completed */
#define MINIVET_FSLSTATUS_IDGND			0x08	/* 1: ID pin is shorted to ground */
#define MINIVET_FSLSTATUS_IDFLOAT		0x04	/* 1: ID line is floating */
#define MINIVET_FSLSTATUS_VBUSDET		0x02	/* 1: VBUS voltage is higher than the POR */
#define MINIVET_FSLSTATUS_ADCSTATUS		0x01	/* 1: ADC conversion completed */


#define SC900776_I2C_SLAVE_ADDR			0x25

typedef struct {
	unsigned char addr;
	unsigned char value;
}__attribute__((packed)) sMinivet_t;


#define DRV_IOCTL_MINIVET_MAGIC		'M'


typedef enum
{
	E_IOCTL_MINIVET_INIT = 0,
	E_IOCTL_MINIVET_WRITE_BYTE,
	E_IOCTL_MINIVET_READ_BYTE,
	E_IOCTL_MINIVET_DET_VBUS,
	E_IOCTL_MINIVET_MANUAL_USB,
	E_IOCTL_MINIVET_MANUAL_UART,

	E_IOCTL_MINIVET_MAX
} eSc900776_ioctl_t;

#define IOCTL_MINIVET_INIT 			_IO(DRV_IOCTL_MINIVET_MAGIC, E_IOCTL_MINIVET_INIT)
#define IOCTL_MINIVET_WRITE_BYTE 	_IOW(DRV_IOCTL_MINIVET_MAGIC, E_IOCTL_MINIVET_WRITE_BYTE, sMinivet_t)
#define IOCTL_MINIVET_READ_BYTE 	_IOR(DRV_IOCTL_MINIVET_MAGIC, E_IOCTL_MINIVET_READ_BYTE, sMinivet_t)
#define IOCTL_MINIVET_DET_VBUS 		_IO(DRV_IOCTL_MINIVET_MAGIC, E_IOCTL_MINIVET_DET_VBUS)
#define IOCTL_MINIVET_MANUAL_USB 	_IO(DRV_IOCTL_MINIVET_MAGIC, E_IOCTL_MINIVET_MANUAL_USB)
#define IOCTL_MINIVET_MANUAL_UART 	_IO(DRV_IOCTL_MINIVET_MAGIC, E_IOCTL_MINIVET_MANUAL_UART)


#ifndef __MINIVET_ENUM__
#define __MINIVET_ENUM__
enum
{
	EXT_PWR_UNPLUGGED = 0,
	EXT_PWR_PLUGGED,
	EXT_PWR_NOT_OVP,
	EXT_PWR_OVP,
};

#endif /* __MINIVET_ENUM__ */


#endif /* __MINIVET_IOCTL_H__ */