1*41dd6b47SDavid du Colombier /* Lml 22 driver */ 23ff48bf5SDavid du Colombier 33ff48bf5SDavid du Colombier #define MJPG_VERSION "LML33 v0.2" 43ff48bf5SDavid du Colombier #define NLML 2 53ff48bf5SDavid du Colombier 6*41dd6b47SDavid du Colombier /* 7*41dd6b47SDavid du Colombier * The following values can be modified to tune/set default behaviour of the 8*41dd6b47SDavid du Colombier * driver. 9*41dd6b47SDavid du Colombier */ 103ff48bf5SDavid du Colombier 11*41dd6b47SDavid du Colombier /* The number of uS delay in I2C state transitions (probably >= 10) */ 123ff48bf5SDavid du Colombier #define I2C_DELAY 50 133ff48bf5SDavid du Colombier 14*41dd6b47SDavid du Colombier /* The amount of spinning to do before the I2C bus is timed out */ 153ff48bf5SDavid du Colombier #define I2C_TIMEOUT 10000000 163ff48bf5SDavid du Colombier 17*41dd6b47SDavid du Colombier /* The amount of spinning to do before the guest bus is timed out */ 183ff48bf5SDavid du Colombier #define GUEST_TIMEOUT 10000000 193ff48bf5SDavid du Colombier 20*41dd6b47SDavid du Colombier /* 21*41dd6b47SDavid du Colombier * The amount of spinning to do before the polling of the still 22*41dd6b47SDavid du Colombier * transfer port is aborted. 23*41dd6b47SDavid du Colombier */ 243ff48bf5SDavid du Colombier #define STILL_TIMEOUT 1000000 253ff48bf5SDavid du Colombier 26*41dd6b47SDavid du Colombier /* 27*41dd6b47SDavid du Colombier * The following number is the maximum number of cards permited. Each 28*41dd6b47SDavid du Colombier * card found is mapped to a device minor number starting from 0. 29*41dd6b47SDavid du Colombier */ 303ff48bf5SDavid du Colombier #define MAX_CARDS 1 313ff48bf5SDavid du Colombier 32*41dd6b47SDavid du Colombier /* The following are the datastructures needed by the device. */ 333ff48bf5SDavid du Colombier #define I2C_BUS 0x044 34*41dd6b47SDavid du Colombier /* which bit of I2C_BUS is which */ 353ff48bf5SDavid du Colombier #define I2C_SCL 1 363ff48bf5SDavid du Colombier #define I2C_SDA 2 373ff48bf5SDavid du Colombier #define INTR_JPEGREP 0x08000000 383ff48bf5SDavid du Colombier #define INTR_GIRQ0 0x20000000 393ff48bf5SDavid du Colombier #define INTR_STAT 0x03c 403ff48bf5SDavid du Colombier 41*41dd6b47SDavid du Colombier /* A Device records the properties of the various card types supported. */ 423ff48bf5SDavid du Colombier typedef struct { 43*41dd6b47SDavid du Colombier int number; /* The H33_CARDTYPE_ assigned */ 44*41dd6b47SDavid du Colombier char *card_name; /* A string name */ 45*41dd6b47SDavid du Colombier int zr060addr; /* Which guest bus address for the ZR36060 */ 463ff48bf5SDavid du Colombier } Device; 473ff48bf5SDavid du Colombier 48*41dd6b47SDavid du Colombier /* 49*41dd6b47SDavid du Colombier * The remainder of the #defs are constants which should not need changing. 50*41dd6b47SDavid du Colombier * 51*41dd6b47SDavid du Colombier * The PCI vendor and device ids of the zoran chipset on the dc30. 52*41dd6b47SDavid du Colombier * these really belong in pci.h. 53*41dd6b47SDavid du Colombier */ 543ff48bf5SDavid du Colombier #define VENDOR_ZORAN 0x11de 553ff48bf5SDavid du Colombier #define ZORAN_36057 0x6057 563ff48bf5SDavid du Colombier #define ZORAN_36067 ZORAN_36057 573ff48bf5SDavid du Colombier 583ff48bf5SDavid du Colombier #define BT819Addr 0x8a 593ff48bf5SDavid du Colombier #define BT856Addr 0x88 603ff48bf5SDavid du Colombier 613ff48bf5SDavid du Colombier #define NBUF 4 623ff48bf5SDavid du Colombier 633ff48bf5SDavid du Colombier #define FRAGM_FINAL_B 1 643ff48bf5SDavid du Colombier #define STAT_BIT 1 653ff48bf5SDavid du Colombier 663ff48bf5SDavid du Colombier typedef struct HdrFragment HdrFragment; 673ff48bf5SDavid du Colombier typedef struct FrameHeader FrameHeader; 683ff48bf5SDavid du Colombier typedef union Fragment Fragment; 693ff48bf5SDavid du Colombier typedef struct FragmentTable FragmentTable; 703ff48bf5SDavid du Colombier typedef struct CodeData CodeData; 713ff48bf5SDavid du Colombier 72*41dd6b47SDavid du Colombier /* If we're on a little endian architecture, then 0xFF, 0xD8 byte sequence is */ 733ff48bf5SDavid du Colombier #define MRK_SOI 0xD8FF 743ff48bf5SDavid du Colombier #define MRK_APP3 0xE3FF 753ff48bf5SDavid du Colombier #define APP_NAME "LML" 763ff48bf5SDavid du Colombier 77*41dd6b47SDavid du Colombier struct FrameHeader { /* Don't modify this struct, used by h/w */ 783ff48bf5SDavid du Colombier ushort mrkSOI; 793ff48bf5SDavid du Colombier ushort mrkAPP3; 803ff48bf5SDavid du Colombier ushort lenAPP3; 813ff48bf5SDavid du Colombier char nm[4]; 823ff48bf5SDavid du Colombier ushort frameNo; 833ff48bf5SDavid du Colombier vlong ftime; 843ff48bf5SDavid du Colombier ulong frameSize; 853ff48bf5SDavid du Colombier ushort frameSeqNo; 863ff48bf5SDavid du Colombier ushort SOIfiller; 873ff48bf5SDavid du Colombier }; 883ff48bf5SDavid du Colombier 893ff48bf5SDavid du Colombier #define FRAGSIZE (128*1024) 903ff48bf5SDavid du Colombier 913ff48bf5SDavid du Colombier union Fragment { 923ff48bf5SDavid du Colombier FrameHeader fh; 933ff48bf5SDavid du Colombier char fb[FRAGSIZE]; 943ff48bf5SDavid du Colombier }; 953ff48bf5SDavid du Colombier 963ff48bf5SDavid du Colombier struct HdrFragment { 973ff48bf5SDavid du Colombier uchar hdr[sizeof(FrameHeader)]; 983ff48bf5SDavid du Colombier Fragment; 993ff48bf5SDavid du Colombier }; 1003ff48bf5SDavid du Colombier 101*41dd6b47SDavid du Colombier struct FragmentTable { /* Don't modify this struct, used by h/w */ 102*41dd6b47SDavid du Colombier ulong addr; /* Physical address */ 1033ff48bf5SDavid du Colombier ulong leng; 1043ff48bf5SDavid du Colombier }; 1053ff48bf5SDavid du Colombier 106*41dd6b47SDavid du Colombier struct CodeData { /* Don't modify this struct, used by h/w */ 107*41dd6b47SDavid du Colombier ulong pamjpg; /* Physical addr of statCom[0] */ 108*41dd6b47SDavid du Colombier ulong pagrab; /* Physical addr of grab buffer */ 109*41dd6b47SDavid du Colombier ulong statCom[4]; /* Physical addresses of fragdescs */ 1103ff48bf5SDavid du Colombier FragmentTable fragdesc[4]; 1113ff48bf5SDavid du Colombier HdrFragment frag[4]; 1123ff48bf5SDavid du Colombier }; 1133ff48bf5SDavid du Colombier 1143ff48bf5SDavid du Colombier enum{ 1153ff48bf5SDavid du Colombier Codedatasize = (sizeof(CodeData) + BY2PG - 1) & ~(BY2PG - 1), 1163ff48bf5SDavid du Colombier Grabdatasize = (730 * 568 * 2 * 2 + BY2PG - 1) & ~(BY2PG - 1), 1173ff48bf5SDavid du Colombier }; 1183ff48bf5SDavid du Colombier 1193ff48bf5SDavid du Colombier #define POST_OFFICE 0x200 1203ff48bf5SDavid du Colombier #define POST_PEND 0x02000000 1213ff48bf5SDavid du Colombier #define POST_TIME 0x01000000 1223ff48bf5SDavid du Colombier #define POST_DIR 0x00800000 1233ff48bf5SDavid du Colombier 1243ff48bf5SDavid du Colombier #define GID060 0 125