Commit 907d109b authored by Frank Schaefer's avatar Frank Schaefer Committed by Mauro Carvalho Chehab

[media] em28xx: extend GPIO register definitions for the em25xx, em276x/7x/8x, em2874/174/84

The em25xx/em276x/7x/8x provides 4 GPIO register sets,
each of them consisting of separate read and a write registers.
The same registers are also used by the em2874/174/84.
Signed-off-by: default avatarFrank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent c778edb5
......@@ -285,14 +285,14 @@ static struct em28xx_reg_seq dikom_dk300_digital[] = {
/* Reset for the most [digital] boards */
static struct em28xx_reg_seq leadership_digital[] = {
{EM2874_R80_GPIO, 0x70, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0x70, 0xff, 10},
{ -1, -1, -1, -1},
};
static struct em28xx_reg_seq leadership_reset[] = {
{EM2874_R80_GPIO, 0xf0, 0xff, 10},
{EM2874_R80_GPIO, 0xb0, 0xff, 10},
{EM2874_R80_GPIO, 0xf0, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0xf0, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0xb0, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0xf0, 0xff, 10},
{ -1, -1, -1, -1},
};
......@@ -301,25 +301,25 @@ static struct em28xx_reg_seq leadership_reset[] = {
* GPIO_7 - LED
*/
static struct em28xx_reg_seq pctv_290e[] = {
{EM2874_R80_GPIO, 0x00, 0xff, 80},
{EM2874_R80_GPIO, 0x40, 0xff, 80}, /* GPIO_6 = 1 */
{EM2874_R80_GPIO, 0xc0, 0xff, 80}, /* GPIO_7 = 1 */
{EM2874_R80_GPIO_P0_CTRL, 0x00, 0xff, 80},
{EM2874_R80_GPIO_P0_CTRL, 0x40, 0xff, 80}, /* GPIO_6 = 1 */
{EM2874_R80_GPIO_P0_CTRL, 0xc0, 0xff, 80}, /* GPIO_7 = 1 */
{-1, -1, -1, -1},
};
#if 0
static struct em28xx_reg_seq terratec_h5_gpio[] = {
{EM28XX_R08_GPIO, 0xff, 0xff, 10},
{EM2874_R80_GPIO, 0xf6, 0xff, 100},
{EM2874_R80_GPIO, 0xf2, 0xff, 50},
{EM2874_R80_GPIO, 0xf6, 0xff, 50},
{EM2874_R80_GPIO_P0_CTRL, 0xf6, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xf2, 0xff, 50},
{EM2874_R80_GPIO_P0_CTRL, 0xf6, 0xff, 50},
{ -1, -1, -1, -1},
};
static struct em28xx_reg_seq terratec_h5_digital[] = {
{EM2874_R80_GPIO, 0xf6, 0xff, 10},
{EM2874_R80_GPIO, 0xe6, 0xff, 100},
{EM2874_R80_GPIO, 0xa6, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0xf6, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0xe6, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xa6, 0xff, 10},
{ -1, -1, -1, -1},
};
#endif
......@@ -335,39 +335,39 @@ static struct em28xx_reg_seq terratec_h5_digital[] = {
* GPIO_7 - LED (green LED)
*/
static struct em28xx_reg_seq pctv_460e[] = {
{EM2874_R80_GPIO, 0x01, 0xff, 50},
{EM2874_R80_GPIO_P0_CTRL, 0x01, 0xff, 50},
{0x0d, 0xff, 0xff, 50},
{EM2874_R80_GPIO, 0x41, 0xff, 50}, /* GPIO_6=1 */
{EM2874_R80_GPIO_P0_CTRL, 0x41, 0xff, 50}, /* GPIO_6=1 */
{0x0d, 0x42, 0xff, 50},
{EM2874_R80_GPIO, 0x61, 0xff, 50}, /* GPIO_5=1 */
{EM2874_R80_GPIO_P0_CTRL, 0x61, 0xff, 50}, /* GPIO_5=1 */
{ -1, -1, -1, -1},
};
static struct em28xx_reg_seq c3tech_digital_duo_digital[] = {
{EM2874_R80_GPIO, 0xff, 0xff, 10},
{EM2874_R80_GPIO, 0xfd, 0xff, 10}, /* xc5000 reset */
{EM2874_R80_GPIO, 0xf9, 0xff, 35},
{EM2874_R80_GPIO, 0xfd, 0xff, 10},
{EM2874_R80_GPIO, 0xff, 0xff, 10},
{EM2874_R80_GPIO, 0xfe, 0xff, 10},
{EM2874_R80_GPIO, 0xbe, 0xff, 10},
{EM2874_R80_GPIO, 0xfe, 0xff, 20},
{EM2874_R80_GPIO_P0_CTRL, 0xff, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0xfd, 0xff, 10}, /* xc5000 reset */
{EM2874_R80_GPIO_P0_CTRL, 0xf9, 0xff, 35},
{EM2874_R80_GPIO_P0_CTRL, 0xfd, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0xff, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0xfe, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0xbe, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0xfe, 0xff, 20},
{ -1, -1, -1, -1},
};
#if 0
static struct em28xx_reg_seq hauppauge_930c_gpio[] = {
{EM2874_R80_GPIO, 0x6f, 0xff, 10},
{EM2874_R80_GPIO, 0x4f, 0xff, 10}, /* xc5000 reset */
{EM2874_R80_GPIO, 0x6f, 0xff, 10},
{EM2874_R80_GPIO, 0x4f, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0x6f, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0x4f, 0xff, 10}, /* xc5000 reset */
{EM2874_R80_GPIO_P0_CTRL, 0x6f, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0x4f, 0xff, 10},
{ -1, -1, -1, -1},
};
static struct em28xx_reg_seq hauppauge_930c_digital[] = {
{EM2874_R80_GPIO, 0xf6, 0xff, 10},
{EM2874_R80_GPIO, 0xe6, 0xff, 100},
{EM2874_R80_GPIO, 0xa6, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0xf6, 0xff, 10},
{EM2874_R80_GPIO_P0_CTRL, 0xe6, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xa6, 0xff, 10},
{ -1, -1, -1, -1},
};
#endif
......@@ -378,9 +378,9 @@ static struct em28xx_reg_seq hauppauge_930c_digital[] = {
* GPIO_7 - LED, 0=active
*/
static struct em28xx_reg_seq maxmedia_ub425_tc[] = {
{EM2874_R80_GPIO, 0x83, 0xff, 100},
{EM2874_R80_GPIO, 0xc3, 0xff, 100}, /* GPIO_6 = 1 */
{EM2874_R80_GPIO, 0x43, 0xff, 000}, /* GPIO_7 = 0 */
{EM2874_R80_GPIO_P0_CTRL, 0x83, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xc3, 0xff, 100}, /* GPIO_6 = 1 */
{EM2874_R80_GPIO_P0_CTRL, 0x43, 0xff, 000}, /* GPIO_7 = 0 */
{-1, -1, -1, -1},
};
......@@ -391,9 +391,9 @@ static struct em28xx_reg_seq maxmedia_ub425_tc[] = {
* GPIO_7: LED, 1=active
*/
static struct em28xx_reg_seq pctv_510e[] = {
{EM2874_R80_GPIO, 0x10, 0xff, 100},
{EM2874_R80_GPIO, 0x14, 0xff, 100}, /* GPIO_2 = 1 */
{EM2874_R80_GPIO, 0x54, 0xff, 050}, /* GPIO_6 = 1 */
{EM2874_R80_GPIO_P0_CTRL, 0x10, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0x14, 0xff, 100}, /* GPIO_2 = 1 */
{EM2874_R80_GPIO_P0_CTRL, 0x54, 0xff, 050}, /* GPIO_6 = 1 */
{ -1, -1, -1, -1},
};
......@@ -404,10 +404,10 @@ static struct em28xx_reg_seq pctv_510e[] = {
* GPIO_7: LED, 1=active
*/
static struct em28xx_reg_seq pctv_520e[] = {
{EM2874_R80_GPIO, 0x10, 0xff, 100},
{EM2874_R80_GPIO, 0x14, 0xff, 100}, /* GPIO_2 = 1 */
{EM2874_R80_GPIO, 0x54, 0xff, 050}, /* GPIO_6 = 1 */
{EM2874_R80_GPIO, 0xd4, 0xff, 000}, /* GPIO_7 = 1 */
{EM2874_R80_GPIO_P0_CTRL, 0x10, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0x14, 0xff, 100}, /* GPIO_2 = 1 */
{EM2874_R80_GPIO_P0_CTRL, 0x54, 0xff, 050}, /* GPIO_6 = 1 */
{EM2874_R80_GPIO_P0_CTRL, 0xd4, 0xff, 000}, /* GPIO_7 = 1 */
{ -1, -1, -1, -1},
};
......@@ -2947,13 +2947,13 @@ static int em28xx_init_dev(struct em28xx *dev, struct usb_device *udev,
break;
case CHIP_ID_EM2874:
chip_name = "em2874";
dev->reg_gpio_num = EM2874_R80_GPIO;
dev->reg_gpio_num = EM2874_R80_GPIO_P0_CTRL;
dev->wait_after_write = 0;
dev->eeprom_addrwidth_16bit = 1;
break;
case CHIP_ID_EM28174:
chip_name = "em28174";
dev->reg_gpio_num = EM2874_R80_GPIO;
dev->reg_gpio_num = EM2874_R80_GPIO_P0_CTRL;
dev->wait_after_write = 0;
dev->eeprom_addrwidth_16bit = 1;
break;
......@@ -2963,7 +2963,7 @@ static int em28xx_init_dev(struct em28xx *dev, struct usb_device *udev,
break;
case CHIP_ID_EM2884:
chip_name = "em2884";
dev->reg_gpio_num = EM2874_R80_GPIO;
dev->reg_gpio_num = EM2874_R80_GPIO_P0_CTRL;
dev->wait_after_write = 0;
dev->eeprom_addrwidth_16bit = 1;
break;
......
......@@ -421,23 +421,23 @@ static void hauppauge_hvr930c_init(struct em28xx *dev)
int i;
struct em28xx_reg_seq hauppauge_hvr930c_init[] = {
{EM2874_R80_GPIO, 0xff, 0xff, 0x65},
{EM2874_R80_GPIO, 0xfb, 0xff, 0x32},
{EM2874_R80_GPIO, 0xff, 0xff, 0xb8},
{EM2874_R80_GPIO_P0_CTRL, 0xff, 0xff, 0x65},
{EM2874_R80_GPIO_P0_CTRL, 0xfb, 0xff, 0x32},
{EM2874_R80_GPIO_P0_CTRL, 0xff, 0xff, 0xb8},
{ -1, -1, -1, -1},
};
struct em28xx_reg_seq hauppauge_hvr930c_end[] = {
{EM2874_R80_GPIO, 0xef, 0xff, 0x01},
{EM2874_R80_GPIO, 0xaf, 0xff, 0x65},
{EM2874_R80_GPIO, 0xef, 0xff, 0x76},
{EM2874_R80_GPIO, 0xef, 0xff, 0x01},
{EM2874_R80_GPIO, 0xcf, 0xff, 0x0b},
{EM2874_R80_GPIO, 0xef, 0xff, 0x40},
{EM2874_R80_GPIO, 0xcf, 0xff, 0x65},
{EM2874_R80_GPIO, 0xef, 0xff, 0x65},
{EM2874_R80_GPIO, 0xcf, 0xff, 0x0b},
{EM2874_R80_GPIO, 0xef, 0xff, 0x65},
{EM2874_R80_GPIO_P0_CTRL, 0xef, 0xff, 0x01},
{EM2874_R80_GPIO_P0_CTRL, 0xaf, 0xff, 0x65},
{EM2874_R80_GPIO_P0_CTRL, 0xef, 0xff, 0x76},
{EM2874_R80_GPIO_P0_CTRL, 0xef, 0xff, 0x01},
{EM2874_R80_GPIO_P0_CTRL, 0xcf, 0xff, 0x0b},
{EM2874_R80_GPIO_P0_CTRL, 0xef, 0xff, 0x40},
{EM2874_R80_GPIO_P0_CTRL, 0xcf, 0xff, 0x65},
{EM2874_R80_GPIO_P0_CTRL, 0xef, 0xff, 0x65},
{EM2874_R80_GPIO_P0_CTRL, 0xcf, 0xff, 0x0b},
{EM2874_R80_GPIO_P0_CTRL, 0xef, 0xff, 0x65},
{ -1, -1, -1, -1},
};
......@@ -488,15 +488,15 @@ static void terratec_h5_init(struct em28xx *dev)
int i;
struct em28xx_reg_seq terratec_h5_init[] = {
{EM28XX_R08_GPIO, 0xff, 0xff, 10},
{EM2874_R80_GPIO, 0xf6, 0xff, 100},
{EM2874_R80_GPIO, 0xf2, 0xff, 50},
{EM2874_R80_GPIO, 0xf6, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xf6, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xf2, 0xff, 50},
{EM2874_R80_GPIO_P0_CTRL, 0xf6, 0xff, 100},
{ -1, -1, -1, -1},
};
struct em28xx_reg_seq terratec_h5_end[] = {
{EM2874_R80_GPIO, 0xe6, 0xff, 100},
{EM2874_R80_GPIO, 0xa6, 0xff, 50},
{EM2874_R80_GPIO, 0xe6, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xe6, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xa6, 0xff, 50},
{EM2874_R80_GPIO_P0_CTRL, 0xe6, 0xff, 100},
{ -1, -1, -1, -1},
};
struct {
......@@ -544,14 +544,14 @@ static void terratec_htc_stick_init(struct em28xx *dev)
*/
struct em28xx_reg_seq terratec_htc_stick_init[] = {
{EM28XX_R08_GPIO, 0xff, 0xff, 10},
{EM2874_R80_GPIO, 0xf6, 0xff, 100},
{EM2874_R80_GPIO, 0xe6, 0xff, 50},
{EM2874_R80_GPIO, 0xf6, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xf6, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xe6, 0xff, 50},
{EM2874_R80_GPIO_P0_CTRL, 0xf6, 0xff, 100},
{ -1, -1, -1, -1},
};
struct em28xx_reg_seq terratec_htc_stick_end[] = {
{EM2874_R80_GPIO, 0xb6, 0xff, 100},
{EM2874_R80_GPIO, 0xf6, 0xff, 50},
{EM2874_R80_GPIO_P0_CTRL, 0xb6, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xf6, 0xff, 50},
{ -1, -1, -1, -1},
};
......@@ -591,15 +591,15 @@ static void terratec_htc_usb_xs_init(struct em28xx *dev)
struct em28xx_reg_seq terratec_htc_usb_xs_init[] = {
{EM28XX_R08_GPIO, 0xff, 0xff, 10},
{EM2874_R80_GPIO, 0xb2, 0xff, 100},
{EM2874_R80_GPIO, 0xb2, 0xff, 50},
{EM2874_R80_GPIO, 0xb6, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xb2, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xb2, 0xff, 50},
{EM2874_R80_GPIO_P0_CTRL, 0xb6, 0xff, 100},
{ -1, -1, -1, -1},
};
struct em28xx_reg_seq terratec_htc_usb_xs_end[] = {
{EM2874_R80_GPIO, 0xa6, 0xff, 100},
{EM2874_R80_GPIO, 0xa6, 0xff, 50},
{EM2874_R80_GPIO, 0xe6, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xa6, 0xff, 100},
{EM2874_R80_GPIO_P0_CTRL, 0xa6, 0xff, 50},
{EM2874_R80_GPIO_P0_CTRL, 0xe6, 0xff, 100},
{ -1, -1, -1, -1},
};
......
......@@ -193,7 +193,20 @@
#define EM2874_R50_IR_CONFIG 0x50
#define EM2874_R51_IR 0x51
#define EM2874_R5F_TS_ENABLE 0x5f
#define EM2874_R80_GPIO 0x80
/* em2874/174/84, em25xx, em276x/7x/8x GPIO registers */
/*
* NOTE: not all ports are bonded out;
* Some ports are multiplexed with special function I/O
*/
#define EM2874_R80_GPIO_P0_CTRL 0x80
#define EM2874_R81_GPIO_P1_CTRL 0x81
#define EM2874_R82_GPIO_P2_CTRL 0x82
#define EM2874_R83_GPIO_P3_CTRL 0x83
#define EM2874_R84_GPIO_P0_STATE 0x84
#define EM2874_R85_GPIO_P1_STATE 0x85
#define EM2874_R86_GPIO_P2_STATE 0x86
#define EM2874_R87_GPIO_P3_STATE 0x87
/* em2874 IR config register (0x50) */
#define EM2874_IR_NEC 0x00
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment