|
@@ -4441,9 +4441,7 @@ static void tibetCS16_init(struct bttv *btv)
|
|
|
* is {3, 0, 2, 1}, i.e. the first controller to be detected is logical
|
|
|
* unit 3, the second (which is the master) is logical unit 0, etc.
|
|
|
* We need to maintain the status of the analog switch (which of the 16
|
|
|
- * cameras is connected to which of the 4 controllers). Rather than
|
|
|
- * add to the bttv structure for this, we use the data reserved for
|
|
|
- * the mbox (unused for this card type).
|
|
|
+ * cameras is connected to which of the 4 controllers) in sw_status array.
|
|
|
*/
|
|
|
|
|
|
/*
|
|
@@ -4478,7 +4476,6 @@ static void kodicom4400r_write(struct bttv *btv,
|
|
|
*/
|
|
|
static void kodicom4400r_muxsel(struct bttv *btv, unsigned int input)
|
|
|
{
|
|
|
- char *sw_status;
|
|
|
int xaddr, yaddr;
|
|
|
struct bttv *mctlr;
|
|
|
static unsigned char map[4] = {3, 0, 2, 1};
|
|
@@ -4489,14 +4486,13 @@ static void kodicom4400r_muxsel(struct bttv *btv, unsigned int input)
|
|
|
}
|
|
|
yaddr = (btv->c.nr - mctlr->c.nr + 1) & 3; /* the '&' is for safety */
|
|
|
yaddr = map[yaddr];
|
|
|
- sw_status = (char *)(&mctlr->mbox_we);
|
|
|
xaddr = input & 0xf;
|
|
|
/* Check if the controller/camera pair has changed, else ignore */
|
|
|
- if (sw_status[yaddr] != xaddr)
|
|
|
+ if (mctlr->sw_status[yaddr] != xaddr)
|
|
|
{
|
|
|
/* "open" the old switch, "close" the new one, save the new */
|
|
|
- kodicom4400r_write(mctlr, sw_status[yaddr], yaddr, 0);
|
|
|
- sw_status[yaddr] = xaddr;
|
|
|
+ kodicom4400r_write(mctlr, mctlr->sw_status[yaddr], yaddr, 0);
|
|
|
+ mctlr->sw_status[yaddr] = xaddr;
|
|
|
kodicom4400r_write(mctlr, xaddr, yaddr, 1);
|
|
|
}
|
|
|
}
|
|
@@ -4509,7 +4505,6 @@ static void kodicom4400r_muxsel(struct bttv *btv, unsigned int input)
|
|
|
*/
|
|
|
static void kodicom4400r_init(struct bttv *btv)
|
|
|
{
|
|
|
- char *sw_status = (char *)(&btv->mbox_we);
|
|
|
int ix;
|
|
|
|
|
|
gpio_inout(0x0003ff, 0x0003ff);
|
|
@@ -4517,7 +4512,7 @@ static void kodicom4400r_init(struct bttv *btv)
|
|
|
gpio_write(0);
|
|
|
/* Preset camera 0 to the 4 controllers */
|
|
|
for (ix = 0; ix < 4; ix++) {
|
|
|
- sw_status[ix] = ix;
|
|
|
+ btv->sw_status[ix] = ix;
|
|
|
kodicom4400r_write(btv, ix, ix, 1);
|
|
|
}
|
|
|
/*
|
|
@@ -4794,7 +4789,6 @@ static void gv800s_write(struct bttv *btv,
|
|
|
static void gv800s_muxsel(struct bttv *btv, unsigned int input)
|
|
|
{
|
|
|
struct bttv *mctlr;
|
|
|
- char *sw_status;
|
|
|
int xaddr, yaddr;
|
|
|
static unsigned int map[4][4] = { { 0x0, 0x4, 0xa, 0x6 },
|
|
|
{ 0x1, 0x5, 0xb, 0x7 },
|
|
@@ -4807,14 +4801,13 @@ static void gv800s_muxsel(struct bttv *btv, unsigned int input)
|
|
|
return;
|
|
|
}
|
|
|
yaddr = (btv->c.nr - mctlr->c.nr) & 3;
|
|
|
- sw_status = (char *)(&mctlr->mbox_we);
|
|
|
xaddr = map[yaddr][input] & 0xf;
|
|
|
|
|
|
/* Check if the controller/camera pair has changed, ignore otherwise */
|
|
|
- if (sw_status[yaddr] != xaddr) {
|
|
|
+ if (mctlr->sw_status[yaddr] != xaddr) {
|
|
|
/* disable the old switch, enable the new one and save status */
|
|
|
- gv800s_write(mctlr, sw_status[yaddr], yaddr, 0);
|
|
|
- sw_status[yaddr] = xaddr;
|
|
|
+ gv800s_write(mctlr, mctlr->sw_status[yaddr], yaddr, 0);
|
|
|
+ mctlr->sw_status[yaddr] = xaddr;
|
|
|
gv800s_write(mctlr, xaddr, yaddr, 1);
|
|
|
}
|
|
|
}
|
|
@@ -4822,7 +4815,6 @@ static void gv800s_muxsel(struct bttv *btv, unsigned int input)
|
|
|
/* GeoVision GV-800(S) "master" chip init */
|
|
|
static void gv800s_init(struct bttv *btv)
|
|
|
{
|
|
|
- char *sw_status = (char *)(&btv->mbox_we);
|
|
|
int ix;
|
|
|
|
|
|
gpio_inout(0xf107f, 0xf107f);
|
|
@@ -4831,7 +4823,7 @@ static void gv800s_init(struct bttv *btv)
|
|
|
|
|
|
/* Preset camera 0 to the 4 controllers */
|
|
|
for (ix = 0; ix < 4; ix++) {
|
|
|
- sw_status[ix] = ix;
|
|
|
+ btv->sw_status[ix] = ix;
|
|
|
gv800s_write(btv, ix, ix, 1);
|
|
|
}
|
|
|
|