camera: enough stub to pass firmware init
This commit is contained in:
parent
62a605cd92
commit
28a9c7d9d1
|
@ -61,6 +61,9 @@ void DSi_Camera::ResetCam()
|
|||
DataPos = 0;
|
||||
RegAddr = 0;
|
||||
RegData = 0;
|
||||
|
||||
PLLCnt = 0;
|
||||
StandbyCnt = 0x4029; // checkme
|
||||
}
|
||||
|
||||
|
||||
|
@ -130,7 +133,11 @@ u16 DSi_Camera::ReadReg(u16 addr)
|
|||
{
|
||||
switch (addr)
|
||||
{
|
||||
case 0x301A: return 0x0002; // HAX
|
||||
case 0x0000: return 0x2280; // chip ID
|
||||
case 0x0014: return PLLCnt;
|
||||
case 0x0018: return StandbyCnt;
|
||||
|
||||
case 0x301A: return ((~StandbyCnt) & 0x4000) >> 12;
|
||||
}
|
||||
|
||||
printf("DSi_Camera%d: unknown read %04X\n", Num, addr);
|
||||
|
@ -139,5 +146,21 @@ u16 DSi_Camera::ReadReg(u16 addr)
|
|||
|
||||
void DSi_Camera::WriteReg(u16 addr, u16 val)
|
||||
{
|
||||
switch (addr)
|
||||
{
|
||||
case 0x0014:
|
||||
// shouldn't be instant either?
|
||||
val &= 0x7FFF;
|
||||
val |= ((val & 0x0002) << 14);
|
||||
PLLCnt = val;
|
||||
return;
|
||||
case 0x0018:
|
||||
// TODO: this shouldn't be instant, but uh
|
||||
val &= 0x003F;
|
||||
val |= ((val & 0x0001) << 14);
|
||||
StandbyCnt = val;
|
||||
return;
|
||||
}
|
||||
|
||||
printf("DSi_Camera%d: unknown write %04X %04X\n", Num, addr, val);
|
||||
}
|
||||
|
|
|
@ -46,6 +46,9 @@ private:
|
|||
|
||||
u16 ReadReg(u16 addr);
|
||||
void WriteReg(u16 addr, u16 val);
|
||||
|
||||
u16 PLLCnt;
|
||||
u16 StandbyCnt;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -156,7 +156,7 @@ void Reset()
|
|||
|
||||
void WriteCnt(u8 val)
|
||||
{
|
||||
//printf("I2C: write CNT %02X\n", val);
|
||||
//printf("I2C: write CNT %02X, %08X\n", val, NDS::GetPC(1));
|
||||
|
||||
// TODO: check ACK flag
|
||||
// TODO: transfer delay
|
||||
|
@ -179,11 +179,11 @@ void WriteCnt(u8 val)
|
|||
case 0x7A: Data = DSi_Camera1->Read(islast); break;
|
||||
default:
|
||||
printf("I2C: read on unknown device %02X, cnt=%02X, data=%02X, last=%d\n", Device, val, 0, islast);
|
||||
Data = 0;
|
||||
Data = 0xFF;
|
||||
break;
|
||||
}
|
||||
|
||||
printf("I2C read, device=%02X, cnt=%02X, data=%02X, last=%d\n", Device, val, Data, islast);
|
||||
//printf("I2C read, device=%02X, cnt=%02X, data=%02X, last=%d\n", Device, val, Data, islast);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -194,7 +194,7 @@ void WriteCnt(u8 val)
|
|||
if (val & (1<<1))
|
||||
{
|
||||
Device = Data & 0xFE;
|
||||
printf("I2C: %s start, device=%02X\n", (Data&0x01)?"read":"write", Device);
|
||||
//printf("I2C: %s start, device=%02X\n", (Data&0x01)?"read":"write", Device);
|
||||
|
||||
switch (Device)
|
||||
{
|
||||
|
@ -203,13 +203,13 @@ void WriteCnt(u8 val)
|
|||
case 0x7A: DSi_Camera1->Start(); break;
|
||||
default:
|
||||
printf("I2C: %s start on unknown device %02X\n", (Data&0x01)?"read":"write", Device);
|
||||
ack = false;
|
||||
//ack = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("I2C write, device=%02X, cnt=%02X, data=%02X, last=%d\n", Device, val, Data, islast);
|
||||
//printf("I2C write, device=%02X, cnt=%02X, data=%02X, last=%d\n", Device, val, Data, islast);
|
||||
|
||||
switch (Device)
|
||||
{
|
||||
|
@ -218,7 +218,7 @@ void WriteCnt(u8 val)
|
|||
case 0x7A: DSi_Camera1->Write(Data, islast); break;
|
||||
default:
|
||||
printf("I2C: write on unknown device %02X, cnt=%02X, data=%02X, last=%d\n", Device, val, Data, islast);
|
||||
ack = false;
|
||||
//ack = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue