05f12e0877
Voltage can be read using as3543 adc (i.e. ascodec api, on this target implemented via ioctl()). TODO: Look into possibly controlling charging more by re-using powermgmt-ascodec.c. However, charging seems to be controlled by the kernel, so may not be needed. Charger state can be read using /dev/minivet. It allows to differentiate between wall charger and usb charging, but that's not implemented (is it even worthwhile?) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31470 a1c6a512-1295-4272-9138-f99709370657
134 lines
4.7 KiB
C
134 lines
4.7 KiB
C
/* 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__ */
|