1646 case CPIA_COMMAND_GetColourParams:
1647 case CPIA_COMMAND_GetColourBalance:
1648 case CPIA_COMMAND_GetExposure:
1649 mutex_lock(&cam->param_lock);
1650 datasize=8;
1651 break;
1652 case CPIA_COMMAND_ReadMCPorts:
1653 case CPIA_COMMAND_ReadVCRegs:
1654 datasize = 4;
1655 break;
1656 default:
1657 datasize=0;
1658 break;
1659 }
1660
1661 cmd[0] = command>>8;
1662 cmd[1] = command&0xff;
1663 cmd[2] = a;
1664 cmd[3] = b;
1665 cmd[4] = c;
1666 cmd[5] = d;
1667 cmd[6] = datasize;
1668 cmd[7] = 0;
1669
1670 retval = cam->ops->transferCmd(cam->lowlevel_data, cmd, data);
1671 if (retval) {
1672 DBG("%x - failed, retval=%d\n", command, retval);
1673 if (command == CPIA_COMMAND_GetColourParams ||
1674 command == CPIA_COMMAND_GetColourBalance ||
1675 command == CPIA_COMMAND_GetExposure)
1676 mutex_unlock(&cam->param_lock);
1677 } else {
1678 switch(command) {
1679 case CPIA_COMMAND_GetCPIAVersion:
1680 cam->params.version.firmwareVersion = data[0];
1681 cam->params.version.firmwareRevision = data[1];
1682 cam->params.version.vcVersion = data[2];
1683 cam->params.version.vcRevision = data[3];
1684 break;
1685 case CPIA_COMMAND_GetPnPID:
1686 cam->params.pnpID.vendor = data[0]+(((u16)data[1])<<8);