1083a11a3SMarcus Overhagen /* 2083a11a3SMarcus Overhagen * Copyright (c) 2004-2007 Marcus Overhagen <marcus@overhagen.de> 3083a11a3SMarcus Overhagen * 4083a11a3SMarcus Overhagen * Permission is hereby granted, free of charge, to any person 5083a11a3SMarcus Overhagen * obtaining a copy of this software and associated documentation 6083a11a3SMarcus Overhagen * files (the "Software"), to deal in the Software without restriction, 7083a11a3SMarcus Overhagen * including without limitation the rights to use, copy, modify, 8083a11a3SMarcus Overhagen * merge, publish, distribute, sublicense, and/or sell copies of 9083a11a3SMarcus Overhagen * the Software, and to permit persons to whom the Software is 10083a11a3SMarcus Overhagen * furnished to do so, subject to the following conditions: 11083a11a3SMarcus Overhagen * 12083a11a3SMarcus Overhagen * The above copyright notice and this permission notice shall be 13083a11a3SMarcus Overhagen * included in all copies or substantial portions of the Software. 14083a11a3SMarcus Overhagen * 15083a11a3SMarcus Overhagen * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16083a11a3SMarcus Overhagen * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17083a11a3SMarcus Overhagen * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18083a11a3SMarcus Overhagen * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19083a11a3SMarcus Overhagen * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20083a11a3SMarcus Overhagen * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21083a11a3SMarcus Overhagen * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22083a11a3SMarcus Overhagen * OTHER DEALINGS IN THE SOFTWARE. 23083a11a3SMarcus Overhagen */ 24083a11a3SMarcus Overhagen 25083a11a3SMarcus Overhagen #ifndef __CX23882_H 26083a11a3SMarcus Overhagen #define __CX23882_H 27083a11a3SMarcus Overhagen 28083a11a3SMarcus Overhagen #include <SupportDefs.h> 29083a11a3SMarcus Overhagen #include "driver.h" 30083a11a3SMarcus Overhagen #include "cx23882_regs.h" 311caca357SMarcus Overhagen #include "i2c_core.h" 32083a11a3SMarcus Overhagen 33083a11a3SMarcus Overhagen typedef struct { 34083a11a3SMarcus Overhagen const pci_info * pci_info; 35083a11a3SMarcus Overhagen int irq; 36083a11a3SMarcus Overhagen void * regs; 37083a11a3SMarcus Overhagen area_id regs_area; 38083a11a3SMarcus Overhagen uint32 i2c_reg; 39083a11a3SMarcus Overhagen i2c_bus * i2c_bus; 40083a11a3SMarcus Overhagen 41083a11a3SMarcus Overhagen area_id dma_buf1_area; 42083a11a3SMarcus Overhagen void * dma_buf1_virt; 43*6849e7ccSJérôme Duval phys_addr_t dma_buf1_phys; 44083a11a3SMarcus Overhagen area_id dma_buf2_area; 45083a11a3SMarcus Overhagen void * dma_buf2_virt; 46*6849e7ccSJérôme Duval phys_addr_t dma_buf2_phys; 47083a11a3SMarcus Overhagen 48083a11a3SMarcus Overhagen sem_id capture_sem; 49083a11a3SMarcus Overhagen void * capture_data; 50083a11a3SMarcus Overhagen size_t capture_size; 51083a11a3SMarcus Overhagen bigtime_t capture_end_time; 52083a11a3SMarcus Overhagen } cx23882_device; 53083a11a3SMarcus Overhagen 54083a11a3SMarcus Overhagen 55083a11a3SMarcus Overhagen #define reg_read8(offset) (*(volatile uint8 *) ((char *)(device->regs) + (offset))) 56083a11a3SMarcus Overhagen #define reg_read16(offset) (*(volatile uint16 *)((char *)(device->regs) + (offset))) 57083a11a3SMarcus Overhagen #define reg_read32(offset) (*(volatile uint32 *)((char *)(device->regs) + (offset))) 58083a11a3SMarcus Overhagen #define reg_write8(offset, value) (*(volatile uint8 *) ((char *)(device->regs) + (offset)) = value) 59083a11a3SMarcus Overhagen #define reg_write16(offset, value) (*(volatile uint16 *)((char *)(device->regs) + (offset)) = value) 60083a11a3SMarcus Overhagen #define reg_write32(offset, value) (*(volatile uint32 *)((char *)(device->regs) + (offset)) = value) 61083a11a3SMarcus Overhagen 62083a11a3SMarcus Overhagen 63083a11a3SMarcus Overhagen void cx23882_reset(cx23882_device *device); 64083a11a3SMarcus Overhagen status_t cx23882_init(cx23882_device *device); 65083a11a3SMarcus Overhagen status_t cx23882_terminate(cx23882_device *device); 66083a11a3SMarcus Overhagen 67083a11a3SMarcus Overhagen status_t cx23882_start_capture(cx23882_device *device); 68083a11a3SMarcus Overhagen status_t cx23882_stop_capture(cx23882_device *device); 69083a11a3SMarcus Overhagen 70083a11a3SMarcus Overhagen int32 cx23882_int(void *data); 71083a11a3SMarcus Overhagen 72083a11a3SMarcus Overhagen #endif 73