1/*
2 * Copyright 2004-2008, François Revol, <revol@free.fr>.
3 * Distributed under the terms of the MIT License.
4 */
5
6#include "CamDebug.h"
7#include "CamSensor.h"
8#include "addons/sonix/SonixCamDevice.h"
9
10//XXX: unfinished!
11
12static const uint8 sProbeAddressList[] = {
13	0x01,0x02,0x03,0x04,0x05,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10
14};
15static const uint8 sProbeMatchList[] = {
16	0x70,0x02,0x12,0x05,0x05,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x06
17};
18
19class PAS106BSensor : public CamSensor {
20public:
21	PAS106BSensor(CamDevice *_camera);
22	~PAS106BSensor();
23	status_t	Probe();
24	const char*	Name();
25
26	virtual bool		Use400kHz() const { return true; }; // supports both
27	virtual bool		UseRealIIC() const { return true; };
28
29private:
30	bool	fIsSonix;
31};
32
33
34PAS106BSensor::PAS106BSensor(CamDevice *_camera)
35: CamSensor(_camera)
36{
37	fIsSonix = (dynamic_cast<SonixCamDevice *>(_camera) != NULL);
38	if (fIsSonix) {
39		fInitStatus = B_OK;
40	} else {
41		PRINT((CH ": unknown camera device!" CT));
42		fInitStatus = ENODEV;
43	}
44}
45
46
47PAS106BSensor::~PAS106BSensor()
48{
49}
50
51
52status_t
53PAS106BSensor::Probe()
54{
55	Device()->PowerOnSensor(false);
56	Device()->PowerOnSensor(true);
57	if (fIsSonix) {
58		Device()->WriteReg8(SN9C102_CHIP_CTRL, 0x00);	/* power on the sensor, Fsys_clk=12MHz */
59		Device()->WriteReg8(SN9C102_CLOCK_SEL, 0x17);	/* enable sensor, force 24MHz */
60	}
61
62	return ProbeByIICSignature(sProbeAddressList, sProbeMatchList,
63		sizeof(sProbeMatchList));
64}
65
66
67const char *
68PAS106BSensor::Name()
69{
70	return "PixArt Imaging pas106b";
71}
72
73
74B_WEBCAM_DECLARE_SENSOR(PAS106BSensor, pas106b)
75
76