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__ */
|