drivers/staging/media/atomisp/pci/atomisp_compat_css20.c

Source file repositories/reference/linux-study-clean/drivers/staging/media/atomisp/pci/atomisp_compat_css20.c

File Facts

System
Linux kernel
Corpus path
drivers/staging/media/atomisp/pci/atomisp_compat_css20.c
Extension
.c
Size
100679 bytes
Lines
3408
Domain
Driver Families
Bucket
drivers/staging
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct bayer_ds_factor {
	unsigned int numerator;
	unsigned int denominator;
};

static void atomisp_css2_hw_store_8(hrt_address addr, uint8_t data)
{
	struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
	unsigned long flags;

	spin_lock_irqsave(&mmio_lock, flags);
	writeb(data, isp->base + (addr & 0x003FFFFF));
	spin_unlock_irqrestore(&mmio_lock, flags);
}

static void atomisp_css2_hw_store_16(hrt_address addr, uint16_t data)
{
	struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
	unsigned long flags;

	spin_lock_irqsave(&mmio_lock, flags);
	writew(data, isp->base + (addr & 0x003FFFFF));
	spin_unlock_irqrestore(&mmio_lock, flags);
}

void atomisp_css2_hw_store_32(hrt_address addr, uint32_t data)
{
	struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
	unsigned long flags;

	spin_lock_irqsave(&mmio_lock, flags);
	writel(data, isp->base + (addr & 0x003FFFFF));
	spin_unlock_irqrestore(&mmio_lock, flags);
}

static uint8_t atomisp_css2_hw_load_8(hrt_address addr)
{
	struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
	unsigned long flags;
	u8 ret;

	spin_lock_irqsave(&mmio_lock, flags);
	ret = readb(isp->base + (addr & 0x003FFFFF));
	spin_unlock_irqrestore(&mmio_lock, flags);
	return ret;
}

static uint16_t atomisp_css2_hw_load_16(hrt_address addr)
{
	struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
	unsigned long flags;
	u16 ret;

	spin_lock_irqsave(&mmio_lock, flags);
	ret = readw(isp->base + (addr & 0x003FFFFF));
	spin_unlock_irqrestore(&mmio_lock, flags);
	return ret;
}

static uint32_t atomisp_css2_hw_load_32(hrt_address addr)
{
	struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
	unsigned long flags;
	u32 ret;

	spin_lock_irqsave(&mmio_lock, flags);
	ret = readl(isp->base + (addr & 0x003FFFFF));
	spin_unlock_irqrestore(&mmio_lock, flags);
	return ret;
}

static void atomisp_css2_hw_store(hrt_address addr, const void *from, uint32_t n)
{
	struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
	unsigned long flags;
	unsigned int i;

	addr &= 0x003FFFFF;
	spin_lock_irqsave(&mmio_lock, flags);
	for (i = 0; i < n; i++, from++)
		writeb(*(s8 *)from, isp->base + addr + i);

	spin_unlock_irqrestore(&mmio_lock, flags);
}

static void atomisp_css2_hw_load(hrt_address addr, void *to, uint32_t n)
{
	struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
	unsigned long flags;
	unsigned int i;

Annotation

Implementation Notes