mirror of https://gitee.com/openkylin/linux.git
media updates for v5.8-rc1
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE+QmuaPwR3wnBdVwACF8+vY7k4RUFAl7kDCsACgkQCF8+vY7k 4RUuXw/+LfeNo2AXUerCpn+C6JNo/GNSKVbLxJL5s0RETtxXP8eXrvu+mSKvcOC4 z+QG3iwriwDhba9MCr1jchu7t9Y5XBn1zKCqpMeZfywGi3JIVHWGuMwhxuptq8Ud 1C652Rhvx6Z+bgfM+ImI+c6+RPgyfcaJS6t43Y6jqilBdq6C53Y/OkrNmfquXMwz IYTzRveWyEP90B8Z1vwcoQKIOyyDlPwbDdE3y9V8U8VONK0INPS9GQKXiOOdpN1C aqBRh8MyupDh25P5Rn4ABJKHYQObLuMn+dEy8A8WCBBVQOZtKujmA3+O6jUydpUB 9asZrCv33MtdhsRg65inPXx4jvkMjNE4+Wmw89Q34LyFxs/SeHI5+85wdRVTiwqj VTVSs2I3ftvUNj64mPDOB3aLsAIV1alWRG9ABqSeISmGfskZptBfvJyPoHsb9YcZ xXfcKZwGcUQSVRUII1ZtHWN9suf9RD2vq9NN7Wr+WUXg1a9YKQGhQsuB7xUKemX8 gfjhabvH9MHXk4JWaZZ4YPBuGpHUty3UCgYs1xNS0kLjLYI36REMLyDTfCeIP36N eiOnYoI1javCQ1EbPk75pejv13srXqpgdAhbF+rQDre/rE2C+0oLEaEhZ7FHoGY5 Oq60VY7O8V6K44PitpvUdY1saFWkgj8YNeCNXyaH/mJISH78JtY= =HeJz -----END PGP SIGNATURE----- Merge tag 'media/v5.8-2' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media Pull more media updates from Mauro Carvalho Chehab: - a set of atomisp patches. They remove several abstraction layers, and fixes clang and gcc warnings (that were hidden via some macros that were disabling 4 or 5 types of warnings there). There are also some important fixes and sensor auto-detection on newer BIOSes via ACPI _DCM tables. - some fixes * tag 'media/v5.8-2' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (95 commits) media: rkvdec: Fix H264 scaling list order media: v4l2-ctrls: Unset correct HEVC loop filter flag media: videobuf2-dma-contig: fix bad kfree in vb2_dma_contig_clear_max_seg_size media: v4l2-subdev.rst: correct information about v4l2 events media: s5p-mfc: Properly handle dma_parms for the allocated devices media: medium: cec: Make MEDIA_CEC_SUPPORT default to n if !MEDIA_SUPPORT media: cedrus: Implement runtime PM media: cedrus: Program output format during each run media: atomisp: improve ACPI/DMI detection logs media: Revert "media: atomisp: add Asus Transform T101HA ACPI vars" media: Revert "media: atomisp: Add some ACPI detection info" media: atomisp: improve sensor detection code to use _DSM table media: atomisp: get rid of an iomem abstraction layer media: atomisp: get rid of a string_support.h abstraction layer media: atomisp: use strscpy() instead of less secure variants media: atomisp: set DFS to MAX if sensor doesn't report fps media: atomisp: use different dfs failed messages media: atomisp: change the detection of ISP2401 at runtime media: atomisp: use macros from intel-family.h media: atomisp: don't set hpll_freq twice with different values ...
This commit is contained in:
commit
ac911b3163
|
@ -319,8 +319,7 @@ The device node handles a subset of the V4L2 API.
|
|||
events can also be reported by one (or several) V4L2 device nodes.
|
||||
|
||||
Sub-device drivers that want to use events need to set the
|
||||
``V4L2_SUBDEV_USES_EVENTS`` :c:type:`v4l2_subdev`.flags and initialize
|
||||
:c:type:`v4l2_subdev`.nevents to events queue depth before registering
|
||||
``V4L2_SUBDEV_FL_HAS_EVENTS`` :c:type:`v4l2_subdev`.flags before registering
|
||||
the sub-device. After registration events can be queued as usual on the
|
||||
:c:type:`v4l2_subdev`.devnode device node.
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ config CEC_PIN_ERROR_INJ
|
|||
menuconfig MEDIA_CEC_SUPPORT
|
||||
bool
|
||||
prompt "HDMI CEC drivers"
|
||||
default y if !MEDIA_SUPPORT_FILTER
|
||||
default y if MEDIA_SUPPORT && !MEDIA_SUPPORT_FILTER
|
||||
help
|
||||
Enable support for HDMI CEC (Consumer Electronics Control),
|
||||
which is an optional HDMI feature.
|
||||
|
|
|
@ -726,9 +726,8 @@ EXPORT_SYMBOL_GPL(vb2_dma_contig_memops);
|
|||
int vb2_dma_contig_set_max_seg_size(struct device *dev, unsigned int size)
|
||||
{
|
||||
if (!dev->dma_parms) {
|
||||
dev->dma_parms = kzalloc(sizeof(*dev->dma_parms), GFP_KERNEL);
|
||||
if (!dev->dma_parms)
|
||||
return -ENOMEM;
|
||||
dev_err(dev, "Failed to set max_seg_size: dma_parms is NULL\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
if (dma_get_max_seg_size(dev) < size)
|
||||
return dma_set_max_seg_size(dev, size);
|
||||
|
@ -737,21 +736,6 @@ int vb2_dma_contig_set_max_seg_size(struct device *dev, unsigned int size)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(vb2_dma_contig_set_max_seg_size);
|
||||
|
||||
/*
|
||||
* vb2_dma_contig_clear_max_seg_size() - release resources for DMA parameters
|
||||
* @dev: device for configuring DMA parameters
|
||||
*
|
||||
* This function releases resources allocated to configure DMA parameters
|
||||
* (see vb2_dma_contig_set_max_seg_size() function). It should be called from
|
||||
* device drivers on driver remove.
|
||||
*/
|
||||
void vb2_dma_contig_clear_max_seg_size(struct device *dev)
|
||||
{
|
||||
kfree(dev->dma_parms);
|
||||
dev->dma_parms = NULL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vb2_dma_contig_clear_max_seg_size);
|
||||
|
||||
MODULE_DESCRIPTION("DMA-contig memory handling routines for videobuf2");
|
||||
MODULE_AUTHOR("Pawel Osciak <pawel@osciak.com>");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -1089,6 +1089,10 @@ static struct device *s5p_mfc_alloc_memdev(struct device *dev,
|
|||
child->coherent_dma_mask = dev->coherent_dma_mask;
|
||||
child->dma_mask = dev->dma_mask;
|
||||
child->release = s5p_mfc_memdev_release;
|
||||
child->dma_parms = devm_kzalloc(dev, sizeof(*child->dma_parms),
|
||||
GFP_KERNEL);
|
||||
if (!child->dma_parms)
|
||||
goto err;
|
||||
|
||||
/*
|
||||
* The memdevs are not proper OF platform devices, so in order for them
|
||||
|
@ -1104,7 +1108,7 @@ static struct device *s5p_mfc_alloc_memdev(struct device *dev,
|
|||
return child;
|
||||
device_del(child);
|
||||
}
|
||||
|
||||
err:
|
||||
put_device(child);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -1844,7 +1844,7 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
|
|||
sizeof(p_hevc_pps->row_height_minus1));
|
||||
|
||||
p_hevc_pps->flags &=
|
||||
~V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED;
|
||||
~V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED;
|
||||
}
|
||||
|
||||
if (p_hevc_pps->flags &
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
menuconfig INTEL_ATOMISP
|
||||
bool "Enable support to Intel Atom ISP camera drivers"
|
||||
depends on X86 && EFI && PCI && ACPI
|
||||
|
@ -11,6 +12,7 @@ menuconfig INTEL_ATOMISP
|
|||
config VIDEO_ATOMISP
|
||||
tristate "Intel Atom Image Signal Processor Driver"
|
||||
depends on VIDEO_V4L2 && INTEL_ATOMISP
|
||||
depends on PMIC_OPREGION
|
||||
select IOSF_MBI
|
||||
select VIDEOBUF_VMALLOC
|
||||
---help---
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Makefile for camera drivers.
|
||||
#
|
||||
|
@ -36,7 +37,6 @@ atomisp-objs += \
|
|||
pci/sh_css_param_dvs.o \
|
||||
pci/sh_css_param_shading.o \
|
||||
pci/sh_css_params.o \
|
||||
pci/sh_css_pipe.o \
|
||||
pci/sh_css_properties.o \
|
||||
pci/sh_css_shading.o \
|
||||
pci/sh_css_sp.o \
|
||||
|
@ -53,10 +53,7 @@ atomisp-objs += \
|
|||
pci/hmm/hmm_dynamic_pool.o \
|
||||
pci/hmm/hmm.o \
|
||||
pci/hmm/hmm_reserved_pool.o \
|
||||
pci/hmm/hmm_vm.o \
|
||||
pci/hrt/hive_isp_css_mm_hrt.o \
|
||||
pci/ia_css_device_access.o \
|
||||
pci/ia_css_memory_access.o \
|
||||
pci/isp/kernels/aa/aa_2/ia_css_aa2.host.o \
|
||||
pci/isp/kernels/anr/anr_1.0/ia_css_anr.host.o \
|
||||
pci/isp/kernels/anr/anr_2/ia_css_anr2.host.o \
|
||||
|
@ -117,7 +114,6 @@ atomisp-objs += \
|
|||
pci/isp/kernels/xnr/xnr_3.0/ia_css_xnr3.host.o \
|
||||
pci/isp/kernels/ynr/ynr_1.0/ia_css_ynr.host.o \
|
||||
pci/isp/kernels/ynr/ynr_2/ia_css_ynr2.host.o \
|
||||
pci/memory_realloc.o \
|
||||
pci/mmu/isp_mmu.o \
|
||||
pci/mmu/sh_mmu_mrfld.o \
|
||||
pci/runtime/binary/src/binary.o \
|
||||
|
@ -328,11 +324,6 @@ INCLUDES_cht += \
|
|||
# -I$(atomisp)/pci/css_2401_system/hrt/ \
|
||||
# -I$(atomisp)/pci/css_2401_system/hive_isp_css_2401_system_generated/ \
|
||||
|
||||
|
||||
ifeq ($(CONFIG_ION),y)
|
||||
INCLUDES += -I$(srctree)/drivers/staging/android/ion
|
||||
endif
|
||||
|
||||
DEFINES := -DHRT_HW -DHRT_ISP_CSS_CUSTOM_HOST -DHRT_USE_VIR_ADDRS -D__HOST__
|
||||
#DEFINES += -DUSE_DYNAMIC_BIN
|
||||
#DEFINES += -DISP_POWER_GATING
|
||||
|
@ -352,12 +343,3 @@ DEFINES += -DISP2400 -DSYSTEM_hive_isp_css_2400_system
|
|||
endif
|
||||
|
||||
ccflags-y += $(INCLUDES) $(DEFINES) -fno-common
|
||||
|
||||
# HACK! While this driver is in bad shape, don't enable several warnings
|
||||
# that would be otherwise enabled with W=1
|
||||
ccflags-y += $(call cc-disable-warning, implicit-fallthrough)
|
||||
ccflags-y += $(call cc-disable-warning, missing-prototypes)
|
||||
ccflags-y += $(call cc-disable-warning, missing-declarations)
|
||||
ccflags-y += $(call cc-disable-warning, suggest-attribute=format)
|
||||
ccflags-y += $(call cc-disable-warning, unused-const-variable)
|
||||
ccflags-y += $(call cc-disable-warning, unused-but-set-variable)
|
||||
|
|
|
@ -1,71 +1,127 @@
|
|||
1. A single AtomISP driver needs to be implemented to support both
|
||||
Baytrail (BYT and Cherrytail (CHT) platforms at the same time.
|
||||
NOTE:
|
||||
=====
|
||||
|
||||
While the driver probes the hardware and reports itself as a
|
||||
V4L2 driver, there are still some issues preventing it to
|
||||
stream (at least it doesn't with the standard V4L2 applications.
|
||||
Didn't test yet with some custom-made app for this driver).
|
||||
Solving the related bugs and issues preventing it to work is
|
||||
needed (items 6 and 7 from the list below).
|
||||
|
||||
TODO
|
||||
====
|
||||
|
||||
1. The atomisp doesn't rely at the usual i2c stuff to discover the
|
||||
sensors. Instead, it calls a function from atomisp_gmin_platform.c.
|
||||
There are some hacks added there for it to wait for sensors to be
|
||||
probed (with a timeout of 2 seconds or so).
|
||||
This should be converted to the usual way, using V4L2 async subdev
|
||||
framework to wait for cameras to be probed;
|
||||
|
||||
2. Use ACPI _DSM table - DONE!
|
||||
|
||||
3. Switch the driver to use pm_runtime stuff. Right now, it probes the
|
||||
existing PMIC code and sensors call it directly.
|
||||
|
||||
4. There's a problem at the sensor drivers: when trying to set a video
|
||||
format, the atomisp main driver calls the sensor drivers with the
|
||||
sensor turned off. This causes them to fail.
|
||||
|
||||
The only exception is the atomisp-ov2880, which has a hack inside it
|
||||
to turn it on when VIDIOC_S_FMT is called.
|
||||
|
||||
The right fix seems to power on the sensor when a video device is
|
||||
opened (or at the first VIDIOC_ ioctl - except for VIDIOC_QUERYCAP),
|
||||
powering it down at close() syscall.
|
||||
|
||||
Such kind of control would need to be done inside the atomisp driver,
|
||||
not at the sensors code.
|
||||
|
||||
5. There are several issues related to memory management, causing
|
||||
crashes. The atomisp splits the memory management on three separate
|
||||
regions:
|
||||
|
||||
- dynamic pool;
|
||||
- reserved pool;
|
||||
- generic pool
|
||||
|
||||
The code implementing it is at:
|
||||
|
||||
drivers/staging/media/atomisp/pci/hmm/
|
||||
|
||||
It also has a separate code for managing DMA buffers at:
|
||||
|
||||
drivers/staging/media/atomisp/pci/mmu/
|
||||
|
||||
The code there is really dirty, ugly and probably wrong. I fixed
|
||||
one bug there already, but the best would be to just trash it and use
|
||||
something else. Maybe the code from the newer intel driver could
|
||||
serve as a model:
|
||||
|
||||
drivers/staging/media/ipu3/ipu3-mmu.c
|
||||
|
||||
But converting it to use something like that is painful and may
|
||||
cause some breakages.
|
||||
|
||||
6. There is some issues at the frame receive logic, causing the
|
||||
DQBUF ioctls to fail.
|
||||
|
||||
7. A single AtomISP driver needs to be implemented to support both
|
||||
Baytrail (BYT) and Cherrytail (CHT) platforms at the same time.
|
||||
The current driver is a mechanical and hand combined merge of the
|
||||
two using several runtime macros, plus some ifdef ISP2401 to select the
|
||||
CHT version. Yet, there are some ISP-specific headers that change the
|
||||
driver's behavior during compile time.
|
||||
|
||||
2. The file structure needs to get tidied up to resemble a normal Linux
|
||||
8. The file structure needs to get tidied up to resemble a normal Linux
|
||||
driver.
|
||||
|
||||
3. Lots of the midlayer glue. unused code and abstraction needs removing.
|
||||
9. Lots of the midlayer glue. unused code and abstraction needs removing.
|
||||
|
||||
3. The sensor drivers read MIPI settings from EFI variables or default to the
|
||||
settings hard-coded in the platform data file for different platforms.
|
||||
It should be possible to improve it, by adding support for _DSM tables.
|
||||
10. The AtomISP driver includes some special IOCTLS (ATOMISP_IOC_XXXX_XXXX)
|
||||
and controls that require some cleanup. Some of those code may have
|
||||
been removed during the cleanups. They could be needed in order to
|
||||
properly support 3A algorithms
|
||||
|
||||
4. The sensor drivers use PMIC and the regulator framework API. In the ideal
|
||||
world it would be using ACPI but that's not how the existing devices work.
|
||||
Such IOCTL interface needs more documentation. The better would
|
||||
be to use something close to the interface used by the IPU3 IMGU driver.
|
||||
|
||||
5. The AtomISP driver includes some special IOCTLS (ATOMISP_IOC_XXXX_XXXX)
|
||||
and controls that require some cleanup.
|
||||
11. The ISP code has some dependencies of the exact FW version.
|
||||
The version defined in pci/sh_css_firmware.c:
|
||||
|
||||
6. Correct Coding Style. Please don't send coding style patches for this
|
||||
driver until the other work is done.
|
||||
BYT (isp2400): "irci_stable_candrpv_0415_20150521_0458"
|
||||
|
||||
7. The ISP code has some dependencies of the exact FW version.
|
||||
The version defined in pci/sh_css_firmware.c:
|
||||
BYT:
|
||||
static const char *isp2400_release_version = STR(irci_stable_candrpv_0415_20150521_0458);
|
||||
CHT (isp2401): "irci_ecr - master_20150911_0724"
|
||||
|
||||
CHT:
|
||||
static const char *isp2401_release_version = STR(irci_ecr - master_20150911_0724);
|
||||
Those versions don't seem to be available anymore. On the tests we've
|
||||
done so far, this version also seems to work for CHT:
|
||||
|
||||
Those versions don't seem to be available anymore. On the tests we've
|
||||
done so far, this version also seems to work for isp2401:
|
||||
"irci_stable_candrpv_0415_20150521_0458"
|
||||
|
||||
irci_stable_candrpv_0415_20150521_0458
|
||||
Which can be obtainable from Yocto Atom ISP respository.
|
||||
|
||||
At some point we may need to round up a few driver versions and see if
|
||||
there are any specific things that can be done to fold in support for
|
||||
multiple firmware versions.
|
||||
but this was not thoroughly tested.
|
||||
|
||||
8. Switch to V4L2 async API to set up sensor, lens and flash devices.
|
||||
Control those devices using V4L2 sub-device API without custom
|
||||
extensions.
|
||||
At some point we may need to round up a few driver versions and see if
|
||||
there are any specific things that can be done to fold in support for
|
||||
multiple firmware versions.
|
||||
|
||||
9. Switch to standard V4L2 sub-device API for sensor and lens. In
|
||||
particular, the user space API needs to support V4L2 controls as
|
||||
defined in the V4L2 spec and references to atomisp must be removed from
|
||||
these drivers.
|
||||
12. Switch to standard V4L2 sub-device API for sensor and lens. In
|
||||
particular, the user space API needs to support V4L2 controls as
|
||||
defined in the V4L2 spec and references to atomisp must be removed from
|
||||
these drivers.
|
||||
|
||||
10. Use LED flash API for flash LED drivers such as LM3554 (which already
|
||||
13. Use LED flash API for flash LED drivers such as LM3554 (which already
|
||||
has a LED class driver).
|
||||
|
||||
11. Switch from videobuf1 to videobuf2. Videobuf1 is being removed!
|
||||
14. Switch from videobuf1 to videobuf2. Videobuf1 is being removed!
|
||||
|
||||
12. There are some memory management code that seems to be
|
||||
forked from Kernel 3.10 inside hmm/ directory. Get rid of it,
|
||||
making the driver to use a more standard memory management module.
|
||||
15. Correct Coding Style. Please refrain sending coding style patches
|
||||
for this driver until the other work is done, as there will be a lot
|
||||
of code churn until this driver becomes functional again.
|
||||
|
||||
13. While the driver probes the hardware and reports itself as a
|
||||
V4L2 driver, there are still some issues preventing it to
|
||||
stream (at least it doesn't with the standard V4L2 applications.
|
||||
Didn't test yet with some custom-made app for this driver).
|
||||
Solving the related bugs and issues preventing it to work is
|
||||
needed.
|
||||
|
||||
Limitations:
|
||||
Limitations
|
||||
===========
|
||||
|
||||
1. To test the patches, you also need the ISP firmware
|
||||
|
||||
|
@ -76,14 +132,16 @@ Limitations:
|
|||
device but can also be extracted from the upgrade kit if you've managed
|
||||
to lose them somehow.
|
||||
|
||||
2. Without a 3A libary the capture behaviour is not very good. To take a good
|
||||
picture, you need tune ISP parameters by IOCTL functions or use a 3A libary
|
||||
2. Without a 3A library the capture behaviour is not very good. To take a good
|
||||
picture, you need tune ISP parameters by IOCTL functions or use a 3A library
|
||||
such as libxcam.
|
||||
|
||||
3. The driver is intended to drive the PCI exposed versions of the device.
|
||||
It will not detect those devices enumerated via ACPI as a field of the
|
||||
i915 GPU driver.
|
||||
|
||||
There are some patches adding i915 GPU support floating at the Yocto's
|
||||
Aero repository (so far, untested upstream).
|
||||
|
||||
4. The driver supports only v2 of the IPU/Camera. It will not work with the
|
||||
versions of the hardware in other SoCs.
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Kconfig for sensor drivers
|
||||
#
|
||||
|
@ -57,7 +58,7 @@ config VIDEO_ATOMISP_GC0310
|
|||
---help---
|
||||
This is a Video4Linux2 sensor-level driver for the Galaxycore
|
||||
GC0310 0.3MP sensor.
|
||||
|
||||
|
||||
config VIDEO_ATOMISP_OV2680
|
||||
tristate "Omnivision OV2680 sensor support"
|
||||
depends on ACPI
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for GalaxyCore GC0310 VGA camera sensor.
|
||||
*
|
||||
|
@ -1309,18 +1310,6 @@ static int gc0310_probe(struct i2c_client *client)
|
|||
int ret;
|
||||
void *pdata;
|
||||
unsigned int i;
|
||||
acpi_handle handle;
|
||||
struct acpi_device *adev;
|
||||
|
||||
handle = ACPI_HANDLE(&client->dev);
|
||||
if (!handle || acpi_bus_get_device(handle, &adev)) {
|
||||
dev_err(&client->dev, "Error could not get ACPI device\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
pr_info("%s: ACPI detected it on bus ID=%s, HID=%s\n",
|
||||
__func__, acpi_device_bid(adev), acpi_device_hid(adev));
|
||||
// FIXME: may need to release resources allocated by acpi_bus_get_device()
|
||||
|
||||
|
||||
dev = kzalloc(sizeof(*dev), GFP_KERNEL);
|
||||
if (!dev)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for GalaxyCore GC2235 2M camera sensor.
|
||||
*
|
||||
|
@ -1051,17 +1052,6 @@ static int gc2235_probe(struct i2c_client *client)
|
|||
void *gcpdev;
|
||||
int ret;
|
||||
unsigned int i;
|
||||
acpi_handle handle;
|
||||
struct acpi_device *adev;
|
||||
|
||||
handle = ACPI_HANDLE(&client->dev);
|
||||
if (!handle || acpi_bus_get_device(handle, &adev)) {
|
||||
dev_err(&client->dev, "Error could not get ACPI device\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
pr_info("%s: ACPI detected it on bus ID=%s, HID=%s\n",
|
||||
__func__, acpi_device_bid(adev), acpi_device_hid(adev));
|
||||
// FIXME: may need to release resources allocated by acpi_bus_get_device()
|
||||
|
||||
dev = kzalloc(sizeof(*dev), GFP_KERNEL);
|
||||
if (!dev)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Copyright (c) 2013 Intel Corporation. All Rights Reserved.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* LED flash driver for LM3554
|
||||
*
|
||||
|
@ -850,17 +851,6 @@ static int lm3554_probe(struct i2c_client *client)
|
|||
struct lm3554 *flash;
|
||||
unsigned int i;
|
||||
int ret;
|
||||
acpi_handle handle;
|
||||
struct acpi_device *adev;
|
||||
|
||||
handle = ACPI_HANDLE(&client->dev);
|
||||
if (!handle || acpi_bus_get_device(handle, &adev)) {
|
||||
dev_err(&client->dev, "Error could not get ACPI device\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
pr_info("%s: ACPI detected it on bus ID=%s, HID=%s\n",
|
||||
__func__, acpi_device_bid(adev), acpi_device_hid(adev));
|
||||
// FIXME: may need to release resources allocated by acpi_bus_get_device()
|
||||
|
||||
flash = kzalloc(sizeof(*flash), GFP_KERNEL);
|
||||
if (!flash)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for mt9m114 Camera Sensor.
|
||||
*
|
||||
|
@ -1816,17 +1817,6 @@ static int mt9m114_probe(struct i2c_client *client)
|
|||
int ret = 0;
|
||||
unsigned int i;
|
||||
void *pdata;
|
||||
acpi_handle handle;
|
||||
struct acpi_device *adev;
|
||||
|
||||
handle = ACPI_HANDLE(&client->dev);
|
||||
if (!handle || acpi_bus_get_device(handle, &adev)) {
|
||||
dev_err(&client->dev, "Error could not get ACPI device\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
pr_info("%s: ACPI detected it on bus ID=%s, HID=%s\n",
|
||||
__func__, acpi_device_bid(adev), acpi_device_hid(adev));
|
||||
// FIXME: may need to release resources allocated by acpi_bus_get_device()
|
||||
|
||||
/* Setup sensor configuration structure */
|
||||
dev = kzalloc(sizeof(*dev), GFP_KERNEL);
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for OmniVision OV2680 1080p HD camera sensor.
|
||||
*
|
||||
|
@ -703,7 +704,7 @@ static int power_ctrl(struct v4l2_subdev *sd, bool flag)
|
|||
if (!dev || !dev->platform_data)
|
||||
return -ENODEV;
|
||||
|
||||
dev_dbg(&client->dev, "%s: %s", __func__, flag? "on" : "off");
|
||||
dev_dbg(&client->dev, "%s: %s", __func__, flag ? "on" : "off");
|
||||
|
||||
if (flag) {
|
||||
ret |= dev->platform_data->v1p8_ctrl(sd, 1);
|
||||
|
@ -1243,17 +1244,6 @@ static int ov2680_probe(struct i2c_client *client)
|
|||
int ret;
|
||||
void *pdata;
|
||||
unsigned int i;
|
||||
acpi_handle handle;
|
||||
struct acpi_device *adev;
|
||||
|
||||
handle = ACPI_HANDLE(&client->dev);
|
||||
if (!handle || acpi_bus_get_device(handle, &adev)) {
|
||||
dev_err(&client->dev, "Error could not get ACPI device\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
dev_info(&client->dev, "%s: ACPI detected it on bus ID=%s, HID=%s\n",
|
||||
__func__, acpi_device_bid(adev), acpi_device_hid(adev));
|
||||
// FIXME: may need to release resources allocated by acpi_bus_get_device()
|
||||
|
||||
dev = kzalloc(sizeof(*dev), GFP_KERNEL);
|
||||
if (!dev)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for OmniVision OV2722 1080p HD camera sensor.
|
||||
*
|
||||
|
@ -1214,17 +1215,6 @@ static int ov2722_probe(struct i2c_client *client)
|
|||
struct ov2722_device *dev;
|
||||
void *ovpdev;
|
||||
int ret;
|
||||
acpi_handle handle;
|
||||
struct acpi_device *adev;
|
||||
|
||||
handle = ACPI_HANDLE(&client->dev);
|
||||
if (!handle || acpi_bus_get_device(handle, &adev)) {
|
||||
dev_err(&client->dev, "Error could not get ACPI device\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
pr_info("%s: ACPI detected it on bus ID=%s, HID=%s\n",
|
||||
__func__, acpi_device_bid(adev), acpi_device_hid(adev));
|
||||
// FIXME: may need to release resources allocated by acpi_bus_get_device()
|
||||
|
||||
dev = kzalloc(sizeof(*dev), GFP_KERNEL);
|
||||
if (!dev)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for GalaxyCore GC0310 VGA camera sensor.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for GalaxyCore GC2235 2M camera sensor.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for mt9m114 Camera Sensor.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for OmniVision OV2680 5M camera sensor.
|
||||
*
|
||||
|
@ -456,6 +457,7 @@ static struct ov2680_reg const ov2680_656x496_30fps[] = {
|
|||
// {0x5090, 0x0c},
|
||||
{}
|
||||
};
|
||||
|
||||
/*
|
||||
* 800x600 30fps VBlanking 1lane 10Bit (binning)
|
||||
*/
|
||||
|
@ -500,6 +502,7 @@ static struct ov2680_reg const ov2680_720x592_30fps[] = {
|
|||
{0x5081, 0x41},
|
||||
{}
|
||||
};
|
||||
|
||||
/*
|
||||
* 800x600 30fps VBlanking 1lane 10Bit (binning)
|
||||
*/
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for OmniVision OV2722 1080p HD camera sensor.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
config VIDEO_ATOMISP_OV5693
|
||||
tristate "Omnivision ov5693 sensor support"
|
||||
depends on ACPI
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for AD5823 VCM.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for OmniVision OV5693 1080p HD camera sensor.
|
||||
*
|
||||
|
@ -1087,7 +1088,7 @@ static int ov5693_s_ctrl(struct v4l2_ctrl *ctrl)
|
|||
case V4L2_CID_VCM_SLEW:
|
||||
ret = ov5693_t_vcm_slew(&dev->sd, ctrl->val);
|
||||
break;
|
||||
case V4L2_CID_VCM_TIMEING:
|
||||
case V4L2_CID_VCM_TIMING:
|
||||
ret = ov5693_t_vcm_timing(&dev->sd, ctrl->val);
|
||||
break;
|
||||
default:
|
||||
|
@ -1230,7 +1231,7 @@ static const struct v4l2_ctrl_config ov5693_controls[] = {
|
|||
},
|
||||
{
|
||||
.ops = &ctrl_ops,
|
||||
.id = V4L2_CID_VCM_TIMEING,
|
||||
.id = V4L2_CID_VCM_TIMING,
|
||||
.type = V4L2_CTRL_TYPE_INTEGER,
|
||||
.name = "vcm step time",
|
||||
.min = 0,
|
||||
|
@ -1901,17 +1902,6 @@ static int ov5693_probe(struct i2c_client *client)
|
|||
int ret = 0;
|
||||
void *pdata;
|
||||
unsigned int i;
|
||||
acpi_handle handle;
|
||||
struct acpi_device *adev;
|
||||
|
||||
handle = ACPI_HANDLE(&client->dev);
|
||||
if (!handle || acpi_bus_get_device(handle, &adev)) {
|
||||
dev_err(&client->dev, "Error could not get ACPI device\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
pr_info("%s: ACPI detected it on bus ID=%s, HID=%s\n",
|
||||
__func__, acpi_device_bid(adev), acpi_device_hid(adev));
|
||||
// FIXME: may need to release resources allocated by acpi_bus_get_device()
|
||||
|
||||
/*
|
||||
* Firmware workaround: Some modules use a "secondary default"
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for OmniVision OV5693 5M camera sensor.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -28,8 +29,8 @@
|
|||
#include "hmm/hmm_pool.h"
|
||||
#include "ia_css_types.h"
|
||||
|
||||
#define HMM_CACHED true
|
||||
#define HMM_UNCACHED false
|
||||
#define mmgr_NULL ((ia_css_ptr)0)
|
||||
#define mmgr_EXCEPTION ((ia_css_ptr) - 1)
|
||||
|
||||
int hmm_pool_register(unsigned int pool_size, enum hmm_pool_type pool_type);
|
||||
void hmm_pool_unregister(enum hmm_pool_type pool_type);
|
||||
|
@ -38,7 +39,8 @@ int hmm_init(void);
|
|||
void hmm_cleanup(void);
|
||||
|
||||
ia_css_ptr hmm_alloc(size_t bytes, enum hmm_bo_type type,
|
||||
int from_highmem, const void __user *userptr, bool cached);
|
||||
int from_highmem, const void __user *userptr,
|
||||
const uint16_t attrs);
|
||||
void hmm_free(ia_css_ptr ptr);
|
||||
int hmm_load(ia_css_ptr virt, void *data, unsigned int bytes);
|
||||
int hmm_store(ia_css_ptr virt, const void *data, unsigned int bytes);
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -77,9 +78,6 @@ enum hmm_bo_type {
|
|||
HMM_BO_PRIVATE,
|
||||
HMM_BO_SHARE,
|
||||
HMM_BO_USER,
|
||||
#ifdef CONFIG_ION
|
||||
HMM_BO_ION,
|
||||
#endif
|
||||
HMM_BO_LAST,
|
||||
};
|
||||
|
||||
|
@ -111,9 +109,6 @@ struct hmm_bo_device {
|
|||
|
||||
/* list lock is used to protect the entire_bo_list */
|
||||
spinlock_t list_lock;
|
||||
#ifdef CONFIG_ION
|
||||
struct ion_client *iclient;
|
||||
#endif
|
||||
int flag;
|
||||
|
||||
/* linked list for entire buffer object */
|
||||
|
@ -136,15 +131,14 @@ struct hmm_buffer_object {
|
|||
struct list_head list;
|
||||
struct kref kref;
|
||||
|
||||
struct page **pages;
|
||||
|
||||
/* mutex protecting this BO */
|
||||
struct mutex mutex;
|
||||
enum hmm_bo_type type;
|
||||
struct hmm_page_object *page_obj; /* physical pages */
|
||||
int from_highmem;
|
||||
int mmap_count;
|
||||
#ifdef CONFIG_ION
|
||||
struct ion_handle *ihandle;
|
||||
#endif
|
||||
int status;
|
||||
int mem_type;
|
||||
void *vmap_addr; /* kernel virtual address by vmap */
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
* Copyright (c) 2010 Intel Corporation. All Rights Reserved.
|
||||
*
|
||||
* Copyright (c) 2010 Silicon Hive www.siliconhive.com.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License version
|
||||
* 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __HMM_VM_H__
|
||||
#define __HMM_VM_H__
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/list.h>
|
||||
|
||||
struct hmm_vm {
|
||||
unsigned int start;
|
||||
unsigned int pgnr;
|
||||
unsigned int size;
|
||||
struct list_head vm_node_list;
|
||||
spinlock_t lock;
|
||||
struct kmem_cache *cache;
|
||||
};
|
||||
|
||||
struct hmm_vm_node {
|
||||
struct list_head list;
|
||||
unsigned int start;
|
||||
unsigned int pgnr;
|
||||
unsigned int size;
|
||||
struct hmm_vm *vm;
|
||||
};
|
||||
|
||||
#define ISP_VM_START 0x0
|
||||
#define ISP_VM_SIZE (0x7FFFFFFF) /* 2G address space */
|
||||
#define ISP_PTR_NULL NULL
|
||||
|
||||
int hmm_vm_init(struct hmm_vm *vm, unsigned int start,
|
||||
unsigned int size);
|
||||
|
||||
void hmm_vm_clean(struct hmm_vm *vm);
|
||||
|
||||
struct hmm_vm_node *hmm_vm_alloc_node(struct hmm_vm *vm,
|
||||
unsigned int pgnr);
|
||||
|
||||
void hmm_vm_free_node(struct hmm_vm_node *node);
|
||||
|
||||
struct hmm_vm_node *hmm_vm_find_node_start(struct hmm_vm *vm,
|
||||
unsigned int addr);
|
||||
|
||||
struct hmm_vm_node *hmm_vm_find_node_in_range(struct hmm_vm *vm,
|
||||
unsigned int addr);
|
||||
|
||||
#endif
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -69,9 +70,6 @@
|
|||
#define V4L2_MBUS_FMT_CUSTOM_M10MO_RAW 0x800b
|
||||
#endif
|
||||
|
||||
/* FIXME: for now, let's use a boolean to identify the type of atomisp chipset */
|
||||
extern bool atomisp_hw_is_isp2401;
|
||||
|
||||
/* Configuration used by Bayer noise reduction and YCC noise reduction */
|
||||
struct atomisp_nr_config {
|
||||
/* [gain] Strength of noise reduction for Bayer NR (Used by Bayer NR) */
|
||||
|
@ -509,7 +507,7 @@ struct atomisp_parameters {
|
|||
struct atomisp_shading_table *shading_table;
|
||||
struct atomisp_morph_table *morph_table;
|
||||
struct atomisp_dvs_coefficients *dvs_coefs; /* DVS 1.0 coefficients */
|
||||
struct atomisp_dvs2_coefficients *dvs2_coefs; /* DVS 2.0 coefficients */
|
||||
struct atomisp_dis_coefficients *dvs2_coefs; /* DVS 2.0 coefficients */
|
||||
struct atomisp_capture_config *capture_config;
|
||||
struct atomisp_anr_thres *anr_thres;
|
||||
|
||||
|
@ -917,6 +915,8 @@ struct atomisp_acc_map {
|
|||
|
||||
#define ATOMISP_MAP_FLAG_NOFLUSH 0x0001 /* Do not flush cache */
|
||||
#define ATOMISP_MAP_FLAG_CACHED 0x0002 /* Enable cache */
|
||||
#define ATOMISP_MAP_FLAG_CONTIGUOUS 0x0004
|
||||
#define ATOMISP_MAP_FLAG_CLEARED 0x0008
|
||||
|
||||
struct atomisp_acc_state {
|
||||
__u32 flags; /* Flags, see list below */
|
||||
|
@ -1272,7 +1272,7 @@ struct atomisp_sensor_ae_bracketing_lut {
|
|||
/* VCM slew control */
|
||||
#define V4L2_CID_VCM_SLEW (V4L2_CID_CAMERA_LASTP1 + 11)
|
||||
/* VCM step time */
|
||||
#define V4L2_CID_VCM_TIMEING (V4L2_CID_CAMERA_LASTP1 + 12)
|
||||
#define V4L2_CID_VCM_TIMING (V4L2_CID_CAMERA_LASTP1 + 12)
|
||||
|
||||
/* Query Focus Status */
|
||||
#define V4L2_CID_FOCUS_STATUS (V4L2_CID_CAMERA_LASTP1 + 14)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel MID SoC Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -17,6 +18,9 @@
|
|||
#ifndef ATOMISP_PLATFORM_H_
|
||||
#define ATOMISP_PLATFORM_H_
|
||||
|
||||
#include <asm/intel-family.h>
|
||||
#include <asm/processor.h>
|
||||
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/sfi.h>
|
||||
#include <media/v4l2-subdev.h>
|
||||
|
@ -237,11 +241,19 @@ const struct atomisp_camera_caps *atomisp_get_default_camera_caps(void);
|
|||
/* API from old platform_camera.h, new CPUID implementation */
|
||||
#define __IS_SOC(x) (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && \
|
||||
boot_cpu_data.x86 == 6 && \
|
||||
boot_cpu_data.x86_model == x)
|
||||
boot_cpu_data.x86_model == (x))
|
||||
#define __IS_SOCS(x,y) (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && \
|
||||
boot_cpu_data.x86 == 6 && \
|
||||
(boot_cpu_data.x86_model == (x) || \
|
||||
boot_cpu_data.x86_model == (y)))
|
||||
|
||||
#define IS_MFLD __IS_SOC(0x27)
|
||||
#define IS_BYT __IS_SOC(0x37)
|
||||
#define IS_CHT __IS_SOC(0x4C)
|
||||
#define IS_MOFD __IS_SOC(0x5A)
|
||||
#define IS_MFLD __IS_SOC(INTEL_FAM6_ATOM_SALTWELL_MID)
|
||||
#define IS_BYT __IS_SOC(INTEL_FAM6_ATOM_SILVERMONT)
|
||||
#define IS_CHT __IS_SOC(INTEL_FAM6_ATOM_AIRMONT)
|
||||
#define IS_MOFD __IS_SOC(INTEL_FAM6_ATOM_AIRMONT_MID)
|
||||
|
||||
/* Both CHT and MOFD come with ISP2401 */
|
||||
#define IS_ISP2401 __IS_SOCS(INTEL_FAM6_ATOM_AIRMONT, \
|
||||
INTEL_FAM6_ATOM_AIRMONT_MID)
|
||||
|
||||
#endif /* ATOMISP_PLATFORM_H_ */
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Copyright (c) 2013 Intel Corporation. All Rights Reserved.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* include/media/lm3554.h
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Merrifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Clovertrail PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -23,24 +24,24 @@
|
|||
#include <linux/init.h>
|
||||
#include <media/v4l2-event.h>
|
||||
|
||||
#include "hmm.h"
|
||||
|
||||
#include "atomisp_acc.h"
|
||||
#include "atomisp_internal.h"
|
||||
#include "atomisp_compat.h"
|
||||
#include "atomisp_cmd.h"
|
||||
|
||||
#include "hrt/hive_isp_css_mm_hrt.h"
|
||||
#include "memory_access/memory_access.h"
|
||||
#include "ia_css.h"
|
||||
|
||||
static const struct {
|
||||
unsigned int flag;
|
||||
enum atomisp_css_pipe_id pipe_id;
|
||||
enum ia_css_pipe_id pipe_id;
|
||||
} acc_flag_to_pipe[] = {
|
||||
{ ATOMISP_ACC_FW_LOAD_FL_PREVIEW, CSS_PIPE_ID_PREVIEW },
|
||||
{ ATOMISP_ACC_FW_LOAD_FL_COPY, CSS_PIPE_ID_COPY },
|
||||
{ ATOMISP_ACC_FW_LOAD_FL_VIDEO, CSS_PIPE_ID_VIDEO },
|
||||
{ ATOMISP_ACC_FW_LOAD_FL_CAPTURE, CSS_PIPE_ID_CAPTURE },
|
||||
{ ATOMISP_ACC_FW_LOAD_FL_ACC, CSS_PIPE_ID_ACC }
|
||||
{ ATOMISP_ACC_FW_LOAD_FL_PREVIEW, IA_CSS_PIPE_ID_PREVIEW },
|
||||
{ ATOMISP_ACC_FW_LOAD_FL_COPY, IA_CSS_PIPE_ID_COPY },
|
||||
{ ATOMISP_ACC_FW_LOAD_FL_VIDEO, IA_CSS_PIPE_ID_VIDEO },
|
||||
{ ATOMISP_ACC_FW_LOAD_FL_CAPTURE, IA_CSS_PIPE_ID_CAPTURE },
|
||||
{ ATOMISP_ACC_FW_LOAD_FL_ACC, IA_CSS_PIPE_ID_ACC }
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -353,16 +354,23 @@ int atomisp_acc_map(struct atomisp_sub_device *asd, struct atomisp_acc_map *map)
|
|||
}
|
||||
|
||||
pgnr = DIV_ROUND_UP(map->length, PAGE_SIZE);
|
||||
cssptr = hrt_isp_css_mm_alloc_user_ptr(map->length,
|
||||
map->user_ptr,
|
||||
pgnr, HRT_USR_PTR,
|
||||
(map->flags & ATOMISP_MAP_FLAG_CACHED));
|
||||
if (pgnr < ((PAGE_ALIGN(map->length)) >> PAGE_SHIFT)) {
|
||||
dev_err(atomisp_dev,
|
||||
"user space memory size is less than the expected size..\n");
|
||||
return -ENOMEM;
|
||||
} else if (pgnr > ((PAGE_ALIGN(map->length)) >> PAGE_SHIFT)) {
|
||||
dev_err(atomisp_dev,
|
||||
"user space memory size is large than the expected size..\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
cssptr = hmm_alloc(map->length, HMM_BO_USER, 0, map->user_ptr,
|
||||
map->flags & ATOMISP_MAP_FLAG_CACHED);
|
||||
|
||||
} else {
|
||||
/* Allocate private buffer. */
|
||||
if (map->flags & ATOMISP_MAP_FLAG_CACHED)
|
||||
cssptr = hrt_isp_css_mm_calloc_cached(map->length);
|
||||
else
|
||||
cssptr = hrt_isp_css_mm_calloc(map->length);
|
||||
cssptr = hmm_alloc(map->length, HMM_BO_PRIVATE, 0, NULL,
|
||||
map->flags & ATOMISP_MAP_FLAG_CACHED);
|
||||
}
|
||||
|
||||
if (!cssptr)
|
||||
|
@ -552,7 +560,7 @@ int atomisp_acc_set_state(struct atomisp_sub_device *asd,
|
|||
struct atomisp_acc_fw *acc_fw;
|
||||
bool enable = (arg->flags & ATOMISP_STATE_FLAG_ENABLE) != 0;
|
||||
struct ia_css_pipe *pipe;
|
||||
enum ia_css_err r;
|
||||
int r;
|
||||
int i;
|
||||
|
||||
if (!asd->acc.extension_mode)
|
||||
|
@ -574,7 +582,7 @@ int atomisp_acc_set_state(struct atomisp_sub_device *asd,
|
|||
pipes[acc_flag_to_pipe[i].pipe_id];
|
||||
r = ia_css_pipe_set_qos_ext_state(pipe, acc_fw->handle,
|
||||
enable);
|
||||
if (r != IA_CSS_SUCCESS)
|
||||
if (r)
|
||||
return -EBADRQC;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Clovertrail PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -32,7 +33,7 @@
|
|||
#include "ia_css.h"
|
||||
|
||||
struct atomisp_device;
|
||||
struct atomisp_css_frame;
|
||||
struct ia_css_frame;
|
||||
|
||||
#define MSI_ENABLE_BIT 16
|
||||
#define INTR_DISABLE_BIT 10
|
||||
|
@ -64,16 +65,6 @@ bool atomisp_buffers_queued(struct atomisp_sub_device *asd);
|
|||
/* ISP2401 */
|
||||
bool atomisp_buffers_queued_pipe(struct atomisp_video_pipe *pipe);
|
||||
|
||||
/* TODO:should be here instead of atomisp_helper.h
|
||||
extern void __iomem *atomisp_io_base;
|
||||
|
||||
static inline void __iomem *atomisp_get_io_virt_addr(unsigned int address)
|
||||
{
|
||||
void __iomem *ret = atomisp_io_base + (address & 0x003FFFFF);
|
||||
return ret;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
* Interrupt functions
|
||||
*/
|
||||
|
@ -88,7 +79,7 @@ const struct atomisp_format_bridge *get_atomisp_format_bridge_from_mbus(
|
|||
u32 mbus_code);
|
||||
bool atomisp_is_mbuscode_raw(uint32_t code);
|
||||
int atomisp_get_frame_pgnr(struct atomisp_device *isp,
|
||||
const struct atomisp_css_frame *frame, u32 *p_pgnr);
|
||||
const struct ia_css_frame *frame, u32 *p_pgnr);
|
||||
void atomisp_delayed_init_work(struct work_struct *work);
|
||||
|
||||
/*
|
||||
|
@ -301,8 +292,8 @@ int atomisp_set_array_res(struct atomisp_sub_device *asd,
|
|||
* Function to calculate real zoom region for every pipe
|
||||
*/
|
||||
int atomisp_calculate_real_zoom_region(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_dz_config *dz_config,
|
||||
enum atomisp_css_pipe_id css_pipe_id);
|
||||
struct ia_css_dz_config *dz_config,
|
||||
enum ia_css_pipe_id css_pipe_id);
|
||||
|
||||
int atomisp_cp_general_isp_parameters(struct atomisp_sub_device *asd,
|
||||
struct atomisp_parameters *arg,
|
||||
|
@ -372,8 +363,8 @@ int atomisp_freq_scaling(struct atomisp_device *vdev,
|
|||
bool force);
|
||||
|
||||
void atomisp_buf_done(struct atomisp_sub_device *asd, int error,
|
||||
enum atomisp_css_buffer_type buf_type,
|
||||
enum atomisp_css_pipe_id css_pipe_id,
|
||||
enum ia_css_buffer_type buf_type,
|
||||
enum ia_css_pipe_id css_pipe_id,
|
||||
bool q_buffers, enum atomisp_input_stream_id stream_id);
|
||||
|
||||
void atomisp_css_flush(struct atomisp_device *isp);
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -43,15 +44,11 @@ extern int pad_h;
|
|||
/* ISP2401 */
|
||||
#define ATOMISP_CSS_ISP_PIPE_VERSION_2_7 1
|
||||
|
||||
#define IS_ISP2401(isp) \
|
||||
(((isp)->media_dev.hw_revision & ATOMISP_HW_REVISION_MASK) \
|
||||
>= (ATOMISP_HW_REVISION_ISP2401_LEGACY << ATOMISP_HW_REVISION_SHIFT))
|
||||
|
||||
struct atomisp_format_bridge {
|
||||
unsigned int pixelformat;
|
||||
unsigned int depth;
|
||||
u32 mbus_code;
|
||||
enum atomisp_css_frame_format sh_fmt;
|
||||
enum ia_css_frame_format sh_fmt;
|
||||
unsigned char description[32]; /* the same as struct v4l2_fmtdesc */
|
||||
bool planar;
|
||||
};
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Clovertrail PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -23,116 +24,20 @@
|
|||
#include "../../include/linux/atomisp.h"
|
||||
#include <media/videobuf-vmalloc.h>
|
||||
|
||||
#define CSS_RX_IRQ_INFO_BUFFER_OVERRUN \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_BUFFER_OVERRUN)
|
||||
#define CSS_RX_IRQ_INFO_ENTER_SLEEP_MODE \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_ENTER_SLEEP_MODE)
|
||||
#define CSS_RX_IRQ_INFO_EXIT_SLEEP_MODE \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_EXIT_SLEEP_MODE)
|
||||
#define CSS_RX_IRQ_INFO_ECC_CORRECTED \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_ECC_CORRECTED)
|
||||
#define CSS_RX_IRQ_INFO_ERR_SOT \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_ERR_SOT)
|
||||
#define CSS_RX_IRQ_INFO_ERR_SOT_SYNC \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_ERR_SOT_SYNC)
|
||||
#define CSS_RX_IRQ_INFO_ERR_CONTROL \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_ERR_CONTROL)
|
||||
#define CSS_RX_IRQ_INFO_ERR_ECC_DOUBLE \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_ERR_ECC_DOUBLE)
|
||||
#define CSS_RX_IRQ_INFO_ERR_CRC \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_ERR_CRC)
|
||||
#define CSS_RX_IRQ_INFO_ERR_UNKNOWN_ID \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_ERR_UNKNOWN_ID)
|
||||
#define CSS_RX_IRQ_INFO_ERR_FRAME_SYNC \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_ERR_FRAME_SYNC)
|
||||
#define CSS_RX_IRQ_INFO_ERR_FRAME_DATA \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_ERR_FRAME_DATA)
|
||||
#define CSS_RX_IRQ_INFO_ERR_DATA_TIMEOUT \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_ERR_DATA_TIMEOUT)
|
||||
#define CSS_RX_IRQ_INFO_ERR_UNKNOWN_ESC \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_ERR_UNKNOWN_ESC)
|
||||
#define CSS_RX_IRQ_INFO_ERR_LINE_SYNC \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_ERR_LINE_SYNC)
|
||||
#define CSS_RX_IRQ_INFO_INIT_TIMEOUT \
|
||||
CSS_ID(CSS_RX_IRQ_INFO_INIT_TIMEOUT)
|
||||
|
||||
#define CSS_IRQ_INFO_CSS_RECEIVER_SOF CSS_ID(CSS_IRQ_INFO_CSS_RECEIVER_SOF)
|
||||
#define CSS_IRQ_INFO_CSS_RECEIVER_EOF CSS_ID(CSS_IRQ_INFO_CSS_RECEIVER_EOF)
|
||||
#define CSS_IRQ_INFO_CSS_RECEIVER_FIFO_OVERFLOW \
|
||||
CSS_ID(CSS_IRQ_INFO_CSS_RECEIVER_FIFO_OVERFLOW)
|
||||
#define CSS_EVENT_OUTPUT_FRAME_DONE CSS_EVENT(OUTPUT_FRAME_DONE)
|
||||
#define CSS_EVENT_SEC_OUTPUT_FRAME_DONE CSS_EVENT(SECOND_OUTPUT_FRAME_DONE)
|
||||
#define CSS_EVENT_VF_OUTPUT_FRAME_DONE CSS_EVENT(VF_OUTPUT_FRAME_DONE)
|
||||
#define CSS_EVENT_SEC_VF_OUTPUT_FRAME_DONE CSS_EVENT(SECOND_VF_OUTPUT_FRAME_DONE)
|
||||
#define CSS_EVENT_3A_STATISTICS_DONE CSS_EVENT(3A_STATISTICS_DONE)
|
||||
#define CSS_EVENT_DIS_STATISTICS_DONE CSS_EVENT(DIS_STATISTICS_DONE)
|
||||
#define CSS_EVENT_PIPELINE_DONE CSS_EVENT(PIPELINE_DONE)
|
||||
#define CSS_EVENT_METADATA_DONE CSS_EVENT(METADATA_DONE)
|
||||
#define CSS_EVENT_ACC_STAGE_COMPLETE CSS_EVENT(ACC_STAGE_COMPLETE)
|
||||
#define CSS_EVENT_TIMER CSS_EVENT(TIMER)
|
||||
|
||||
#define CSS_BUFFER_TYPE_METADATA CSS_ID(CSS_BUFFER_TYPE_METADATA)
|
||||
#define CSS_BUFFER_TYPE_3A_STATISTICS CSS_ID(CSS_BUFFER_TYPE_3A_STATISTICS)
|
||||
#define CSS_BUFFER_TYPE_DIS_STATISTICS CSS_ID(CSS_BUFFER_TYPE_DIS_STATISTICS)
|
||||
#define CSS_BUFFER_TYPE_INPUT_FRAME CSS_ID(CSS_BUFFER_TYPE_INPUT_FRAME)
|
||||
#define CSS_BUFFER_TYPE_OUTPUT_FRAME CSS_ID(CSS_BUFFER_TYPE_OUTPUT_FRAME)
|
||||
#define CSS_BUFFER_TYPE_SEC_OUTPUT_FRAME CSS_ID(CSS_BUFFER_TYPE_SEC_OUTPUT_FRAME)
|
||||
#define CSS_BUFFER_TYPE_VF_OUTPUT_FRAME CSS_ID(CSS_BUFFER_TYPE_VF_OUTPUT_FRAME)
|
||||
#define CSS_BUFFER_TYPE_SEC_VF_OUTPUT_FRAME CSS_ID(CSS_BUFFER_TYPE_SEC_VF_OUTPUT_FRAME)
|
||||
#define CSS_BUFFER_TYPE_RAW_OUTPUT_FRAME \
|
||||
CSS_ID(CSS_BUFFER_TYPE_RAW_OUTPUT_FRAME)
|
||||
|
||||
#define CSS_FORMAT_RAW_8 CSS_FORMAT(RAW_8)
|
||||
#define CSS_FORMAT_RAW_10 CSS_FORMAT(RAW_10)
|
||||
#define CSS_FORMAT_RAW_12 CSS_FORMAT(RAW_12)
|
||||
#define CSS_FORMAT_RAW_16 CSS_FORMAT(RAW_16)
|
||||
|
||||
#define CSS_CAPTURE_MODE_RAW CSS_ID(CSS_CAPTURE_MODE_RAW)
|
||||
#define CSS_CAPTURE_MODE_BAYER CSS_ID(CSS_CAPTURE_MODE_BAYER)
|
||||
#define CSS_CAPTURE_MODE_PRIMARY CSS_ID(CSS_CAPTURE_MODE_PRIMARY)
|
||||
#define CSS_CAPTURE_MODE_ADVANCED CSS_ID(CSS_CAPTURE_MODE_ADVANCED)
|
||||
#define CSS_CAPTURE_MODE_LOW_LIGHT CSS_ID(CSS_CAPTURE_MODE_LOW_LIGHT)
|
||||
|
||||
#define CSS_MORPH_TABLE_NUM_PLANES CSS_ID(CSS_MORPH_TABLE_NUM_PLANES)
|
||||
|
||||
#define CSS_FRAME_FORMAT_NV11 CSS_ID(CSS_FRAME_FORMAT_NV11)
|
||||
#define CSS_FRAME_FORMAT_NV12 CSS_ID(CSS_FRAME_FORMAT_NV12)
|
||||
#define CSS_FRAME_FORMAT_NV16 CSS_ID(CSS_FRAME_FORMAT_NV16)
|
||||
#define CSS_FRAME_FORMAT_NV21 CSS_ID(CSS_FRAME_FORMAT_NV21)
|
||||
#define CSS_FRAME_FORMAT_NV61 CSS_ID(CSS_FRAME_FORMAT_NV61)
|
||||
#define CSS_FRAME_FORMAT_YV12 CSS_ID(CSS_FRAME_FORMAT_YV12)
|
||||
#define CSS_FRAME_FORMAT_YV16 CSS_ID(CSS_FRAME_FORMAT_YV16)
|
||||
#define CSS_FRAME_FORMAT_YUV420 CSS_ID(CSS_FRAME_FORMAT_YUV420)
|
||||
#define CSS_FRAME_FORMAT_YUV420_16 CSS_ID(CSS_FRAME_FORMAT_YUV420_16)
|
||||
#define CSS_FRAME_FORMAT_YUV422 CSS_ID(CSS_FRAME_FORMAT_YUV422)
|
||||
#define CSS_FRAME_FORMAT_YUV422_16 CSS_ID(CSS_FRAME_FORMAT_YUV422_16)
|
||||
#define CSS_FRAME_FORMAT_UYVY CSS_ID(CSS_FRAME_FORMAT_UYVY)
|
||||
#define CSS_FRAME_FORMAT_YUYV CSS_ID(CSS_FRAME_FORMAT_YUYV)
|
||||
#define CSS_FRAME_FORMAT_YUV444 CSS_ID(CSS_FRAME_FORMAT_YUV444)
|
||||
#define CSS_FRAME_FORMAT_YUV_LINE CSS_ID(CSS_FRAME_FORMAT_YUV_LINE)
|
||||
#define CSS_FRAME_FORMAT_RAW CSS_ID(CSS_FRAME_FORMAT_RAW)
|
||||
#define CSS_FRAME_FORMAT_RGB565 CSS_ID(CSS_FRAME_FORMAT_RGB565)
|
||||
#define CSS_FRAME_FORMAT_PLANAR_RGB888 CSS_ID(CSS_FRAME_FORMAT_PLANAR_RGB888)
|
||||
#define CSS_FRAME_FORMAT_RGBA888 CSS_ID(CSS_FRAME_FORMAT_RGBA888)
|
||||
#define CSS_FRAME_FORMAT_QPLANE6 CSS_ID(CSS_FRAME_FORMAT_QPLANE6)
|
||||
#define CSS_FRAME_FORMAT_BINARY_8 CSS_ID(CSS_FRAME_FORMAT_BINARY_8)
|
||||
|
||||
struct atomisp_device;
|
||||
struct atomisp_sub_device;
|
||||
struct video_device;
|
||||
enum atomisp_input_stream_id;
|
||||
|
||||
extern void __iomem *atomisp_io_base;
|
||||
|
||||
struct atomisp_metadata_buf {
|
||||
struct ia_css_metadata *metadata;
|
||||
void *md_vptr;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
void atomisp_css_debug_dump_sp_sw_debug_info(void);
|
||||
void atomisp_css_debug_dump_debug_info(const char *context);
|
||||
void atomisp_css_debug_set_dtrace_level(const unsigned int trace_level);
|
||||
|
||||
void atomisp_store_uint32(hrt_address addr, uint32_t data);
|
||||
void atomisp_css2_hw_store_32(hrt_address addr, uint32_t data);
|
||||
void atomisp_load_uint32(hrt_address addr, uint32_t *data);
|
||||
|
||||
int atomisp_css_init(struct atomisp_device *isp);
|
||||
|
@ -155,35 +60,35 @@ void atomisp_css_rx_clear_irq_info(enum mipi_port_id port,
|
|||
unsigned int infos);
|
||||
|
||||
int atomisp_css_irq_enable(struct atomisp_device *isp,
|
||||
enum atomisp_css_irq_info info, bool enable);
|
||||
enum ia_css_irq_info info, bool enable);
|
||||
|
||||
int atomisp_q_video_buffer_to_css(struct atomisp_sub_device *asd,
|
||||
struct videobuf_vmalloc_memory *vm_mem,
|
||||
enum atomisp_input_stream_id stream_id,
|
||||
enum atomisp_css_buffer_type css_buf_type,
|
||||
enum atomisp_css_pipe_id css_pipe_id);
|
||||
enum ia_css_buffer_type css_buf_type,
|
||||
enum ia_css_pipe_id css_pipe_id);
|
||||
|
||||
int atomisp_q_s3a_buffer_to_css(struct atomisp_sub_device *asd,
|
||||
struct atomisp_s3a_buf *s3a_buf,
|
||||
enum atomisp_input_stream_id stream_id,
|
||||
enum atomisp_css_pipe_id css_pipe_id);
|
||||
enum ia_css_pipe_id css_pipe_id);
|
||||
|
||||
int atomisp_q_metadata_buffer_to_css(struct atomisp_sub_device *asd,
|
||||
struct atomisp_metadata_buf *metadata_buf,
|
||||
enum atomisp_input_stream_id stream_id,
|
||||
enum atomisp_css_pipe_id css_pipe_id);
|
||||
enum ia_css_pipe_id css_pipe_id);
|
||||
|
||||
int atomisp_q_dis_buffer_to_css(struct atomisp_sub_device *asd,
|
||||
struct atomisp_dis_buf *dis_buf,
|
||||
enum atomisp_input_stream_id stream_id,
|
||||
enum atomisp_css_pipe_id css_pipe_id);
|
||||
enum ia_css_pipe_id css_pipe_id);
|
||||
|
||||
void atomisp_css_mmu_invalidate_cache(void);
|
||||
void ia_css_mmu_invalidate_cache(void);
|
||||
|
||||
void atomisp_css_mmu_invalidate_tlb(void);
|
||||
void ia_css_mmu_invalidate_cache(void);
|
||||
|
||||
int atomisp_css_start(struct atomisp_sub_device *asd,
|
||||
enum atomisp_css_pipe_id pipe_id, bool in_reset);
|
||||
enum ia_css_pipe_id pipe_id, bool in_reset);
|
||||
|
||||
void atomisp_css_update_isp_params(struct atomisp_sub_device *asd);
|
||||
void atomisp_css_update_isp_params_on_pipe(struct atomisp_sub_device *asd,
|
||||
|
@ -191,14 +96,14 @@ void atomisp_css_update_isp_params_on_pipe(struct atomisp_sub_device *asd,
|
|||
|
||||
int atomisp_css_queue_buffer(struct atomisp_sub_device *asd,
|
||||
enum atomisp_input_stream_id stream_id,
|
||||
enum atomisp_css_pipe_id pipe_id,
|
||||
enum atomisp_css_buffer_type buf_type,
|
||||
enum ia_css_pipe_id pipe_id,
|
||||
enum ia_css_buffer_type buf_type,
|
||||
struct atomisp_css_buffer *isp_css_buffer);
|
||||
|
||||
int atomisp_css_dequeue_buffer(struct atomisp_sub_device *asd,
|
||||
enum atomisp_input_stream_id stream_id,
|
||||
enum atomisp_css_pipe_id pipe_id,
|
||||
enum atomisp_css_buffer_type buf_type,
|
||||
enum ia_css_pipe_id pipe_id,
|
||||
enum ia_css_buffer_type buf_type,
|
||||
struct atomisp_css_buffer *isp_css_buffer);
|
||||
|
||||
int atomisp_css_allocate_stat_buffers(struct atomisp_sub_device *asd,
|
||||
|
@ -217,7 +122,7 @@ void atomisp_css_free_metadata_buffer(struct atomisp_metadata_buf
|
|||
*metadata_buf);
|
||||
|
||||
int atomisp_css_get_grid_info(struct atomisp_sub_device *asd,
|
||||
enum atomisp_css_pipe_id pipe_id,
|
||||
enum ia_css_pipe_id pipe_id,
|
||||
int source_pad);
|
||||
|
||||
int atomisp_alloc_3a_output_buf(struct atomisp_sub_device *asd);
|
||||
|
@ -287,7 +192,7 @@ void atomisp_css_input_set_binning_factor(struct atomisp_sub_device *asd,
|
|||
|
||||
void atomisp_css_input_set_bayer_order(struct atomisp_sub_device *asd,
|
||||
enum atomisp_input_stream_id stream_id,
|
||||
enum atomisp_css_bayer_order bayer_order);
|
||||
enum ia_css_bayer_order bayer_order);
|
||||
|
||||
void atomisp_css_input_set_format(struct atomisp_sub_device *asd,
|
||||
enum atomisp_input_stream_id stream_id,
|
||||
|
@ -312,10 +217,10 @@ void atomisp_css_enable_raw_binning(struct atomisp_sub_device *asd,
|
|||
void atomisp_css_enable_dz(struct atomisp_sub_device *asd, bool enable);
|
||||
|
||||
void atomisp_css_capture_set_mode(struct atomisp_sub_device *asd,
|
||||
enum atomisp_css_capture_mode mode);
|
||||
enum ia_css_capture_mode mode);
|
||||
|
||||
void atomisp_css_input_set_mode(struct atomisp_sub_device *asd,
|
||||
enum atomisp_css_input_mode mode);
|
||||
enum ia_css_input_mode mode);
|
||||
|
||||
void atomisp_css_capture_enable_online(struct atomisp_sub_device *asd,
|
||||
unsigned short stream_index, bool enable);
|
||||
|
@ -341,130 +246,103 @@ int atomisp_css_input_configure_port(struct atomisp_sub_device *asd,
|
|||
unsigned int metadata_width,
|
||||
unsigned int metadata_height);
|
||||
|
||||
int atomisp_css_frame_allocate(struct atomisp_css_frame **frame,
|
||||
unsigned int width, unsigned int height,
|
||||
enum atomisp_css_frame_format format,
|
||||
unsigned int padded_width,
|
||||
unsigned int raw_bit_depth);
|
||||
|
||||
int atomisp_css_frame_allocate_from_info(struct atomisp_css_frame **frame,
|
||||
const struct atomisp_css_frame_info *info);
|
||||
|
||||
void atomisp_css_frame_free(struct atomisp_css_frame *frame);
|
||||
|
||||
int atomisp_css_frame_map(struct atomisp_css_frame **frame,
|
||||
const struct atomisp_css_frame_info *info,
|
||||
const void __user *data, uint16_t attribute,
|
||||
void *context);
|
||||
|
||||
int atomisp_css_set_black_frame(struct atomisp_sub_device *asd,
|
||||
const struct atomisp_css_frame *raw_black_frame);
|
||||
|
||||
int atomisp_css_allocate_continuous_frames(bool init_time,
|
||||
struct atomisp_sub_device *asd);
|
||||
|
||||
void atomisp_css_update_continuous_frames(struct atomisp_sub_device *asd);
|
||||
|
||||
void atomisp_create_pipes_stream(struct atomisp_sub_device *asd);
|
||||
void atomisp_destroy_pipes_stream_force(struct atomisp_sub_device *asd);
|
||||
|
||||
int atomisp_css_stop(struct atomisp_sub_device *asd,
|
||||
enum atomisp_css_pipe_id pipe_id, bool in_reset);
|
||||
enum ia_css_pipe_id pipe_id, bool in_reset);
|
||||
|
||||
int atomisp_css_continuous_set_num_raw_frames(
|
||||
struct atomisp_sub_device *asd,
|
||||
int num_frames);
|
||||
|
||||
void atomisp_css_disable_vf_pp(struct atomisp_sub_device *asd,
|
||||
bool disable);
|
||||
|
||||
int atomisp_css_copy_configure_output(struct atomisp_sub_device *asd,
|
||||
unsigned int stream_index,
|
||||
unsigned int width, unsigned int height,
|
||||
unsigned int padded_width,
|
||||
enum atomisp_css_frame_format format);
|
||||
enum ia_css_frame_format format);
|
||||
|
||||
int atomisp_css_yuvpp_configure_output(struct atomisp_sub_device *asd,
|
||||
unsigned int stream_index,
|
||||
unsigned int width, unsigned int height,
|
||||
unsigned int padded_width,
|
||||
enum atomisp_css_frame_format format);
|
||||
enum ia_css_frame_format format);
|
||||
|
||||
int atomisp_css_yuvpp_configure_viewfinder(
|
||||
struct atomisp_sub_device *asd,
|
||||
unsigned int stream_index,
|
||||
unsigned int width, unsigned int height,
|
||||
unsigned int min_width,
|
||||
enum atomisp_css_frame_format format);
|
||||
enum ia_css_frame_format format);
|
||||
|
||||
int atomisp_css_yuvpp_get_output_frame_info(
|
||||
struct atomisp_sub_device *asd,
|
||||
unsigned int stream_index,
|
||||
struct atomisp_css_frame_info *info);
|
||||
struct ia_css_frame_info *info);
|
||||
|
||||
int atomisp_css_yuvpp_get_viewfinder_frame_info(
|
||||
struct atomisp_sub_device *asd,
|
||||
unsigned int stream_index,
|
||||
struct atomisp_css_frame_info *info);
|
||||
struct ia_css_frame_info *info);
|
||||
|
||||
int atomisp_css_preview_configure_output(struct atomisp_sub_device *asd,
|
||||
unsigned int width, unsigned int height,
|
||||
unsigned int min_width,
|
||||
enum atomisp_css_frame_format format);
|
||||
enum ia_css_frame_format format);
|
||||
|
||||
int atomisp_css_capture_configure_output(struct atomisp_sub_device *asd,
|
||||
unsigned int width, unsigned int height,
|
||||
unsigned int min_width,
|
||||
enum atomisp_css_frame_format format);
|
||||
enum ia_css_frame_format format);
|
||||
|
||||
int atomisp_css_video_configure_output(struct atomisp_sub_device *asd,
|
||||
unsigned int width, unsigned int height,
|
||||
unsigned int min_width,
|
||||
enum atomisp_css_frame_format format);
|
||||
enum ia_css_frame_format format);
|
||||
|
||||
int atomisp_get_css_frame_info(struct atomisp_sub_device *asd,
|
||||
u16 source_pad,
|
||||
struct atomisp_css_frame_info *frame_info);
|
||||
struct ia_css_frame_info *frame_info);
|
||||
|
||||
int atomisp_css_video_configure_viewfinder(struct atomisp_sub_device *asd,
|
||||
unsigned int width, unsigned int height,
|
||||
unsigned int min_width,
|
||||
enum atomisp_css_frame_format format);
|
||||
enum ia_css_frame_format format);
|
||||
|
||||
int atomisp_css_capture_configure_viewfinder(
|
||||
struct atomisp_sub_device *asd,
|
||||
unsigned int width, unsigned int height,
|
||||
unsigned int min_width,
|
||||
enum atomisp_css_frame_format format);
|
||||
enum ia_css_frame_format format);
|
||||
|
||||
int atomisp_css_video_get_viewfinder_frame_info(
|
||||
struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_frame_info *info);
|
||||
struct ia_css_frame_info *info);
|
||||
|
||||
int atomisp_css_capture_get_viewfinder_frame_info(
|
||||
struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_frame_info *info);
|
||||
struct ia_css_frame_info *info);
|
||||
|
||||
int atomisp_css_copy_get_output_frame_info(
|
||||
struct atomisp_sub_device *asd,
|
||||
unsigned int stream_index,
|
||||
struct atomisp_css_frame_info *info);
|
||||
struct ia_css_frame_info *info);
|
||||
|
||||
int atomisp_css_capture_get_output_raw_frame_info(
|
||||
struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_frame_info *info);
|
||||
struct ia_css_frame_info *info);
|
||||
|
||||
int atomisp_css_preview_get_output_frame_info(
|
||||
struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_frame_info *info);
|
||||
struct ia_css_frame_info *info);
|
||||
|
||||
int atomisp_css_capture_get_output_frame_info(
|
||||
struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_frame_info *info);
|
||||
struct ia_css_frame_info *info);
|
||||
|
||||
int atomisp_css_video_get_output_frame_info(
|
||||
struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_frame_info *info);
|
||||
struct ia_css_frame_info *info);
|
||||
|
||||
int atomisp_css_preview_configure_pp_input(
|
||||
struct atomisp_sub_device *asd,
|
||||
|
@ -486,60 +364,8 @@ int atomisp_css_exp_id_unlock(struct atomisp_sub_device *asd, int exp_id);
|
|||
int atomisp_css_capture_enable_xnr(struct atomisp_sub_device *asd,
|
||||
bool enable);
|
||||
|
||||
void atomisp_css_send_input_frame(struct atomisp_sub_device *asd,
|
||||
unsigned short *data, unsigned int width,
|
||||
unsigned int height);
|
||||
|
||||
bool atomisp_css_isp_has_started(void);
|
||||
|
||||
void atomisp_css_request_flash(struct atomisp_sub_device *asd);
|
||||
|
||||
void atomisp_css_set_wb_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_wb_config *wb_config);
|
||||
|
||||
void atomisp_css_set_ob_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_ob_config *ob_config);
|
||||
|
||||
void atomisp_css_set_dp_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_dp_config *dp_config);
|
||||
|
||||
void atomisp_css_set_de_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_de_config *de_config);
|
||||
|
||||
void atomisp_css_set_dz_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_dz_config *dz_config);
|
||||
|
||||
void atomisp_css_set_default_de_config(struct atomisp_sub_device *asd);
|
||||
|
||||
void atomisp_css_set_ce_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_ce_config *ce_config);
|
||||
|
||||
void atomisp_css_set_nr_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_nr_config *nr_config);
|
||||
|
||||
void atomisp_css_set_ee_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_ee_config *ee_config);
|
||||
|
||||
void atomisp_css_set_tnr_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_tnr_config *tnr_config);
|
||||
|
||||
void atomisp_css_set_cc_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_cc_config *cc_config);
|
||||
|
||||
void atomisp_css_set_macc_table(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_macc_table *macc_table);
|
||||
|
||||
void atomisp_css_set_gamma_table(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_gamma_table *gamma_table);
|
||||
|
||||
void atomisp_css_set_ctc_table(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_ctc_table *ctc_table);
|
||||
|
||||
void atomisp_css_set_gc_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_gc_config *gc_config);
|
||||
|
||||
void atomisp_css_set_3a_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_3a_config *s3a_config);
|
||||
struct ia_css_ctc_table *ctc_table);
|
||||
|
||||
void atomisp_css_video_set_dis_vector(struct atomisp_sub_device *asd,
|
||||
struct atomisp_dis_vector *vector);
|
||||
|
@ -590,29 +416,29 @@ int atomisp_css_get_formats_config(struct atomisp_sub_device *asd,
|
|||
struct atomisp_formats_config *formats_config);
|
||||
|
||||
void atomisp_css_set_formats_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_formats_config *formats_config);
|
||||
struct ia_css_formats_config *formats_config);
|
||||
|
||||
int atomisp_css_get_zoom_factor(struct atomisp_sub_device *asd,
|
||||
unsigned int *zoom);
|
||||
|
||||
struct atomisp_css_shading_table *atomisp_css_shading_table_alloc(
|
||||
struct ia_css_shading_table *atomisp_css_shading_table_alloc(
|
||||
unsigned int width, unsigned int height);
|
||||
|
||||
void atomisp_css_set_shading_table(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_shading_table *table);
|
||||
struct ia_css_shading_table *table);
|
||||
|
||||
void atomisp_css_shading_table_free(struct atomisp_css_shading_table *table);
|
||||
void atomisp_css_shading_table_free(struct ia_css_shading_table *table);
|
||||
|
||||
struct atomisp_css_morph_table *atomisp_css_morph_table_allocate(
|
||||
struct ia_css_morph_table *atomisp_css_morph_table_allocate(
|
||||
unsigned int width, unsigned int height);
|
||||
|
||||
void atomisp_css_set_morph_table(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_morph_table *table);
|
||||
struct ia_css_morph_table *table);
|
||||
|
||||
void atomisp_css_get_morph_table(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_morph_table *table);
|
||||
struct ia_css_morph_table *table);
|
||||
|
||||
void atomisp_css_morph_table_free(struct atomisp_css_morph_table *table);
|
||||
void atomisp_css_morph_table_free(struct ia_css_morph_table *table);
|
||||
|
||||
void atomisp_css_set_cont_prev_start_time(struct atomisp_device *isp,
|
||||
unsigned int overlap);
|
||||
|
@ -631,20 +457,20 @@ int atomisp_css_stop_acc_pipe(struct atomisp_sub_device *asd);
|
|||
void atomisp_css_destroy_acc_pipe(struct atomisp_sub_device *asd);
|
||||
|
||||
int atomisp_css_load_acc_extension(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_fw_info *fw,
|
||||
enum atomisp_css_pipe_id pipe_id,
|
||||
struct ia_css_fw_info *fw,
|
||||
enum ia_css_pipe_id pipe_id,
|
||||
unsigned int type);
|
||||
|
||||
void atomisp_css_unload_acc_extension(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_fw_info *fw,
|
||||
enum atomisp_css_pipe_id pipe_id);
|
||||
struct ia_css_fw_info *fw,
|
||||
enum ia_css_pipe_id pipe_id);
|
||||
|
||||
int atomisp_css_wait_acc_finish(struct atomisp_sub_device *asd);
|
||||
|
||||
void atomisp_css_acc_done(struct atomisp_sub_device *asd);
|
||||
|
||||
int atomisp_css_load_acc_binary(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_fw_info *fw,
|
||||
struct ia_css_fw_info *fw,
|
||||
unsigned int index);
|
||||
|
||||
void atomisp_css_unload_acc_binary(struct atomisp_sub_device *asd);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Clovertrail PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -30,97 +31,6 @@
|
|||
#define ATOMISP_CSS2_NUM_OFFLINE_INIT_CONTINUOUS_FRAMES_LOCK_EN 4
|
||||
#define ATOMISP_CSS2_NUM_DVS_FRAME_DELAY 2
|
||||
|
||||
#define atomisp_css_pipe_id ia_css_pipe_id
|
||||
#define atomisp_css_pipeline ia_css_pipe
|
||||
#define atomisp_css_buffer_type ia_css_buffer_type
|
||||
#define atomisp_css_dis_data ia_css_isp_dvs_statistics
|
||||
#define atomisp_css_irq_info ia_css_irq_info
|
||||
#define atomisp_css_isp_config ia_css_isp_config
|
||||
#define atomisp_css_bayer_order ia_css_bayer_order
|
||||
#define atomisp_css_capture_mode ia_css_capture_mode
|
||||
#define atomisp_css_input_mode ia_css_input_mode
|
||||
#define atomisp_css_frame ia_css_frame
|
||||
#define atomisp_css_frame_format ia_css_frame_format
|
||||
#define atomisp_css_frame_info ia_css_frame_info
|
||||
#define atomisp_css_dp_config ia_css_dp_config
|
||||
#define atomisp_css_wb_config ia_css_wb_config
|
||||
#define atomisp_css_cc_config ia_css_cc_config
|
||||
#define atomisp_css_nr_config ia_css_nr_config
|
||||
#define atomisp_css_ee_config ia_css_ee_config
|
||||
#define atomisp_css_ob_config ia_css_ob_config
|
||||
#define atomisp_css_de_config ia_css_de_config
|
||||
#define atomisp_css_dz_config ia_css_dz_config
|
||||
#define atomisp_css_ce_config ia_css_ce_config
|
||||
#define atomisp_css_gc_config ia_css_gc_config
|
||||
#define atomisp_css_tnr_config ia_css_tnr_config
|
||||
#define atomisp_css_cnr_config ia_css_cnr_config
|
||||
#define atomisp_css_ctc_config ia_css_ctc_config
|
||||
#define atomisp_css_3a_config ia_css_3a_config
|
||||
#define atomisp_css_ecd_config ia_css_ecd_config
|
||||
#define atomisp_css_ynr_config ia_css_ynr_config
|
||||
#define atomisp_css_fc_config ia_css_fc_config
|
||||
#define atomisp_css_aa_config ia_css_aa_config
|
||||
#define atomisp_css_baa_config ia_css_aa_config
|
||||
#define atomisp_css_anr_config ia_css_anr_config
|
||||
#define atomisp_css_xnr_config ia_css_xnr_config
|
||||
#define atomisp_css_macc_config ia_css_macc_config
|
||||
#define atomisp_css_gamma_table ia_css_gamma_table
|
||||
#define atomisp_css_ctc_table ia_css_ctc_table
|
||||
#define atomisp_css_macc_table ia_css_macc_table
|
||||
#define atomisp_css_xnr_table ia_css_xnr_table
|
||||
#define atomisp_css_rgb_gamma_table ia_css_rgb_gamma_table
|
||||
#define atomisp_css_anr_thres ia_css_anr_thres
|
||||
#define atomisp_css_dvs_6axis ia_css_dvs_6axis_config
|
||||
#define atomisp_css_grid_info ia_css_grid_info
|
||||
#define atomisp_css_3a_grid_info ia_css_3a_grid_info
|
||||
#define atomisp_css_dvs_grid_info ia_css_dvs_grid_info
|
||||
#define atomisp_css_shading_table ia_css_shading_table
|
||||
#define atomisp_css_morph_table ia_css_morph_table
|
||||
#define atomisp_css_dvs_6axis_config ia_css_dvs_6axis_config
|
||||
#define atomisp_css_fw_info ia_css_fw_info
|
||||
#define atomisp_css_formats_config ia_css_formats_config
|
||||
|
||||
#define CSS_PIPE_ID_PREVIEW IA_CSS_PIPE_ID_PREVIEW
|
||||
#define CSS_PIPE_ID_COPY IA_CSS_PIPE_ID_COPY
|
||||
#define CSS_PIPE_ID_VIDEO IA_CSS_PIPE_ID_VIDEO
|
||||
#define CSS_PIPE_ID_CAPTURE IA_CSS_PIPE_ID_CAPTURE
|
||||
#define CSS_PIPE_ID_ACC IA_CSS_PIPE_ID_ACC
|
||||
#define CSS_PIPE_ID_YUVPP IA_CSS_PIPE_ID_YUVPP
|
||||
#define CSS_PIPE_ID_NUM IA_CSS_PIPE_ID_NUM
|
||||
|
||||
#define CSS_INPUT_MODE_SENSOR IA_CSS_INPUT_MODE_BUFFERED_SENSOR
|
||||
#define CSS_INPUT_MODE_FIFO IA_CSS_INPUT_MODE_FIFO
|
||||
#define CSS_INPUT_MODE_TPG IA_CSS_INPUT_MODE_TPG
|
||||
#define CSS_INPUT_MODE_PRBS IA_CSS_INPUT_MODE_PRBS
|
||||
#define CSS_INPUT_MODE_MEMORY IA_CSS_INPUT_MODE_MEMORY
|
||||
|
||||
#define CSS_IRQ_INFO_CSS_RECEIVER_ERROR IA_CSS_IRQ_INFO_CSS_RECEIVER_ERROR
|
||||
#define CSS_IRQ_INFO_EVENTS_READY IA_CSS_IRQ_INFO_EVENTS_READY
|
||||
#define CSS_IRQ_INFO_INPUT_SYSTEM_ERROR \
|
||||
IA_CSS_IRQ_INFO_INPUT_SYSTEM_ERROR
|
||||
#define CSS_IRQ_INFO_IF_ERROR IA_CSS_IRQ_INFO_IF_ERROR
|
||||
|
||||
#define CSS_BUFFER_TYPE_NUM IA_CSS_BUFFER_TYPE_NUM
|
||||
|
||||
#define CSS_FRAME_FLASH_STATE_NONE IA_CSS_FRAME_FLASH_STATE_NONE
|
||||
#define CSS_FRAME_FLASH_STATE_PARTIAL IA_CSS_FRAME_FLASH_STATE_PARTIAL
|
||||
#define CSS_FRAME_FLASH_STATE_FULL IA_CSS_FRAME_FLASH_STATE_FULL
|
||||
|
||||
#define CSS_BAYER_ORDER_GRBG IA_CSS_BAYER_ORDER_GRBG
|
||||
#define CSS_BAYER_ORDER_RGGB IA_CSS_BAYER_ORDER_RGGB
|
||||
#define CSS_BAYER_ORDER_BGGR IA_CSS_BAYER_ORDER_BGGR
|
||||
#define CSS_BAYER_ORDER_GBRG IA_CSS_BAYER_ORDER_GBRG
|
||||
|
||||
/*
|
||||
* Hide IA_ naming difference in otherwise common CSS macros.
|
||||
*/
|
||||
#define CSS_ID(val) (IA_ ## val)
|
||||
#define CSS_EVENT(val) (IA_CSS_EVENT_TYPE_ ## val)
|
||||
#define CSS_FORMAT(val) (ATOMISP_INPUT_FORMAT_ ## val)
|
||||
|
||||
#define CSS_EVENT_PORT_EOF CSS_EVENT(PORT_EOF)
|
||||
#define CSS_EVENT_FRAME_TAGGED CSS_EVENT(FRAME_TAGGED)
|
||||
|
||||
#define CSS_MIPI_FRAME_BUFFER_SIZE_1 0x60000
|
||||
#define CSS_MIPI_FRAME_BUFFER_SIZE_2 0x80000
|
||||
|
||||
|
@ -181,7 +91,7 @@ struct atomisp_s3a_buf {
|
|||
};
|
||||
|
||||
struct atomisp_dis_buf {
|
||||
struct atomisp_css_dis_data *dis_data;
|
||||
struct ia_css_isp_dvs_statistics *dis_data;
|
||||
struct ia_css_isp_dvs_statistics_map *dvs_map;
|
||||
struct list_head list;
|
||||
};
|
||||
|
@ -191,71 +101,53 @@ struct atomisp_css_buffer {
|
|||
};
|
||||
|
||||
struct atomisp_css_event {
|
||||
enum atomisp_css_pipe_id pipe;
|
||||
enum ia_css_pipe_id pipe;
|
||||
struct ia_css_event event;
|
||||
};
|
||||
|
||||
void atomisp_css_set_macc_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_macc_config *macc_config);
|
||||
struct ia_css_macc_config *macc_config);
|
||||
|
||||
void atomisp_css_set_ecd_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_ecd_config *ecd_config);
|
||||
struct ia_css_ecd_config *ecd_config);
|
||||
|
||||
void atomisp_css_set_ynr_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_ynr_config *ynr_config);
|
||||
struct ia_css_ynr_config *ynr_config);
|
||||
|
||||
void atomisp_css_set_fc_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_fc_config *fc_config);
|
||||
struct ia_css_fc_config *fc_config);
|
||||
|
||||
void atomisp_css_set_aa_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_aa_config *aa_config);
|
||||
struct ia_css_aa_config *aa_config);
|
||||
|
||||
void atomisp_css_set_baa_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_baa_config *baa_config);
|
||||
struct ia_css_aa_config *baa_config);
|
||||
|
||||
void atomisp_css_set_anr_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_anr_config *anr_config);
|
||||
struct ia_css_anr_config *anr_config);
|
||||
|
||||
void atomisp_css_set_xnr_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_xnr_config *xnr_config);
|
||||
struct ia_css_xnr_config *xnr_config);
|
||||
|
||||
void atomisp_css_set_cnr_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_cnr_config *cnr_config);
|
||||
struct ia_css_cnr_config *cnr_config);
|
||||
|
||||
void atomisp_css_set_ctc_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_ctc_config *ctc_config);
|
||||
struct ia_css_ctc_config *ctc_config);
|
||||
|
||||
void atomisp_css_set_yuv2rgb_cc_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_cc_config *yuv2rgb_cc_config);
|
||||
struct ia_css_cc_config *yuv2rgb_cc_config);
|
||||
|
||||
void atomisp_css_set_rgb2yuv_cc_config(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_cc_config *rgb2yuv_cc_config);
|
||||
|
||||
void atomisp_css_set_xnr_table(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_xnr_table *xnr_table);
|
||||
|
||||
void atomisp_css_set_r_gamma_table(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_rgb_gamma_table *r_gamma_table);
|
||||
|
||||
void atomisp_css_set_g_gamma_table(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_rgb_gamma_table *g_gamma_table);
|
||||
|
||||
void atomisp_css_set_b_gamma_table(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_rgb_gamma_table *b_gamma_table);
|
||||
struct ia_css_cc_config *rgb2yuv_cc_config);
|
||||
|
||||
void atomisp_css_set_anr_thres(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_anr_thres *anr_thres);
|
||||
|
||||
int atomisp_css_check_firmware_version(struct atomisp_device *isp);
|
||||
struct ia_css_anr_thres *anr_thres);
|
||||
|
||||
int atomisp_css_load_firmware(struct atomisp_device *isp);
|
||||
|
||||
void atomisp_css_unload_firmware(struct atomisp_device *isp);
|
||||
|
||||
void atomisp_css_set_dvs_6axis(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_dvs_6axis *dvs_6axis);
|
||||
|
||||
unsigned int atomisp_css_debug_get_dtrace_level(void);
|
||||
struct ia_css_dvs_6axis_config *dvs_6axis);
|
||||
|
||||
int atomisp_css_debug_dump_isp_binary(void);
|
||||
|
||||
|
@ -267,11 +159,11 @@ void atomisp_css_set_isp_config_id(struct atomisp_sub_device *asd,
|
|||
uint32_t isp_config_id);
|
||||
|
||||
void atomisp_css_set_isp_config_applied_frame(struct atomisp_sub_device *asd,
|
||||
struct atomisp_css_frame *output_frame);
|
||||
struct ia_css_frame *output_frame);
|
||||
|
||||
int atomisp_get_css_dbgfunc(void);
|
||||
|
||||
int atomisp_set_css_dbgfunc(struct atomisp_device *isp, int opt);
|
||||
struct atomisp_css_dvs_grid_info *atomisp_css_get_dvs_grid_info(
|
||||
struct atomisp_css_grid_info *grid_info);
|
||||
struct ia_css_dvs_grid_info *atomisp_css_get_dvs_grid_info(
|
||||
struct ia_css_grid_info *grid_info);
|
||||
#endif
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -384,9 +385,9 @@ static void atomisp_csi2_configure_isp2401(struct atomisp_sub_device *asd)
|
|||
for (n = 0; n < csi2_port_lanes[port] + 1; n++) {
|
||||
hrt_address base = csi2_port_base[port] + csi2_lane_base[n];
|
||||
|
||||
atomisp_store_uint32(base + CSI2_REG_RX_CSI_DLY_CNT_TERMEN,
|
||||
atomisp_css2_hw_store_32(base + CSI2_REG_RX_CSI_DLY_CNT_TERMEN,
|
||||
n == 0 ? clk_termen : dat_termen);
|
||||
atomisp_store_uint32(base + CSI2_REG_RX_CSI_DLY_CNT_SETTLE,
|
||||
atomisp_css2_hw_store_32(base + CSI2_REG_RX_CSI_DLY_CNT_SETTLE,
|
||||
n == 0 ? clk_settle : dat_settle);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for atomisp driver sysfs interface
|
||||
*
|
||||
|
@ -24,6 +25,7 @@
|
|||
#include "atomisp_ioctl.h"
|
||||
#include "atomisp_drvfs.h"
|
||||
#include "hmm/hmm.h"
|
||||
#include "ia_css_debug.h"
|
||||
|
||||
/*
|
||||
* _iunit_debug:
|
||||
|
@ -94,7 +96,7 @@ static inline int iunit_dump_dbgopt(struct atomisp_device *isp,
|
|||
|
||||
static ssize_t iunit_dbglvl_show(struct device_driver *drv, char *buf)
|
||||
{
|
||||
iunit_debug.dbglvl = atomisp_css_debug_get_dtrace_level();
|
||||
iunit_debug.dbglvl = dbg_level;
|
||||
return sprintf(buf, "dtrace level:%u\n", iunit_debug.dbglvl);
|
||||
}
|
||||
|
||||
|
@ -106,7 +108,7 @@ static ssize_t iunit_dbglvl_store(struct device_driver *drv, const char *buf,
|
|||
|| iunit_debug.dbglvl > 9) {
|
||||
return -ERANGE;
|
||||
}
|
||||
atomisp_css_debug_set_dtrace_level(iunit_debug.dbglvl);
|
||||
ia_css_debug_set_dtrace_level(iunit_debug.dbglvl);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for atomisp driver sysfs interface.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -50,11 +51,12 @@ static void file_work(struct work_struct *work)
|
|||
V4L2_SUBDEV_FORMAT_ACTIVE,
|
||||
ATOMISP_SUBDEV_PAD_SINK);
|
||||
|
||||
while (!atomisp_css_isp_has_started())
|
||||
while (!ia_css_isp_has_started())
|
||||
usleep_range(1000, 1500);
|
||||
|
||||
atomisp_css_send_input_frame(asd, buf, isp_sink_fmt.width,
|
||||
isp_sink_fmt.height);
|
||||
ia_css_stream_send_input_frame(asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL].stream,
|
||||
buf, isp_sink_fmt.width,
|
||||
isp_sink_fmt.height);
|
||||
dev_dbg(isp->dev, "<%s: streaming done\n", __func__);
|
||||
}
|
||||
|
||||
|
@ -217,7 +219,7 @@ int atomisp_file_input_init(struct atomisp_device *isp)
|
|||
|
||||
v4l2_subdev_init(sd, &file_input_ops);
|
||||
sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
|
||||
strcpy(sd->name, "file_input_subdev");
|
||||
strscpy(sd->name, "file_input_subdev", sizeof(sd->name));
|
||||
v4l2_set_subdevdata(sd, file_dev);
|
||||
|
||||
pads[0].flags = MEDIA_PAD_FL_SINK;
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -34,11 +35,8 @@
|
|||
#include "atomisp-regs.h"
|
||||
#include "hmm/hmm.h"
|
||||
|
||||
#include "hrt/hive_isp_css_mm_hrt.h"
|
||||
|
||||
#include "type_support.h"
|
||||
#include "device_access/device_access.h"
|
||||
#include "memory_access/memory_access.h"
|
||||
|
||||
#include "atomisp_acc.h"
|
||||
|
||||
|
@ -88,7 +86,7 @@ static int atomisp_buf_prepare(struct videobuf_queue *vq,
|
|||
|
||||
static int atomisp_q_one_metadata_buffer(struct atomisp_sub_device *asd,
|
||||
enum atomisp_input_stream_id stream_id,
|
||||
enum atomisp_css_pipe_id css_pipe_id)
|
||||
enum ia_css_pipe_id css_pipe_id)
|
||||
{
|
||||
struct atomisp_metadata_buf *metadata_buf;
|
||||
enum atomisp_metadata_type md_type =
|
||||
|
@ -128,7 +126,7 @@ static int atomisp_q_one_metadata_buffer(struct atomisp_sub_device *asd,
|
|||
|
||||
static int atomisp_q_one_s3a_buffer(struct atomisp_sub_device *asd,
|
||||
enum atomisp_input_stream_id stream_id,
|
||||
enum atomisp_css_pipe_id css_pipe_id)
|
||||
enum ia_css_pipe_id css_pipe_id)
|
||||
{
|
||||
struct atomisp_s3a_buf *s3a_buf;
|
||||
struct list_head *s3a_list;
|
||||
|
@ -170,7 +168,7 @@ static int atomisp_q_one_s3a_buffer(struct atomisp_sub_device *asd,
|
|||
|
||||
static int atomisp_q_one_dis_buffer(struct atomisp_sub_device *asd,
|
||||
enum atomisp_input_stream_id stream_id,
|
||||
enum atomisp_css_pipe_id css_pipe_id)
|
||||
enum ia_css_pipe_id css_pipe_id)
|
||||
{
|
||||
struct atomisp_dis_buf *dis_buf;
|
||||
unsigned long irqflags;
|
||||
|
@ -213,12 +211,12 @@ static int atomisp_q_one_dis_buffer(struct atomisp_sub_device *asd,
|
|||
int atomisp_q_video_buffers_to_css(struct atomisp_sub_device *asd,
|
||||
struct atomisp_video_pipe *pipe,
|
||||
enum atomisp_input_stream_id stream_id,
|
||||
enum atomisp_css_buffer_type css_buf_type,
|
||||
enum atomisp_css_pipe_id css_pipe_id)
|
||||
enum ia_css_buffer_type css_buf_type,
|
||||
enum ia_css_pipe_id css_pipe_id)
|
||||
{
|
||||
struct videobuf_vmalloc_memory *vm_mem;
|
||||
struct atomisp_css_params_with_list *param;
|
||||
struct atomisp_css_dvs_grid_info *dvs_grid =
|
||||
struct ia_css_dvs_grid_info *dvs_grid =
|
||||
atomisp_css_get_dvs_grid_info(&asd->params.curr_grid_info);
|
||||
unsigned long irqflags;
|
||||
int err = 0;
|
||||
|
@ -255,14 +253,13 @@ int atomisp_q_video_buffers_to_css(struct atomisp_sub_device *asd,
|
|||
err = atomisp_calculate_real_zoom_region(asd,
|
||||
¶m->params.dz_config, css_pipe_id);
|
||||
if (!err)
|
||||
atomisp_css_set_dz_config(asd,
|
||||
¶m->params.dz_config);
|
||||
asd->params.config.dz_config = ¶m->params.dz_config;
|
||||
}
|
||||
atomisp_css_set_isp_config_applied_frame(asd,
|
||||
vm_mem->vaddr);
|
||||
atomisp_css_update_isp_params_on_pipe(asd,
|
||||
asd->stream_env[stream_id].pipes[css_pipe_id]);
|
||||
asd->params.dvs_6axis = (struct atomisp_css_dvs_6axis *)
|
||||
asd->params.dvs_6axis = (struct ia_css_dvs_6axis_config *)
|
||||
param->params.dvs_6axis;
|
||||
|
||||
/*
|
||||
|
@ -302,19 +299,19 @@ int atomisp_q_video_buffers_to_css(struct atomisp_sub_device *asd,
|
|||
/* enqueue 3A/DIS/metadata buffers */
|
||||
if (asd->params.curr_grid_info.s3a_grid.enable &&
|
||||
css_pipe_id == asd->params.s3a_enabled_pipe &&
|
||||
css_buf_type == CSS_BUFFER_TYPE_OUTPUT_FRAME)
|
||||
css_buf_type == IA_CSS_BUFFER_TYPE_OUTPUT_FRAME)
|
||||
atomisp_q_one_s3a_buffer(asd, stream_id,
|
||||
css_pipe_id);
|
||||
|
||||
if (asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL].stream_info.
|
||||
metadata_info.size &&
|
||||
css_buf_type == CSS_BUFFER_TYPE_OUTPUT_FRAME)
|
||||
css_buf_type == IA_CSS_BUFFER_TYPE_OUTPUT_FRAME)
|
||||
atomisp_q_one_metadata_buffer(asd, stream_id,
|
||||
css_pipe_id);
|
||||
|
||||
if (dvs_grid && dvs_grid->enable &&
|
||||
css_pipe_id == CSS_PIPE_ID_VIDEO &&
|
||||
css_buf_type == CSS_BUFFER_TYPE_OUTPUT_FRAME)
|
||||
css_pipe_id == IA_CSS_PIPE_ID_VIDEO &&
|
||||
css_buf_type == IA_CSS_BUFFER_TYPE_OUTPUT_FRAME)
|
||||
atomisp_q_one_dis_buffer(asd, stream_id,
|
||||
css_pipe_id);
|
||||
}
|
||||
|
@ -323,7 +320,7 @@ int atomisp_q_video_buffers_to_css(struct atomisp_sub_device *asd,
|
|||
}
|
||||
|
||||
static int atomisp_get_css_buf_type(struct atomisp_sub_device *asd,
|
||||
enum atomisp_css_pipe_id pipe_id,
|
||||
enum ia_css_pipe_id pipe_id,
|
||||
uint16_t source_pad)
|
||||
{
|
||||
if (ATOMISP_USE_YUVPP(asd)) {
|
||||
|
@ -331,24 +328,24 @@ static int atomisp_get_css_buf_type(struct atomisp_sub_device *asd,
|
|||
if (asd->continuous_mode->val &&
|
||||
asd->run_mode->val == ATOMISP_RUN_MODE_PREVIEW) {
|
||||
if (source_pad == ATOMISP_SUBDEV_PAD_SOURCE_CAPTURE)
|
||||
return CSS_BUFFER_TYPE_OUTPUT_FRAME;
|
||||
return IA_CSS_BUFFER_TYPE_OUTPUT_FRAME;
|
||||
else if (source_pad == ATOMISP_SUBDEV_PAD_SOURCE_PREVIEW)
|
||||
return CSS_BUFFER_TYPE_SEC_OUTPUT_FRAME;
|
||||
return IA_CSS_BUFFER_TYPE_SEC_OUTPUT_FRAME;
|
||||
else
|
||||
return CSS_BUFFER_TYPE_VF_OUTPUT_FRAME;
|
||||
return IA_CSS_BUFFER_TYPE_VF_OUTPUT_FRAME;
|
||||
}
|
||||
|
||||
/*when run SDV case*/
|
||||
if (asd->continuous_mode->val &&
|
||||
asd->run_mode->val == ATOMISP_RUN_MODE_VIDEO) {
|
||||
if (source_pad == ATOMISP_SUBDEV_PAD_SOURCE_CAPTURE)
|
||||
return CSS_BUFFER_TYPE_OUTPUT_FRAME;
|
||||
return IA_CSS_BUFFER_TYPE_OUTPUT_FRAME;
|
||||
else if (source_pad == ATOMISP_SUBDEV_PAD_SOURCE_PREVIEW)
|
||||
return CSS_BUFFER_TYPE_SEC_VF_OUTPUT_FRAME;
|
||||
return IA_CSS_BUFFER_TYPE_SEC_VF_OUTPUT_FRAME;
|
||||
else if (source_pad == ATOMISP_SUBDEV_PAD_SOURCE_VIDEO)
|
||||
return CSS_BUFFER_TYPE_SEC_OUTPUT_FRAME;
|
||||
return IA_CSS_BUFFER_TYPE_SEC_OUTPUT_FRAME;
|
||||
else
|
||||
return CSS_BUFFER_TYPE_VF_OUTPUT_FRAME;
|
||||
return IA_CSS_BUFFER_TYPE_VF_OUTPUT_FRAME;
|
||||
}
|
||||
|
||||
/*other case: default setting*/
|
||||
|
@ -356,27 +353,27 @@ static int atomisp_get_css_buf_type(struct atomisp_sub_device *asd,
|
|||
source_pad == ATOMISP_SUBDEV_PAD_SOURCE_VIDEO ||
|
||||
(source_pad == ATOMISP_SUBDEV_PAD_SOURCE_PREVIEW &&
|
||||
asd->run_mode->val != ATOMISP_RUN_MODE_VIDEO))
|
||||
return CSS_BUFFER_TYPE_OUTPUT_FRAME;
|
||||
return IA_CSS_BUFFER_TYPE_OUTPUT_FRAME;
|
||||
else
|
||||
return CSS_BUFFER_TYPE_VF_OUTPUT_FRAME;
|
||||
return IA_CSS_BUFFER_TYPE_VF_OUTPUT_FRAME;
|
||||
}
|
||||
|
||||
if (pipe_id == CSS_PIPE_ID_COPY ||
|
||||
if (pipe_id == IA_CSS_PIPE_ID_COPY ||
|
||||
source_pad == ATOMISP_SUBDEV_PAD_SOURCE_CAPTURE ||
|
||||
source_pad == ATOMISP_SUBDEV_PAD_SOURCE_VIDEO ||
|
||||
(source_pad == ATOMISP_SUBDEV_PAD_SOURCE_PREVIEW &&
|
||||
asd->run_mode->val != ATOMISP_RUN_MODE_VIDEO))
|
||||
return CSS_BUFFER_TYPE_OUTPUT_FRAME;
|
||||
return IA_CSS_BUFFER_TYPE_OUTPUT_FRAME;
|
||||
else
|
||||
return CSS_BUFFER_TYPE_VF_OUTPUT_FRAME;
|
||||
return IA_CSS_BUFFER_TYPE_VF_OUTPUT_FRAME;
|
||||
}
|
||||
|
||||
static int atomisp_qbuffers_to_css_for_all_pipes(struct atomisp_sub_device *asd)
|
||||
{
|
||||
enum atomisp_css_buffer_type buf_type;
|
||||
enum atomisp_css_pipe_id css_capture_pipe_id = CSS_PIPE_ID_COPY;
|
||||
enum atomisp_css_pipe_id css_preview_pipe_id = CSS_PIPE_ID_COPY;
|
||||
enum atomisp_css_pipe_id css_video_pipe_id = CSS_PIPE_ID_COPY;
|
||||
enum ia_css_buffer_type buf_type;
|
||||
enum ia_css_pipe_id css_capture_pipe_id = IA_CSS_PIPE_ID_COPY;
|
||||
enum ia_css_pipe_id css_preview_pipe_id = IA_CSS_PIPE_ID_COPY;
|
||||
enum ia_css_pipe_id css_video_pipe_id = IA_CSS_PIPE_ID_COPY;
|
||||
enum atomisp_input_stream_id input_stream_id;
|
||||
struct atomisp_video_pipe *capture_pipe;
|
||||
struct atomisp_video_pipe *preview_pipe;
|
||||
|
@ -413,10 +410,10 @@ static int atomisp_qbuffers_to_css_for_all_pipes(struct atomisp_sub_device *asd)
|
|||
/* queue all available buffers to css */
|
||||
int atomisp_qbuffers_to_css(struct atomisp_sub_device *asd)
|
||||
{
|
||||
enum atomisp_css_buffer_type buf_type;
|
||||
enum atomisp_css_pipe_id css_capture_pipe_id = CSS_PIPE_ID_NUM;
|
||||
enum atomisp_css_pipe_id css_preview_pipe_id = CSS_PIPE_ID_NUM;
|
||||
enum atomisp_css_pipe_id css_video_pipe_id = CSS_PIPE_ID_NUM;
|
||||
enum ia_css_buffer_type buf_type;
|
||||
enum ia_css_pipe_id css_capture_pipe_id = IA_CSS_PIPE_ID_NUM;
|
||||
enum ia_css_pipe_id css_preview_pipe_id = IA_CSS_PIPE_ID_NUM;
|
||||
enum ia_css_pipe_id css_video_pipe_id = IA_CSS_PIPE_ID_NUM;
|
||||
enum atomisp_input_stream_id input_stream_id;
|
||||
struct atomisp_video_pipe *capture_pipe = NULL;
|
||||
struct atomisp_video_pipe *vf_pipe = NULL;
|
||||
|
@ -432,43 +429,43 @@ int atomisp_qbuffers_to_css(struct atomisp_sub_device *asd)
|
|||
|
||||
if (asd->vfpp->val == ATOMISP_VFPP_DISABLE_SCALER) {
|
||||
video_pipe = &asd->video_out_video_capture;
|
||||
css_video_pipe_id = CSS_PIPE_ID_VIDEO;
|
||||
css_video_pipe_id = IA_CSS_PIPE_ID_VIDEO;
|
||||
} else if (asd->vfpp->val == ATOMISP_VFPP_DISABLE_LOWLAT) {
|
||||
preview_pipe = &asd->video_out_capture;
|
||||
css_preview_pipe_id = CSS_PIPE_ID_CAPTURE;
|
||||
css_preview_pipe_id = IA_CSS_PIPE_ID_CAPTURE;
|
||||
} else if (asd->run_mode->val == ATOMISP_RUN_MODE_VIDEO) {
|
||||
if (asd->continuous_mode->val) {
|
||||
capture_pipe = &asd->video_out_capture;
|
||||
vf_pipe = &asd->video_out_vf;
|
||||
css_capture_pipe_id = CSS_PIPE_ID_CAPTURE;
|
||||
css_capture_pipe_id = IA_CSS_PIPE_ID_CAPTURE;
|
||||
}
|
||||
video_pipe = &asd->video_out_video_capture;
|
||||
preview_pipe = &asd->video_out_preview;
|
||||
css_video_pipe_id = CSS_PIPE_ID_VIDEO;
|
||||
css_preview_pipe_id = CSS_PIPE_ID_VIDEO;
|
||||
css_video_pipe_id = IA_CSS_PIPE_ID_VIDEO;
|
||||
css_preview_pipe_id = IA_CSS_PIPE_ID_VIDEO;
|
||||
} else if (asd->continuous_mode->val) {
|
||||
capture_pipe = &asd->video_out_capture;
|
||||
vf_pipe = &asd->video_out_vf;
|
||||
preview_pipe = &asd->video_out_preview;
|
||||
|
||||
css_preview_pipe_id = CSS_PIPE_ID_PREVIEW;
|
||||
css_capture_pipe_id = CSS_PIPE_ID_CAPTURE;
|
||||
css_preview_pipe_id = IA_CSS_PIPE_ID_PREVIEW;
|
||||
css_capture_pipe_id = IA_CSS_PIPE_ID_CAPTURE;
|
||||
} else if (asd->run_mode->val == ATOMISP_RUN_MODE_PREVIEW) {
|
||||
preview_pipe = &asd->video_out_preview;
|
||||
css_preview_pipe_id = CSS_PIPE_ID_PREVIEW;
|
||||
css_preview_pipe_id = IA_CSS_PIPE_ID_PREVIEW;
|
||||
} else {
|
||||
/* ATOMISP_RUN_MODE_STILL_CAPTURE */
|
||||
capture_pipe = &asd->video_out_capture;
|
||||
if (!raw_mode)
|
||||
vf_pipe = &asd->video_out_vf;
|
||||
css_capture_pipe_id = CSS_PIPE_ID_CAPTURE;
|
||||
css_capture_pipe_id = IA_CSS_PIPE_ID_CAPTURE;
|
||||
}
|
||||
|
||||
#ifdef ISP2401_NEW_INPUT_SYSTEM
|
||||
if (asd->copy_mode) {
|
||||
css_capture_pipe_id = CSS_PIPE_ID_COPY;
|
||||
css_preview_pipe_id = CSS_PIPE_ID_COPY;
|
||||
css_video_pipe_id = CSS_PIPE_ID_COPY;
|
||||
css_capture_pipe_id = IA_CSS_PIPE_ID_COPY;
|
||||
css_preview_pipe_id = IA_CSS_PIPE_ID_COPY;
|
||||
css_video_pipe_id = IA_CSS_PIPE_ID_COPY;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -476,9 +473,9 @@ int atomisp_qbuffers_to_css(struct atomisp_sub_device *asd)
|
|||
capture_pipe = &asd->video_out_capture;
|
||||
video_pipe = &asd->video_out_video_capture;
|
||||
preview_pipe = &asd->video_out_preview;
|
||||
css_capture_pipe_id = CSS_PIPE_ID_COPY;
|
||||
css_video_pipe_id = CSS_PIPE_ID_YUVPP;
|
||||
css_preview_pipe_id = CSS_PIPE_ID_YUVPP;
|
||||
css_capture_pipe_id = IA_CSS_PIPE_ID_COPY;
|
||||
css_video_pipe_id = IA_CSS_PIPE_ID_YUVPP;
|
||||
css_preview_pipe_id = IA_CSS_PIPE_ID_YUVPP;
|
||||
}
|
||||
|
||||
if (capture_pipe) {
|
||||
|
@ -491,7 +488,7 @@ int atomisp_qbuffers_to_css(struct atomisp_sub_device *asd)
|
|||
* use yuvpp pipe for SOC camera.
|
||||
*/
|
||||
if (ATOMISP_USE_YUVPP(asd))
|
||||
css_capture_pipe_id = CSS_PIPE_ID_YUVPP;
|
||||
css_capture_pipe_id = IA_CSS_PIPE_ID_YUVPP;
|
||||
|
||||
atomisp_q_video_buffers_to_css(asd, capture_pipe,
|
||||
input_stream_id,
|
||||
|
@ -511,7 +508,7 @@ int atomisp_qbuffers_to_css(struct atomisp_sub_device *asd)
|
|||
* use yuvpp pipe for SOC camera.
|
||||
*/
|
||||
if (ATOMISP_USE_YUVPP(asd))
|
||||
css_capture_pipe_id = CSS_PIPE_ID_YUVPP;
|
||||
css_capture_pipe_id = IA_CSS_PIPE_ID_YUVPP;
|
||||
atomisp_q_video_buffers_to_css(asd, vf_pipe,
|
||||
input_stream_id,
|
||||
buf_type, css_capture_pipe_id);
|
||||
|
@ -521,10 +518,10 @@ int atomisp_qbuffers_to_css(struct atomisp_sub_device *asd)
|
|||
buf_type = atomisp_get_css_buf_type(
|
||||
asd, css_preview_pipe_id,
|
||||
atomisp_subdev_source_pad(&preview_pipe->vdev));
|
||||
if (ATOMISP_SOC_CAMERA(asd) && css_preview_pipe_id == CSS_PIPE_ID_YUVPP)
|
||||
if (ATOMISP_SOC_CAMERA(asd) && css_preview_pipe_id == IA_CSS_PIPE_ID_YUVPP)
|
||||
input_stream_id = ATOMISP_INPUT_STREAM_GENERAL;
|
||||
/* else for ext isp use case */
|
||||
else if (css_preview_pipe_id == CSS_PIPE_ID_YUVPP)
|
||||
else if (css_preview_pipe_id == IA_CSS_PIPE_ID_YUVPP)
|
||||
input_stream_id = ATOMISP_INPUT_STREAM_VIDEO;
|
||||
else if (asd->stream_env[ATOMISP_INPUT_STREAM_PREVIEW].stream)
|
||||
input_stream_id = ATOMISP_INPUT_STREAM_PREVIEW;
|
||||
|
@ -535,7 +532,7 @@ int atomisp_qbuffers_to_css(struct atomisp_sub_device *asd)
|
|||
* use yuvpp pipe for SOC camera.
|
||||
*/
|
||||
if (ATOMISP_USE_YUVPP(asd))
|
||||
css_preview_pipe_id = CSS_PIPE_ID_YUVPP;
|
||||
css_preview_pipe_id = IA_CSS_PIPE_ID_YUVPP;
|
||||
|
||||
atomisp_q_video_buffers_to_css(asd, preview_pipe,
|
||||
input_stream_id,
|
||||
|
@ -555,7 +552,7 @@ int atomisp_qbuffers_to_css(struct atomisp_sub_device *asd)
|
|||
* use yuvpp pipe for SOC camera.
|
||||
*/
|
||||
if (ATOMISP_USE_YUVPP(asd))
|
||||
css_video_pipe_id = CSS_PIPE_ID_YUVPP;
|
||||
css_video_pipe_id = IA_CSS_PIPE_ID_YUVPP;
|
||||
|
||||
atomisp_q_video_buffers_to_css(asd, video_pipe,
|
||||
input_stream_id,
|
||||
|
@ -717,7 +714,7 @@ static void atomisp_subdev_init_struct(struct atomisp_sub_device *asd)
|
|||
asd->params.online_process = 1;
|
||||
asd->params.yuv_ds_en = 0;
|
||||
/* s3a grid not enabled for any pipe */
|
||||
asd->params.s3a_enabled_pipe = CSS_PIPE_ID_NUM;
|
||||
asd->params.s3a_enabled_pipe = IA_CSS_PIPE_ID_NUM;
|
||||
|
||||
asd->params.offline_parm.num_captures = 1;
|
||||
asd->params.offline_parm.skip_frames = 0;
|
||||
|
@ -1000,7 +997,7 @@ static int atomisp_release(struct file *file)
|
|||
atomisp_css_uninit(isp);
|
||||
|
||||
if (defer_fw_load) {
|
||||
atomisp_css_unload_firmware(isp);
|
||||
ia_css_unload_firmware();
|
||||
isp->css_env.isp_css_fw.data = NULL;
|
||||
isp->css_env.isp_css_fw.bytes = 0;
|
||||
}
|
||||
|
@ -1054,7 +1051,7 @@ static int do_isp_mm_remap(struct atomisp_device *isp,
|
|||
}
|
||||
|
||||
static int frame_mmap(struct atomisp_device *isp,
|
||||
const struct atomisp_css_frame *frame, struct vm_area_struct *vma)
|
||||
const struct ia_css_frame *frame, struct vm_area_struct *vma)
|
||||
{
|
||||
ia_css_ptr isp_virt;
|
||||
u32 host_virt;
|
||||
|
@ -1127,7 +1124,7 @@ int atomisp_videobuf_mmap_mapper(struct videobuf_queue *q,
|
|||
* There is also padding on the right (padded_width - width).
|
||||
*/
|
||||
static int remove_pad_from_frame(struct atomisp_device *isp,
|
||||
struct atomisp_css_frame *in_frame, __u32 width, __u32 height)
|
||||
struct ia_css_frame *in_frame, __u32 width, __u32 height)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned short *buffer;
|
||||
|
@ -1164,7 +1161,7 @@ static int atomisp_mmap(struct file *file, struct vm_area_struct *vma)
|
|||
struct atomisp_device *isp = video_get_drvdata(vdev);
|
||||
struct atomisp_video_pipe *pipe = atomisp_to_video_pipe(vdev);
|
||||
struct atomisp_sub_device *asd = pipe->asd;
|
||||
struct atomisp_css_frame *raw_virt_addr;
|
||||
struct ia_css_frame *raw_virt_addr;
|
||||
u32 start = vma->vm_start;
|
||||
u32 end = vma->vm_end;
|
||||
u32 size = end - start;
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -24,8 +25,8 @@
|
|||
int atomisp_q_video_buffers_to_css(struct atomisp_sub_device *asd,
|
||||
struct atomisp_video_pipe *pipe,
|
||||
enum atomisp_input_stream_id stream_id,
|
||||
enum atomisp_css_buffer_type css_buf_type,
|
||||
enum atomisp_css_pipe_id css_pipe_id);
|
||||
enum ia_css_buffer_type css_buf_type,
|
||||
enum ia_css_pipe_id css_pipe_id);
|
||||
|
||||
unsigned int atomisp_dev_users(struct atomisp_device *isp);
|
||||
unsigned int atomisp_sub_dev_users(struct atomisp_sub_device *asd);
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <linux/module.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/dmi.h>
|
||||
|
@ -327,15 +328,6 @@ static struct gmin_cfg_var i8880_vars[] = {
|
|||
{},
|
||||
};
|
||||
|
||||
static struct gmin_cfg_var asus_vars[] = {
|
||||
{"OVTI2680:00_CsiPort", "1"},
|
||||
{"OVTI2680:00_CsiLanes", "1"},
|
||||
{"OVTI2680:00_CsiFmt", "15"},
|
||||
{"OVTI2680:00_CsiBayer", "0"},
|
||||
{"OVTI2680:00_CamClk", "1"},
|
||||
{},
|
||||
};
|
||||
|
||||
static const struct dmi_system_id gmin_vars[] = {
|
||||
{
|
||||
.ident = "BYT-T FFD8",
|
||||
|
@ -373,13 +365,6 @@ static const struct dmi_system_id gmin_vars[] = {
|
|||
},
|
||||
.driver_data = i8880_vars,
|
||||
},
|
||||
{
|
||||
.ident = "T101HA",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "T101HA"),
|
||||
},
|
||||
.driver_data = asus_vars,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
@ -387,6 +372,10 @@ static const struct dmi_system_id gmin_vars[] = {
|
|||
0xa9, 0x71, 0xe8, 0x77, \
|
||||
0x75, 0x60, 0x68, 0xf7)
|
||||
|
||||
static const guid_t atomisp_dsm_guid = GUID_INIT(0xdc2f6c4f, 0x045b, 0x4f1d,
|
||||
0x97, 0xb9, 0x88, 0x2a,
|
||||
0x68, 0x60, 0xa4, 0xbe);
|
||||
|
||||
#define CFG_VAR_NAME_MAX 64
|
||||
|
||||
#define GMIN_PMC_CLK_NAME 14 /* "pmc_plt_clk_[0..5]" */
|
||||
|
@ -454,15 +443,28 @@ static int gmin_i2c_write(struct device *dev, u16 i2c_addr, u8 reg,
|
|||
|
||||
static struct gmin_subdev *gmin_subdev_add(struct v4l2_subdev *subdev)
|
||||
{
|
||||
int i, ret;
|
||||
struct device *dev;
|
||||
struct i2c_client *power = NULL, *client = v4l2_get_subdevdata(subdev);
|
||||
struct acpi_device *adev;
|
||||
acpi_handle handle;
|
||||
struct device *dev;
|
||||
int i, ret;
|
||||
|
||||
if (!client)
|
||||
return NULL;
|
||||
|
||||
dev = &client->dev;
|
||||
|
||||
handle = ACPI_HANDLE(dev);
|
||||
|
||||
// FIXME: may need to release resources allocated by acpi_bus_get_device()
|
||||
if (!handle || acpi_bus_get_device(handle, &adev)) {
|
||||
dev_err(dev, "Error could not get ACPI device\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
dev_info(&client->dev, "%s: ACPI detected it on bus ID=%s, HID=%s\n",
|
||||
__func__, acpi_device_bid(adev), acpi_device_hid(adev));
|
||||
|
||||
if (!pmic_id) {
|
||||
if (gmin_i2c_dev_exists(dev, PMIC_ACPI_TI, &power))
|
||||
pmic_id = PMIC_TI;
|
||||
|
@ -479,7 +481,6 @@ static struct gmin_subdev *gmin_subdev_add(struct v4l2_subdev *subdev)
|
|||
if (i >= MAX_SUBDEVS)
|
||||
return NULL;
|
||||
|
||||
|
||||
if (power) {
|
||||
gmin_subdevs[i].pwm_i2c_addr = power->addr;
|
||||
dev_info(dev,
|
||||
|
@ -616,6 +617,7 @@ static int axp_regulator_set(struct device *dev, struct gmin_subdev *gs,
|
|||
static int axp_v1p8_on(struct device *dev, struct gmin_subdev *gs)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = axp_regulator_set(dev, gs, gs->eldo2_sel_reg, gs->eldo2_1p8v,
|
||||
ELDO_CTRL_REG, gs->eldo2_ctrl_shift, true);
|
||||
if (ret)
|
||||
|
@ -640,6 +642,7 @@ static int axp_v1p8_on(struct device *dev, struct gmin_subdev *gs)
|
|||
static int axp_v1p8_off(struct device *dev, struct gmin_subdev *gs)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = axp_regulator_set(dev, gs, gs->eldo1_sel_reg, gs->eldo1_1p8v,
|
||||
ELDO_CTRL_REG, gs->eldo1_ctrl_shift, false);
|
||||
if (ret)
|
||||
|
@ -650,7 +653,6 @@ static int axp_v1p8_off(struct device *dev, struct gmin_subdev *gs)
|
|||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static int gmin_gpio0_ctrl(struct v4l2_subdev *subdev, int on)
|
||||
{
|
||||
struct gmin_subdev *gs = find_gmin_subdev(subdev);
|
||||
|
@ -753,7 +755,6 @@ static int gmin_v1p8_ctrl(struct v4l2_subdev *subdev, int on)
|
|||
dev_err(subdev->dev, "Couldn't set power mode for v1p2\n");
|
||||
}
|
||||
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -921,7 +922,8 @@ int atomisp_gmin_register_vcm_control(struct camera_vcm_control *vcmCtrl)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(atomisp_gmin_register_vcm_control);
|
||||
|
||||
static int gmin_get_hardcoded_var(struct gmin_cfg_var *varlist,
|
||||
static int gmin_get_hardcoded_var(struct device *dev,
|
||||
struct gmin_cfg_var *varlist,
|
||||
const char *var8, char *out, size_t *out_len)
|
||||
{
|
||||
struct gmin_cfg_var *gv;
|
||||
|
@ -932,11 +934,13 @@ static int gmin_get_hardcoded_var(struct gmin_cfg_var *varlist,
|
|||
if (strcmp(var8, gv->name))
|
||||
continue;
|
||||
|
||||
dev_info(dev, "Found DMI entry for '%s'\n", var8);
|
||||
|
||||
vl = strlen(gv->val);
|
||||
if (vl > *out_len - 1)
|
||||
return -ENOSPC;
|
||||
|
||||
strcpy(out, gv->val);
|
||||
strscpy(out, gv->val, *out_len);
|
||||
*out_len = vl;
|
||||
return 0;
|
||||
}
|
||||
|
@ -944,6 +948,75 @@ static int gmin_get_hardcoded_var(struct gmin_cfg_var *varlist,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
static int gmin_get_config_dsm_var(struct device *dev,
|
||||
const char *var,
|
||||
char *out, size_t *out_len)
|
||||
{
|
||||
acpi_handle handle = ACPI_HANDLE(dev);
|
||||
union acpi_object *obj, *cur = NULL;
|
||||
int i;
|
||||
|
||||
obj = acpi_evaluate_dsm(handle, &atomisp_dsm_guid, 0, 0, NULL);
|
||||
if (!obj) {
|
||||
dev_info_once(dev, "Didn't find ACPI _DSM table.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
#if 0 /* Just for debugging purposes */
|
||||
for (i = 0; i < obj->package.count; i++) {
|
||||
union acpi_object *cur = &obj->package.elements[i];
|
||||
|
||||
if (cur->type == ACPI_TYPE_INTEGER)
|
||||
dev_info(dev, "object #%d, type %d, value: %lld\n",
|
||||
i, cur->type, cur->integer.value);
|
||||
else if (cur->type == ACPI_TYPE_STRING)
|
||||
dev_info(dev, "object #%d, type %d, string: %s\n",
|
||||
i, cur->type, cur->string.pointer);
|
||||
else
|
||||
dev_info(dev, "object #%d, type %d\n",
|
||||
i, cur->type);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Seek for the desired var */
|
||||
for (i = 0; i < obj->package.count - 1; i += 2) {
|
||||
if (obj->package.elements[i].type == ACPI_TYPE_STRING &&
|
||||
!strcmp(obj->package.elements[i].string.pointer, var)) {
|
||||
/* Next element should be the required value */
|
||||
cur = &obj->package.elements[i + 1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!cur) {
|
||||
dev_info(dev, "didn't found _DSM entry for '%s'\n", var);
|
||||
ACPI_FREE(obj);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* While it could be possible to have an ACPI_TYPE_INTEGER,
|
||||
* and read the value from cur->integer.value, the table
|
||||
* seen so far uses the string type. So, produce a warning
|
||||
* if it founds something different than string, letting it
|
||||
* to fall back to the old code.
|
||||
*/
|
||||
if (cur && cur->type != ACPI_TYPE_STRING) {
|
||||
dev_info(dev, "found non-string _DSM entry for '%s'\n", var);
|
||||
ACPI_FREE(obj);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
dev_info(dev, "found _DSM entry for '%s': %s\n", var,
|
||||
cur->string.pointer);
|
||||
strscpy(out, cur->string.pointer, *out_len);
|
||||
*out_len = strlen(cur->string.pointer);
|
||||
|
||||
ACPI_FREE(obj);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Retrieves a device-specific configuration variable. The dev
|
||||
* argument should be a device with an ACPI companion, as all
|
||||
* configuration is based on firmware ID.
|
||||
|
@ -953,12 +1026,21 @@ static int gmin_get_config_var(struct device *maindev,
|
|||
const char *var,
|
||||
char *out, size_t *out_len)
|
||||
{
|
||||
char var8[CFG_VAR_NAME_MAX];
|
||||
efi_char16_t var16[CFG_VAR_NAME_MAX];
|
||||
struct efivar_entry *ev;
|
||||
const struct dmi_system_id *id;
|
||||
int i, ret;
|
||||
struct device *dev = maindev;
|
||||
char var8[CFG_VAR_NAME_MAX];
|
||||
struct efivar_entry *ev;
|
||||
int i, ret;
|
||||
|
||||
/* For sensors, try first to use the _DSM table */
|
||||
if (!is_gmin) {
|
||||
ret = gmin_get_config_dsm_var(maindev, var, out, out_len);
|
||||
if (!ret)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Fall-back to other approaches */
|
||||
|
||||
if (!is_gmin && ACPI_COMPANION(dev))
|
||||
dev = &ACPI_COMPANION(dev)->dev;
|
||||
|
@ -977,9 +1059,10 @@ static int gmin_get_config_var(struct device *maindev,
|
|||
*/
|
||||
id = dmi_first_match(gmin_vars);
|
||||
if (id) {
|
||||
dev_info(maindev, "Found DMI entry for '%s'\n", var8);
|
||||
return gmin_get_hardcoded_var(id->driver_data, var8, out,
|
||||
out_len);
|
||||
ret = gmin_get_hardcoded_var(maindev, id->driver_data, var8,
|
||||
out, out_len);
|
||||
if (!ret)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Our variable names are ASCII by construction, but EFI names
|
||||
|
@ -1009,9 +1092,9 @@ static int gmin_get_config_var(struct device *maindev,
|
|||
*out_len = ev->var.DataSize;
|
||||
dev_info(maindev, "found EFI entry for '%s'\n", var8);
|
||||
} else if (is_gmin) {
|
||||
dev_warn(maindev, "Failed to find gmin variable %s\n", var8);
|
||||
dev_info(maindev, "Failed to find EFI gmin variable %s\n", var8);
|
||||
} else {
|
||||
dev_warn(maindev, "Failed to find variable %s\n", var8);
|
||||
dev_info(maindev, "Failed to find EFI variable %s\n", var8);
|
||||
}
|
||||
|
||||
kfree(ev);
|
||||
|
@ -1030,6 +1113,8 @@ int gmin_get_var_int(struct device *dev, bool is_gmin, const char *var, int def)
|
|||
if (!ret) {
|
||||
val[len] = 0;
|
||||
ret = kstrtol(val, 0, &result);
|
||||
} else {
|
||||
dev_info(dev, "%s: using default (%d)\n", var, def);
|
||||
}
|
||||
|
||||
return ret ? def : result;
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
* Copyright (c) 2010 Intel Corporation. All Rights Reserved.
|
||||
*
|
||||
* Copyright (c) 2010 Silicon Hive www.siliconhive.com.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License version
|
||||
* 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*
|
||||
*/
|
||||
#ifndef _atomisp_helper_h_
|
||||
#define _atomisp_helper_h_
|
||||
extern void __iomem *atomisp_io_base;
|
||||
|
||||
static inline void __iomem *atomisp_get_io_virt_addr(unsigned int address)
|
||||
{
|
||||
void __iomem *ret = atomisp_io_base + (address & 0x003FFFFF);
|
||||
return ret;
|
||||
}
|
||||
#endif
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -39,8 +40,6 @@
|
|||
#include "device_access.h"
|
||||
#include "irq.h"
|
||||
|
||||
#include "hrt/hive_isp_css_mm_hrt.h"
|
||||
|
||||
static const char *DRIVER = "atomisp"; /* max size 15 */
|
||||
static const char *CARD = "ATOM ISP"; /* max size 31 */
|
||||
|
||||
|
@ -341,163 +340,163 @@ const struct atomisp_format_bridge atomisp_output_fmts[] = {
|
|||
.pixelformat = V4L2_PIX_FMT_YUV420,
|
||||
.depth = 12,
|
||||
.mbus_code = V4L2_MBUS_FMT_CUSTOM_YUV420,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_YUV420,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_YUV420,
|
||||
.description = "YUV420, planar",
|
||||
.planar = true
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_YVU420,
|
||||
.depth = 12,
|
||||
.mbus_code = V4L2_MBUS_FMT_CUSTOM_YVU420,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_YV12,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_YV12,
|
||||
.description = "YVU420, planar",
|
||||
.planar = true
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_YUV422P,
|
||||
.depth = 16,
|
||||
.mbus_code = V4L2_MBUS_FMT_CUSTOM_YUV422P,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_YUV422,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_YUV422,
|
||||
.description = "YUV422, planar",
|
||||
.planar = true
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_YUV444,
|
||||
.depth = 24,
|
||||
.mbus_code = V4L2_MBUS_FMT_CUSTOM_YUV444,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_YUV444,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_YUV444,
|
||||
.description = "YUV444"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_NV12,
|
||||
.depth = 12,
|
||||
.mbus_code = V4L2_MBUS_FMT_CUSTOM_NV12,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_NV12,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_NV12,
|
||||
.description = "NV12, Y-plane, CbCr interleaved",
|
||||
.planar = true
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_NV21,
|
||||
.depth = 12,
|
||||
.mbus_code = V4L2_MBUS_FMT_CUSTOM_NV21,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_NV21,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_NV21,
|
||||
.description = "NV21, Y-plane, CbCr interleaved",
|
||||
.planar = true
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_NV16,
|
||||
.depth = 16,
|
||||
.mbus_code = V4L2_MBUS_FMT_CUSTOM_NV16,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_NV16,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_NV16,
|
||||
.description = "NV16, Y-plane, CbCr interleaved",
|
||||
.planar = true
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_YUYV,
|
||||
.depth = 16,
|
||||
.mbus_code = V4L2_MBUS_FMT_CUSTOM_YUYV,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_YUYV,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_YUYV,
|
||||
.description = "YUYV, interleaved"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_UYVY,
|
||||
.depth = 16,
|
||||
.mbus_code = MEDIA_BUS_FMT_UYVY8_1X16,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_UYVY,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_UYVY,
|
||||
.description = "UYVY, interleaved"
|
||||
}, { /* This one is for parallel sensors! DO NOT USE! */
|
||||
.pixelformat = V4L2_PIX_FMT_UYVY,
|
||||
.depth = 16,
|
||||
.mbus_code = MEDIA_BUS_FMT_UYVY8_2X8,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_UYVY,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_UYVY,
|
||||
.description = "UYVY, interleaved"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_SBGGR16,
|
||||
.depth = 16,
|
||||
.mbus_code = V4L2_MBUS_FMT_CUSTOM_SBGGR16,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RAW,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RAW,
|
||||
.description = "Bayer 16"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_SBGGR8,
|
||||
.depth = 8,
|
||||
.mbus_code = MEDIA_BUS_FMT_SBGGR8_1X8,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RAW,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RAW,
|
||||
.description = "Bayer 8"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_SGBRG8,
|
||||
.depth = 8,
|
||||
.mbus_code = MEDIA_BUS_FMT_SGBRG8_1X8,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RAW,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RAW,
|
||||
.description = "Bayer 8"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_SGRBG8,
|
||||
.depth = 8,
|
||||
.mbus_code = MEDIA_BUS_FMT_SGRBG8_1X8,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RAW,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RAW,
|
||||
.description = "Bayer 8"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_SRGGB8,
|
||||
.depth = 8,
|
||||
.mbus_code = MEDIA_BUS_FMT_SRGGB8_1X8,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RAW,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RAW,
|
||||
.description = "Bayer 8"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_SBGGR10,
|
||||
.depth = 16,
|
||||
.mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RAW,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RAW,
|
||||
.description = "Bayer 10"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_SGBRG10,
|
||||
.depth = 16,
|
||||
.mbus_code = MEDIA_BUS_FMT_SGBRG10_1X10,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RAW,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RAW,
|
||||
.description = "Bayer 10"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_SGRBG10,
|
||||
.depth = 16,
|
||||
.mbus_code = MEDIA_BUS_FMT_SGRBG10_1X10,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RAW,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RAW,
|
||||
.description = "Bayer 10"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_SRGGB10,
|
||||
.depth = 16,
|
||||
.mbus_code = MEDIA_BUS_FMT_SRGGB10_1X10,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RAW,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RAW,
|
||||
.description = "Bayer 10"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_SBGGR12,
|
||||
.depth = 16,
|
||||
.mbus_code = MEDIA_BUS_FMT_SBGGR12_1X12,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RAW,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RAW,
|
||||
.description = "Bayer 12"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_SGBRG12,
|
||||
.depth = 16,
|
||||
.mbus_code = MEDIA_BUS_FMT_SGBRG12_1X12,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RAW,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RAW,
|
||||
.description = "Bayer 12"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_SGRBG12,
|
||||
.depth = 16,
|
||||
.mbus_code = MEDIA_BUS_FMT_SGRBG12_1X12,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RAW,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RAW,
|
||||
.description = "Bayer 12"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_SRGGB12,
|
||||
.depth = 16,
|
||||
.mbus_code = MEDIA_BUS_FMT_SRGGB12_1X12,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RAW,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RAW,
|
||||
.description = "Bayer 12"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_RGB32,
|
||||
.depth = 32,
|
||||
.mbus_code = V4L2_MBUS_FMT_CUSTOM_RGB32,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RGBA888,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RGBA888,
|
||||
.description = "32 RGB 8-8-8-8"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_RGB565,
|
||||
.depth = 16,
|
||||
.mbus_code = MEDIA_BUS_FMT_BGR565_2X8_LE,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_RGB565,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_RGB565,
|
||||
.description = "16 RGB 5-6-5"
|
||||
}, {
|
||||
.pixelformat = V4L2_PIX_FMT_JPEG,
|
||||
.depth = 8,
|
||||
.mbus_code = MEDIA_BUS_FMT_JPEG_1X8,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_BINARY_8,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_BINARY_8,
|
||||
.description = "JPEG"
|
||||
},
|
||||
#if 0
|
||||
|
@ -506,7 +505,7 @@ const struct atomisp_format_bridge atomisp_output_fmts[] = {
|
|||
.pixelformat = V4L2_PIX_FMT_CUSTOM_M10MO_RAW,
|
||||
.depth = 8,
|
||||
.mbus_code = V4L2_MBUS_FMT_CUSTOM_M10MO_RAW,
|
||||
.sh_fmt = CSS_FRAME_FORMAT_BINARY_8,
|
||||
.sh_fmt = IA_CSS_FRAME_FORMAT_BINARY_8,
|
||||
.description = "Custom RAW for M10MO"
|
||||
},
|
||||
#endif
|
||||
|
@ -548,8 +547,8 @@ static int atomisp_querycap(struct file *file, void *fh,
|
|||
struct video_device *vdev = video_devdata(file);
|
||||
struct atomisp_device *isp = video_get_drvdata(vdev);
|
||||
|
||||
strscpy(cap->driver, DRIVER, sizeof(cap->driver) - 1);
|
||||
strscpy(cap->card, CARD, sizeof(cap->card) - 1);
|
||||
strscpy(cap->driver, DRIVER, sizeof(cap->driver));
|
||||
strscpy(cap->card, CARD, sizeof(cap->card));
|
||||
snprintf(cap->bus_info, sizeof(cap->bus_info), "PCI:%s",
|
||||
pci_name(isp->pdev));
|
||||
|
||||
|
@ -574,8 +573,8 @@ static int atomisp_enum_input(struct file *file, void *fh,
|
|||
return -EINVAL;
|
||||
|
||||
memset(input, 0, sizeof(struct v4l2_input));
|
||||
strncpy(input->name, isp->inputs[index].camera->name,
|
||||
sizeof(input->name) - 1);
|
||||
strscpy(input->name, isp->inputs[index].camera->name,
|
||||
sizeof(input->name));
|
||||
|
||||
/*
|
||||
* HACK: append actuator's name to sensor's
|
||||
|
@ -583,7 +582,7 @@ static int atomisp_enum_input(struct file *file, void *fh,
|
|||
* ioctl is the only way to enum inputs + possible external actuators
|
||||
* for 3A tuning purpose.
|
||||
*/
|
||||
if (!atomisp_hw_is_isp2401)
|
||||
if (!IS_ISP2401)
|
||||
motor = isp->inputs[index].motor;
|
||||
else
|
||||
motor = isp->motor;
|
||||
|
@ -594,8 +593,8 @@ static int atomisp_enum_input(struct file *file, void *fh,
|
|||
|
||||
if (max_size > 1) {
|
||||
input->name[cur_len] = '+';
|
||||
strncpy(&input->name[cur_len + 1],
|
||||
motor->name, max_size - 1);
|
||||
strscpy(&input->name[cur_len + 1],
|
||||
motor->name, max_size);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -733,7 +732,7 @@ static int atomisp_s_input(struct file *file, void *fh, unsigned int input)
|
|||
goto error;
|
||||
}
|
||||
|
||||
if (!atomisp_hw_is_isp2401) {
|
||||
if (!IS_ISP2401) {
|
||||
motor = isp->inputs[input].motor;
|
||||
} else {
|
||||
motor = isp->motor;
|
||||
|
@ -789,7 +788,7 @@ static int atomisp_enum_fmt_cap(struct file *file, void *fh,
|
|||
* Is the atomisp-supported format is valid for the
|
||||
* sensor (configuration)? If not, skip it.
|
||||
*/
|
||||
if (format->sh_fmt == CSS_FRAME_FORMAT_RAW
|
||||
if (format->sh_fmt == IA_CSS_FRAME_FORMAT_RAW
|
||||
&& format->mbus_code != code.code)
|
||||
continue;
|
||||
|
||||
|
@ -893,7 +892,7 @@ void atomisp_videobuf_free_buf(struct videobuf_buffer *vb)
|
|||
|
||||
vm_mem = vb->priv;
|
||||
if (vm_mem && vm_mem->vaddr) {
|
||||
atomisp_css_frame_free(vm_mem->vaddr);
|
||||
ia_css_frame_free(vm_mem->vaddr);
|
||||
vm_mem->vaddr = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -920,7 +919,7 @@ int atomisp_alloc_css_stat_bufs(struct atomisp_sub_device *asd,
|
|||
struct atomisp_dis_buf *dis_buf = NULL, *_dis_buf;
|
||||
struct atomisp_metadata_buf *md_buf = NULL, *_md_buf;
|
||||
int count;
|
||||
struct atomisp_css_dvs_grid_info *dvs_grid_info =
|
||||
struct ia_css_dvs_grid_info *dvs_grid_info =
|
||||
atomisp_css_get_dvs_grid_info(&asd->params.curr_grid_info);
|
||||
unsigned int i;
|
||||
|
||||
|
@ -1024,8 +1023,8 @@ int __atomisp_reqbufs(struct file *file, void *fh,
|
|||
struct video_device *vdev = video_devdata(file);
|
||||
struct atomisp_video_pipe *pipe = atomisp_to_video_pipe(vdev);
|
||||
struct atomisp_sub_device *asd = pipe->asd;
|
||||
struct atomisp_css_frame_info frame_info;
|
||||
struct atomisp_css_frame *frame;
|
||||
struct ia_css_frame_info frame_info;
|
||||
struct ia_css_frame *frame;
|
||||
struct videobuf_vmalloc_memory *vm_mem;
|
||||
u16 source_pad = atomisp_subdev_source_pad(vdev);
|
||||
u16 stream_id = atomisp_source_pad_to_stream_id(asd, source_pad);
|
||||
|
@ -1054,7 +1053,7 @@ int __atomisp_reqbufs(struct file *file, void *fh,
|
|||
atomisp_alloc_css_stat_bufs(asd, stream_id);
|
||||
|
||||
/*
|
||||
* for user pointer type, buffers are not really allcated here,
|
||||
* for user pointer type, buffers are not really allocated here,
|
||||
* buffers are setup in QBUF operation through v4l2_buffer structure
|
||||
*/
|
||||
if (req->memory == V4L2_MEMORY_USERPTR)
|
||||
|
@ -1069,7 +1068,7 @@ int __atomisp_reqbufs(struct file *file, void *fh,
|
|||
* memory management function
|
||||
*/
|
||||
for (i = 0; i < req->count; i++) {
|
||||
if (atomisp_css_frame_allocate_from_info(&frame, &frame_info))
|
||||
if (ia_css_frame_allocate_from_info(&frame, &frame_info))
|
||||
goto error;
|
||||
vm_mem = pipe->capq.bufs[i]->priv;
|
||||
vm_mem->vaddr = frame;
|
||||
|
@ -1080,11 +1079,11 @@ int __atomisp_reqbufs(struct file *file, void *fh,
|
|||
error:
|
||||
while (i--) {
|
||||
vm_mem = pipe->capq.bufs[i]->priv;
|
||||
atomisp_css_frame_free(vm_mem->vaddr);
|
||||
ia_css_frame_free(vm_mem->vaddr);
|
||||
}
|
||||
|
||||
if (asd->vf_frame)
|
||||
atomisp_css_frame_free(asd->vf_frame);
|
||||
ia_css_frame_free(asd->vf_frame);
|
||||
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
@ -1152,8 +1151,8 @@ static int atomisp_qbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
|
|||
struct atomisp_sub_device *asd = pipe->asd;
|
||||
struct videobuf_buffer *vb;
|
||||
struct videobuf_vmalloc_memory *vm_mem;
|
||||
struct atomisp_css_frame_info frame_info;
|
||||
struct atomisp_css_frame *handle = NULL;
|
||||
struct ia_css_frame_info frame_info;
|
||||
struct ia_css_frame *handle = NULL;
|
||||
u32 length;
|
||||
u32 pgnr;
|
||||
int ret = 0;
|
||||
|
@ -1183,8 +1182,6 @@ static int atomisp_qbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
|
|||
* address and reprograme out page table properly
|
||||
*/
|
||||
if (buf->memory == V4L2_MEMORY_USERPTR) {
|
||||
struct hrt_userbuffer_attr attributes;
|
||||
|
||||
vb = pipe->capq.bufs[buf->index];
|
||||
vm_mem = vb->priv;
|
||||
if (!vm_mem) {
|
||||
|
@ -1204,45 +1201,9 @@ static int atomisp_qbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
|
|||
goto error;
|
||||
}
|
||||
|
||||
attributes.pgnr = pgnr;
|
||||
attributes.type = HRT_USR_PTR;
|
||||
#ifdef CONFIG_ION
|
||||
if (!atomisp_hw_is_isp2401) {
|
||||
if (buf->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_ION)
|
||||
attributes.type = HRT_USR_ION;
|
||||
} else {
|
||||
if (buf->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_ION) {
|
||||
attributes.type = HRT_USR_ION;
|
||||
if (asd->ion_dev_fd->val != ION_FD_UNSET) {
|
||||
dev_dbg(isp->dev, "ION buffer queued, share_fd=%lddev_fd=%d.\n",
|
||||
buf->m.userptr, asd->ion_dev_fd->val);
|
||||
/*
|
||||
* Make sure the shared fd we just got
|
||||
* from user space isn't larger than
|
||||
* the space we have for it.
|
||||
*/
|
||||
if ((buf->m.userptr &
|
||||
(ATOMISP_ION_DEVICE_FD_MASK)) != 0) {
|
||||
dev_err(isp->dev,
|
||||
"Error: v4l2 buffer fd:0X%0lX > 0XFFFF.\n",
|
||||
buf->m.userptr);
|
||||
ret = -EINVAL;
|
||||
goto error;
|
||||
}
|
||||
buf->m.userptr |= asd->ion_dev_fd->val <<
|
||||
ATOMISP_ION_DEVICE_FD_OFFSET;
|
||||
} else {
|
||||
dev_err(isp->dev, "v4l2 buffer type is ION, \
|
||||
but no dev fd set from userspace.\n");
|
||||
ret = -EINVAL;
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
ret = atomisp_css_frame_map(&handle, &frame_info,
|
||||
ret = ia_css_frame_map(&handle, &frame_info,
|
||||
(void __user *)buf->m.userptr,
|
||||
0, &attributes);
|
||||
0, pgnr);
|
||||
if (ret) {
|
||||
dev_err(isp->dev, "Failed to map user buffer\n");
|
||||
goto error;
|
||||
|
@ -1250,7 +1211,7 @@ static int atomisp_qbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
|
|||
|
||||
if (vm_mem->vaddr) {
|
||||
mutex_lock(&pipe->capq.vb_lock);
|
||||
atomisp_css_frame_free(vm_mem->vaddr);
|
||||
ia_css_frame_free(vm_mem->vaddr);
|
||||
vm_mem->vaddr = NULL;
|
||||
vb->state = VIDEOBUF_NEEDS_INIT;
|
||||
mutex_unlock(&pipe->capq.vb_lock);
|
||||
|
@ -1265,6 +1226,10 @@ static int atomisp_qbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
|
|||
buf->flags |= V4L2_BUF_FLAG_MAPPED;
|
||||
buf->flags |= V4L2_BUF_FLAG_QUEUED;
|
||||
buf->flags &= ~V4L2_BUF_FLAG_DONE;
|
||||
|
||||
/*
|
||||
* For mmap, frames were allocated at request buffers
|
||||
*/
|
||||
}
|
||||
|
||||
done:
|
||||
|
@ -1299,7 +1264,7 @@ static int atomisp_qbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
|
|||
} else {
|
||||
atomisp_qbuffers_to_css(asd);
|
||||
|
||||
if (!atomisp_hw_is_isp2401) {
|
||||
if (!IS_ISP2401) {
|
||||
if (!atomisp_is_wdt_running(asd) && atomisp_buffers_queued(asd))
|
||||
atomisp_wdt_start(asd);
|
||||
} else {
|
||||
|
@ -1323,7 +1288,7 @@ static int atomisp_qbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
|
|||
pipe->capq.streaming &&
|
||||
!asd->enable_raw_buffer_lock->val &&
|
||||
asd->params.offline_parm.num_captures == 1) {
|
||||
if (!atomisp_hw_is_isp2401) {
|
||||
if (!IS_ISP2401) {
|
||||
asd->pending_capture_request++;
|
||||
dev_dbg(isp->dev, "Add one pending capture request.\n");
|
||||
} else {
|
||||
|
@ -1401,7 +1366,7 @@ static int __get_frame_exp_id(struct atomisp_video_pipe *pipe,
|
|||
struct v4l2_buffer *buf)
|
||||
{
|
||||
struct videobuf_vmalloc_memory *vm_mem;
|
||||
struct atomisp_css_frame *handle;
|
||||
struct ia_css_frame *handle;
|
||||
int i;
|
||||
|
||||
for (i = 0; pipe->capq.bufs[i]; i++) {
|
||||
|
@ -1443,7 +1408,8 @@ static int atomisp_dqbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
|
|||
|
||||
ret = videobuf_dqbuf(&pipe->capq, buf, file->f_flags & O_NONBLOCK);
|
||||
if (ret) {
|
||||
dev_dbg(isp->dev, "<%s: %d\n", __func__, ret);
|
||||
if (ret != -EAGAIN)
|
||||
dev_dbg(isp->dev, "<%s: %d\n", __func__, ret);
|
||||
return ret;
|
||||
}
|
||||
rt_mutex_lock(&isp->mutex);
|
||||
|
@ -1469,16 +1435,16 @@ static int atomisp_dqbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
|
|||
return 0;
|
||||
}
|
||||
|
||||
enum atomisp_css_pipe_id atomisp_get_css_pipe_id(struct atomisp_sub_device *asd)
|
||||
enum ia_css_pipe_id atomisp_get_css_pipe_id(struct atomisp_sub_device *asd)
|
||||
{
|
||||
if (ATOMISP_USE_YUVPP(asd))
|
||||
return CSS_PIPE_ID_YUVPP;
|
||||
return IA_CSS_PIPE_ID_YUVPP;
|
||||
|
||||
if (asd->continuous_mode->val) {
|
||||
if (asd->run_mode->val == ATOMISP_RUN_MODE_VIDEO)
|
||||
return CSS_PIPE_ID_VIDEO;
|
||||
return IA_CSS_PIPE_ID_VIDEO;
|
||||
else
|
||||
return CSS_PIPE_ID_PREVIEW;
|
||||
return IA_CSS_PIPE_ID_PREVIEW;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1486,7 +1452,7 @@ enum atomisp_css_pipe_id atomisp_get_css_pipe_id(struct atomisp_sub_device *asd)
|
|||
* scaling but it has one frame delay due to CSS internal buffering.
|
||||
*/
|
||||
if (asd->vfpp->val == ATOMISP_VFPP_DISABLE_SCALER)
|
||||
return CSS_PIPE_ID_VIDEO;
|
||||
return IA_CSS_PIPE_ID_VIDEO;
|
||||
|
||||
/*
|
||||
* Disable vf_pp and run CSS in still capture mode. In this mode
|
||||
|
@ -1494,17 +1460,17 @@ enum atomisp_css_pipe_id atomisp_get_css_pipe_id(struct atomisp_sub_device *asd)
|
|||
* is not available.
|
||||
*/
|
||||
if (asd->vfpp->val == ATOMISP_VFPP_DISABLE_LOWLAT)
|
||||
return CSS_PIPE_ID_CAPTURE;
|
||||
return IA_CSS_PIPE_ID_CAPTURE;
|
||||
|
||||
switch (asd->run_mode->val) {
|
||||
case ATOMISP_RUN_MODE_PREVIEW:
|
||||
return CSS_PIPE_ID_PREVIEW;
|
||||
return IA_CSS_PIPE_ID_PREVIEW;
|
||||
case ATOMISP_RUN_MODE_VIDEO:
|
||||
return CSS_PIPE_ID_VIDEO;
|
||||
return IA_CSS_PIPE_ID_VIDEO;
|
||||
case ATOMISP_RUN_MODE_STILL_CAPTURE:
|
||||
/* fall through */
|
||||
default:
|
||||
return CSS_PIPE_ID_CAPTURE;
|
||||
return IA_CSS_PIPE_ID_CAPTURE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1598,7 +1564,7 @@ int atomisp_stream_on_master_slave_sensor(struct atomisp_device *isp,
|
|||
|
||||
/* FIXME! ISP2400 */
|
||||
static void __wdt_on_master_slave_sensor(struct atomisp_device *isp,
|
||||
unsigned int wdt_duration)
|
||||
unsigned int wdt_duration)
|
||||
{
|
||||
if (atomisp_buffers_queued(&isp->asd[0]))
|
||||
atomisp_wdt_refresh(&isp->asd[0], wdt_duration);
|
||||
|
@ -1654,9 +1620,9 @@ static void atomisp_dma_burst_len_cfg(struct atomisp_sub_device *asd)
|
|||
ATOMISP_SUBDEV_PAD_SINK);
|
||||
|
||||
if (sink->width * sink->height >= 4096 * 3072)
|
||||
atomisp_store_uint32(DMA_BURST_SIZE_REG, 0x7F);
|
||||
atomisp_css2_hw_store_32(DMA_BURST_SIZE_REG, 0x7F);
|
||||
else
|
||||
atomisp_store_uint32(DMA_BURST_SIZE_REG, 0x00);
|
||||
atomisp_css2_hw_store_32(DMA_BURST_SIZE_REG, 0x00);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1669,7 +1635,7 @@ static int atomisp_streamon(struct file *file, void *fh,
|
|||
struct atomisp_video_pipe *pipe = atomisp_to_video_pipe(vdev);
|
||||
struct atomisp_sub_device *asd = pipe->asd;
|
||||
struct atomisp_device *isp = video_get_drvdata(vdev);
|
||||
enum atomisp_css_pipe_id css_pipe_id;
|
||||
enum ia_css_pipe_id css_pipe_id;
|
||||
unsigned int sensor_start_stream;
|
||||
unsigned int wdt_duration = ATOMISP_ISP_TIMEOUT_DURATION;
|
||||
int ret = 0;
|
||||
|
@ -1721,7 +1687,7 @@ static int atomisp_streamon(struct file *file, void *fh,
|
|||
|
||||
/* Reset pending capture request count. */
|
||||
asd->pending_capture_request = 0;
|
||||
if (atomisp_hw_is_isp2401)
|
||||
if (IS_ISP2401)
|
||||
asd->re_trigger_capture = false;
|
||||
|
||||
if ((atomisp_subdev_streaming_count(asd) > sensor_start_stream) &&
|
||||
|
@ -1793,8 +1759,7 @@ static int atomisp_streamon(struct file *file, void *fh,
|
|||
if (asd->params.css_update_params_needed) {
|
||||
atomisp_apply_css_parameters(asd, &asd->params.css_param);
|
||||
if (asd->params.css_param.update_flag.dz_config)
|
||||
atomisp_css_set_dz_config(asd,
|
||||
&asd->params.css_param.dz_config);
|
||||
asd->params.config.dz_config = &asd->params.css_param.dz_config;
|
||||
atomisp_css_update_isp_params(asd);
|
||||
asd->params.css_update_params_needed = false;
|
||||
memset(&asd->params.css_param.update_flag, 0,
|
||||
|
@ -1835,7 +1800,7 @@ static int atomisp_streamon(struct file *file, void *fh,
|
|||
}
|
||||
|
||||
if (!isp->sw_contex.file_input) {
|
||||
atomisp_css_irq_enable(isp, CSS_IRQ_INFO_CSS_RECEIVER_SOF,
|
||||
atomisp_css_irq_enable(isp, IA_CSS_IRQ_INFO_CSS_RECEIVER_SOF,
|
||||
atomisp_css_valid_sof(isp));
|
||||
atomisp_csi2_configure(asd);
|
||||
/*
|
||||
|
@ -1845,15 +1810,15 @@ static int atomisp_streamon(struct file *file, void *fh,
|
|||
if (atomisp_streaming_count(isp) > 1) {
|
||||
if (atomisp_freq_scaling(isp,
|
||||
ATOMISP_DFS_MODE_MAX, false) < 0)
|
||||
dev_dbg(isp->dev, "dfs failed!\n");
|
||||
dev_dbg(isp->dev, "DFS max mode failed!\n");
|
||||
} else {
|
||||
if (atomisp_freq_scaling(isp,
|
||||
ATOMISP_DFS_MODE_AUTO, false) < 0)
|
||||
dev_dbg(isp->dev, "dfs failed!\n");
|
||||
dev_dbg(isp->dev, "DFS auto mode failed!\n");
|
||||
}
|
||||
} else {
|
||||
if (atomisp_freq_scaling(isp, ATOMISP_DFS_MODE_MAX, false) < 0)
|
||||
dev_dbg(isp->dev, "dfs failed!\n");
|
||||
dev_dbg(isp->dev, "DFS max mode failed!\n");
|
||||
}
|
||||
|
||||
if (asd->depth_mode->val && atomisp_streaming_count(isp) ==
|
||||
|
@ -1863,7 +1828,7 @@ static int atomisp_streamon(struct file *file, void *fh,
|
|||
dev_err(isp->dev, "master slave sensor stream on failed!\n");
|
||||
goto out;
|
||||
}
|
||||
if (!atomisp_hw_is_isp2401) {
|
||||
if (!IS_ISP2401) {
|
||||
__wdt_on_master_slave_sensor(isp, wdt_duration);
|
||||
} else {
|
||||
__wdt_on_master_slave_sensor_pipe(pipe, wdt_duration, true);
|
||||
|
@ -1871,7 +1836,7 @@ static int atomisp_streamon(struct file *file, void *fh,
|
|||
goto start_delay_wq;
|
||||
} else if (asd->depth_mode->val && (atomisp_streaming_count(isp) <
|
||||
ATOMISP_DEPTH_SENSOR_STREAMON_COUNT)) {
|
||||
if (atomisp_hw_is_isp2401)
|
||||
if (IS_ISP2401)
|
||||
__wdt_on_master_slave_sensor_pipe(pipe, wdt_duration, false);
|
||||
goto start_delay_wq;
|
||||
}
|
||||
|
@ -1893,7 +1858,7 @@ static int atomisp_streamon(struct file *file, void *fh,
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (!atomisp_hw_is_isp2401) {
|
||||
if (!IS_ISP2401) {
|
||||
if (atomisp_buffers_queued(asd))
|
||||
atomisp_wdt_refresh(asd, wdt_duration);
|
||||
} else {
|
||||
|
@ -1933,7 +1898,7 @@ int __atomisp_streamoff(struct file *file, void *fh, enum v4l2_buf_type type)
|
|||
struct atomisp_video_pipe *preview_pipe = NULL;
|
||||
struct atomisp_video_pipe *video_pipe = NULL;
|
||||
struct videobuf_buffer *vb, *_vb;
|
||||
enum atomisp_css_pipe_id css_pipe_id;
|
||||
enum ia_css_pipe_id css_pipe_id;
|
||||
int ret;
|
||||
unsigned long flags;
|
||||
bool first_streamoff = false;
|
||||
|
@ -2039,7 +2004,7 @@ int __atomisp_streamoff(struct file *file, void *fh, enum v4l2_buf_type type)
|
|||
atomisp_clear_css_buffer_counters(asd);
|
||||
|
||||
if (!isp->sw_contex.file_input)
|
||||
atomisp_css_irq_enable(isp, CSS_IRQ_INFO_CSS_RECEIVER_SOF,
|
||||
atomisp_css_irq_enable(isp, IA_CSS_IRQ_INFO_CSS_RECEIVER_SOF,
|
||||
false);
|
||||
|
||||
if (asd->delayed_init == ATOMISP_DELAYED_INIT_QUEUED) {
|
||||
|
@ -2352,7 +2317,7 @@ static int atomisp_queryctl(struct file *file, void *fh,
|
|||
case V4L2_CID_FOCUS_ABSOLUTE:
|
||||
case V4L2_CID_FOCUS_RELATIVE:
|
||||
case V4L2_CID_FOCUS_STATUS:
|
||||
if (!atomisp_hw_is_isp2401) {
|
||||
if (!IS_ISP2401) {
|
||||
return v4l2_queryctrl(isp->inputs[asd->input_curr].camera->
|
||||
ctrl_handler, qc);
|
||||
}
|
||||
|
@ -2393,7 +2358,7 @@ static int atomisp_camera_g_ext_ctrls(struct file *file, void *fh,
|
|||
int i;
|
||||
int ret = 0;
|
||||
|
||||
if (!atomisp_hw_is_isp2401)
|
||||
if (!IS_ISP2401)
|
||||
motor = isp->inputs[asd->input_curr].motor;
|
||||
else
|
||||
motor = isp->motor;
|
||||
|
@ -2502,8 +2467,7 @@ static int atomisp_camera_s_ext_ctrls(struct file *file, void *fh,
|
|||
int i;
|
||||
int ret = 0;
|
||||
|
||||
|
||||
if (!atomisp_hw_is_isp2401)
|
||||
if (!IS_ISP2401)
|
||||
motor = isp->inputs[asd->input_curr].motor;
|
||||
else
|
||||
motor = isp->motor;
|
||||
|
@ -2519,7 +2483,7 @@ static int atomisp_camera_s_ext_ctrls(struct file *file, void *fh,
|
|||
case V4L2_CID_EXPOSURE_METERING:
|
||||
case V4L2_CID_IRIS_ABSOLUTE:
|
||||
case V4L2_CID_FNUMBER_ABSOLUTE:
|
||||
case V4L2_CID_VCM_TIMEING:
|
||||
case V4L2_CID_VCM_TIMING:
|
||||
case V4L2_CID_VCM_SLEW:
|
||||
case V4L2_CID_3A_LOCK:
|
||||
case V4L2_CID_TEST_PATTERN:
|
||||
|
@ -2732,7 +2696,7 @@ static long atomisp_vidioc_default(struct file *file, void *fh,
|
|||
else
|
||||
asd = atomisp_to_video_pipe(vdev)->asd;
|
||||
|
||||
if (!atomisp_hw_is_isp2401)
|
||||
if (!IS_ISP2401)
|
||||
motor = isp->inputs[asd->input_curr].motor;
|
||||
else
|
||||
motor = isp->motor;
|
||||
|
@ -2757,7 +2721,7 @@ static long atomisp_vidioc_default(struct file *file, void *fh,
|
|||
}
|
||||
switch (cmd) {
|
||||
case ATOMISP_IOC_S_SENSOR_RUNMODE:
|
||||
if (atomisp_hw_is_isp2401)
|
||||
if (IS_ISP2401)
|
||||
err = atomisp_set_sensor_runmode(asd, arg);
|
||||
else
|
||||
err = -EINVAL;
|
||||
|
@ -2932,7 +2896,7 @@ static long atomisp_vidioc_default(struct file *file, void *fh,
|
|||
core, ioctl, cmd, arg);
|
||||
break;
|
||||
case ATOMISP_IOC_G_UPDATE_EXPOSURE:
|
||||
if (atomisp_hw_is_isp2401)
|
||||
if (IS_ISP2401)
|
||||
err = v4l2_subdev_call(isp->inputs[asd->input_curr].camera,
|
||||
core, ioctl, cmd, arg);
|
||||
else
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -43,7 +44,7 @@ int __atomisp_reqbufs(struct file *file, void *fh,
|
|||
int atomisp_reqbufs(struct file *file, void *fh,
|
||||
struct v4l2_requestbuffers *req);
|
||||
|
||||
enum atomisp_css_pipe_id atomisp_get_css_pipe_id(struct atomisp_sub_device
|
||||
enum ia_css_pipe_id atomisp_get_css_pipe_id(struct atomisp_sub_device
|
||||
*asd);
|
||||
|
||||
void atomisp_videobuf_free_buf(struct videobuf_buffer *vb);
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -30,29 +31,31 @@
|
|||
#include "atomisp_internal.h"
|
||||
|
||||
const struct atomisp_in_fmt_conv atomisp_in_fmt_conv[] = {
|
||||
{ MEDIA_BUS_FMT_SBGGR8_1X8, 8, 8, ATOMISP_INPUT_FORMAT_RAW_8, CSS_BAYER_ORDER_BGGR, CSS_FORMAT_RAW_8 },
|
||||
{ MEDIA_BUS_FMT_SGBRG8_1X8, 8, 8, ATOMISP_INPUT_FORMAT_RAW_8, CSS_BAYER_ORDER_GBRG, CSS_FORMAT_RAW_8 },
|
||||
{ MEDIA_BUS_FMT_SGRBG8_1X8, 8, 8, ATOMISP_INPUT_FORMAT_RAW_8, CSS_BAYER_ORDER_GRBG, CSS_FORMAT_RAW_8 },
|
||||
{ MEDIA_BUS_FMT_SRGGB8_1X8, 8, 8, ATOMISP_INPUT_FORMAT_RAW_8, CSS_BAYER_ORDER_RGGB, CSS_FORMAT_RAW_8 },
|
||||
{ MEDIA_BUS_FMT_SBGGR10_1X10, 10, 10, ATOMISP_INPUT_FORMAT_RAW_10, CSS_BAYER_ORDER_BGGR, CSS_FORMAT_RAW_10 },
|
||||
{ MEDIA_BUS_FMT_SGBRG10_1X10, 10, 10, ATOMISP_INPUT_FORMAT_RAW_10, CSS_BAYER_ORDER_GBRG, CSS_FORMAT_RAW_10 },
|
||||
{ MEDIA_BUS_FMT_SGRBG10_1X10, 10, 10, ATOMISP_INPUT_FORMAT_RAW_10, CSS_BAYER_ORDER_GRBG, CSS_FORMAT_RAW_10 },
|
||||
{ MEDIA_BUS_FMT_SRGGB10_1X10, 10, 10, ATOMISP_INPUT_FORMAT_RAW_10, CSS_BAYER_ORDER_RGGB, CSS_FORMAT_RAW_10 },
|
||||
{ MEDIA_BUS_FMT_SBGGR12_1X12, 12, 12, ATOMISP_INPUT_FORMAT_RAW_12, CSS_BAYER_ORDER_BGGR, CSS_FORMAT_RAW_12 },
|
||||
{ MEDIA_BUS_FMT_SGBRG12_1X12, 12, 12, ATOMISP_INPUT_FORMAT_RAW_12, CSS_BAYER_ORDER_GBRG, CSS_FORMAT_RAW_12 },
|
||||
{ MEDIA_BUS_FMT_SGRBG12_1X12, 12, 12, ATOMISP_INPUT_FORMAT_RAW_12, CSS_BAYER_ORDER_GRBG, CSS_FORMAT_RAW_12 },
|
||||
{ MEDIA_BUS_FMT_SRGGB12_1X12, 12, 12, ATOMISP_INPUT_FORMAT_RAW_12, CSS_BAYER_ORDER_RGGB, CSS_FORMAT_RAW_12 },
|
||||
{ MEDIA_BUS_FMT_UYVY8_1X16, 8, 8, ATOMISP_INPUT_FORMAT_YUV422_8, 0, ATOMISP_INPUT_FORMAT_YUV422_8 },
|
||||
{ MEDIA_BUS_FMT_YUYV8_1X16, 8, 8, ATOMISP_INPUT_FORMAT_YUV422_8, 0, ATOMISP_INPUT_FORMAT_YUV422_8 },
|
||||
{ MEDIA_BUS_FMT_JPEG_1X8, 8, 8, CSS_FRAME_FORMAT_BINARY_8, 0, ATOMISP_INPUT_FORMAT_BINARY_8 },
|
||||
{ V4L2_MBUS_FMT_CUSTOM_NV12, 12, 12, CSS_FRAME_FORMAT_NV12, 0, CSS_FRAME_FORMAT_NV12 },
|
||||
{ V4L2_MBUS_FMT_CUSTOM_NV21, 12, 12, CSS_FRAME_FORMAT_NV21, 0, CSS_FRAME_FORMAT_NV21 },
|
||||
{ V4L2_MBUS_FMT_CUSTOM_YUV420, 12, 12, ATOMISP_INPUT_FORMAT_YUV420_8_LEGACY, 0, ATOMISP_INPUT_FORMAT_YUV420_8_LEGACY },
|
||||
{ MEDIA_BUS_FMT_SBGGR8_1X8, 8, 8, ATOMISP_INPUT_FORMAT_RAW_8, IA_CSS_BAYER_ORDER_BGGR },
|
||||
{ MEDIA_BUS_FMT_SGBRG8_1X8, 8, 8, ATOMISP_INPUT_FORMAT_RAW_8, IA_CSS_BAYER_ORDER_GBRG },
|
||||
{ MEDIA_BUS_FMT_SGRBG8_1X8, 8, 8, ATOMISP_INPUT_FORMAT_RAW_8, IA_CSS_BAYER_ORDER_GRBG },
|
||||
{ MEDIA_BUS_FMT_SRGGB8_1X8, 8, 8, ATOMISP_INPUT_FORMAT_RAW_8, IA_CSS_BAYER_ORDER_RGGB },
|
||||
{ MEDIA_BUS_FMT_SBGGR10_1X10, 10, 10, ATOMISP_INPUT_FORMAT_RAW_10, IA_CSS_BAYER_ORDER_BGGR },
|
||||
{ MEDIA_BUS_FMT_SGBRG10_1X10, 10, 10, ATOMISP_INPUT_FORMAT_RAW_10, IA_CSS_BAYER_ORDER_GBRG },
|
||||
{ MEDIA_BUS_FMT_SGRBG10_1X10, 10, 10, ATOMISP_INPUT_FORMAT_RAW_10, IA_CSS_BAYER_ORDER_GRBG },
|
||||
{ MEDIA_BUS_FMT_SRGGB10_1X10, 10, 10, ATOMISP_INPUT_FORMAT_RAW_10, IA_CSS_BAYER_ORDER_RGGB },
|
||||
{ MEDIA_BUS_FMT_SBGGR12_1X12, 12, 12, ATOMISP_INPUT_FORMAT_RAW_12, IA_CSS_BAYER_ORDER_BGGR },
|
||||
{ MEDIA_BUS_FMT_SGBRG12_1X12, 12, 12, ATOMISP_INPUT_FORMAT_RAW_12, IA_CSS_BAYER_ORDER_GBRG },
|
||||
{ MEDIA_BUS_FMT_SGRBG12_1X12, 12, 12, ATOMISP_INPUT_FORMAT_RAW_12, IA_CSS_BAYER_ORDER_GRBG },
|
||||
{ MEDIA_BUS_FMT_SRGGB12_1X12, 12, 12, ATOMISP_INPUT_FORMAT_RAW_12, IA_CSS_BAYER_ORDER_RGGB },
|
||||
{ MEDIA_BUS_FMT_UYVY8_1X16, 8, 8, ATOMISP_INPUT_FORMAT_YUV422_8, 0 },
|
||||
{ MEDIA_BUS_FMT_YUYV8_1X16, 8, 8, ATOMISP_INPUT_FORMAT_YUV422_8, 0 },
|
||||
#if 0 // disabled due to clang warnings
|
||||
{ MEDIA_BUS_FMT_JPEG_1X8, 8, 8, IA_CSS_FRAME_FORMAT_BINARY_8, 0 },
|
||||
{ V4L2_MBUS_FMT_CUSTOM_NV12, 12, 12, IA_CSS_FRAME_FORMAT_NV12, 0 },
|
||||
{ V4L2_MBUS_FMT_CUSTOM_NV21, 12, 12, IA_CSS_FRAME_FORMAT_NV21, 0 },
|
||||
#endif
|
||||
{ V4L2_MBUS_FMT_CUSTOM_YUV420, 12, 12, ATOMISP_INPUT_FORMAT_YUV420_8_LEGACY, 0 },
|
||||
#if 0
|
||||
{ V4L2_MBUS_FMT_CUSTOM_M10MO_RAW, 8, 8, CSS_FRAME_FORMAT_BINARY_8, 0, ATOMISP_INPUT_FORMAT_BINARY_8 },
|
||||
{ V4L2_MBUS_FMT_CUSTOM_M10MO_RAW, 8, 8, IA_CSS_FRAME_FORMAT_BINARY_8, 0 },
|
||||
#endif
|
||||
/* no valid V4L2 MBUS code for metadata format, so leave it 0. */
|
||||
{ 0, 0, 0, ATOMISP_INPUT_FORMAT_EMBEDDED, 0, ATOMISP_INPUT_FORMAT_EMBEDDED },
|
||||
{ 0, 0, 0, ATOMISP_INPUT_FORMAT_EMBEDDED, 0 },
|
||||
{}
|
||||
};
|
||||
|
||||
|
@ -639,7 +642,7 @@ void atomisp_subdev_set_ffmt(struct v4l2_subdev *sd,
|
|||
atomisp_css_input_set_bayer_order(isp_sd, stream_id,
|
||||
fc->bayer_order);
|
||||
atomisp_css_input_set_format(isp_sd, stream_id,
|
||||
fc->css_stream_fmt);
|
||||
fc->atomisp_in_fmt);
|
||||
atomisp_css_set_default_isys_config(isp_sd, stream_id,
|
||||
ffmt);
|
||||
}
|
||||
|
@ -1219,15 +1222,10 @@ static int isp_subdev_init_entities(struct atomisp_sub_device *asd)
|
|||
v4l2_ctrl_new_custom(&asd->ctrl_handler,
|
||||
&ctrl_disable_dz,
|
||||
NULL);
|
||||
if (atomisp_hw_is_isp2401) {
|
||||
if (IS_ISP2401) {
|
||||
asd->select_isp_version = v4l2_ctrl_new_custom(&asd->ctrl_handler,
|
||||
&ctrl_select_isp_version,
|
||||
NULL);
|
||||
#if 0 /* #ifdef CONFIG_ION */
|
||||
asd->ion_dev_fd = v4l2_ctrl_new_custom(&asd->ctrl_handler,
|
||||
&ctrl_ion_dev_fd,
|
||||
NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Make controls visible on subdev as well. */
|
||||
|
@ -1348,8 +1346,7 @@ int atomisp_subdev_register_entities(struct atomisp_sub_device *asd,
|
|||
* Should any of those use V4L2_CAP_META_OUTPUT? Probably yes.
|
||||
*/
|
||||
|
||||
device_caps = V4L2_CAP_IO_MC |
|
||||
V4L2_CAP_VIDEO_CAPTURE |
|
||||
device_caps = V4L2_CAP_VIDEO_CAPTURE |
|
||||
V4L2_CAP_STREAMING;
|
||||
|
||||
/* Register the subdev and video node. */
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -59,8 +60,7 @@ struct atomisp_in_fmt_conv {
|
|||
u8 bpp; /* bits per pixel */
|
||||
u8 depth; /* uncompressed */
|
||||
enum atomisp_input_format atomisp_in_fmt;
|
||||
enum atomisp_css_bayer_order bayer_order;
|
||||
enum atomisp_input_format css_stream_fmt;
|
||||
enum ia_css_bayer_order bayer_order;
|
||||
};
|
||||
|
||||
struct atomisp_sub_device;
|
||||
|
@ -215,8 +215,8 @@ struct atomisp_subdev_params {
|
|||
unsigned int histogram_elenum;
|
||||
|
||||
/* Current grid info */
|
||||
struct atomisp_css_grid_info curr_grid_info;
|
||||
enum atomisp_css_pipe_id s3a_enabled_pipe;
|
||||
struct ia_css_grid_info curr_grid_info;
|
||||
enum ia_css_pipe_id s3a_enabled_pipe;
|
||||
|
||||
int s3a_output_bytes;
|
||||
|
||||
|
@ -225,7 +225,7 @@ struct atomisp_subdev_params {
|
|||
struct ia_css_dz_config dz_config; /** Digital Zoom */
|
||||
struct ia_css_capture_config capture_config;
|
||||
|
||||
struct atomisp_css_isp_config config;
|
||||
struct ia_css_isp_config config;
|
||||
|
||||
/* current configurations */
|
||||
struct atomisp_css_params css_param;
|
||||
|
@ -240,7 +240,7 @@ struct atomisp_subdev_params {
|
|||
u32 metadata_width_size;
|
||||
|
||||
struct ia_css_dvs2_statistics *dvs_stat;
|
||||
struct atomisp_css_dvs_6axis *dvs_6axis;
|
||||
struct ia_css_dvs_6axis_config *dvs_6axis;
|
||||
u32 exp_id;
|
||||
int dvs_hor_coef_bytes;
|
||||
int dvs_ver_coef_bytes;
|
||||
|
@ -265,7 +265,7 @@ struct atomisp_css_params_with_list {
|
|||
};
|
||||
|
||||
struct atomisp_acc_fw {
|
||||
struct atomisp_css_fw_info *fw;
|
||||
struct ia_css_fw_info *fw;
|
||||
unsigned int handle;
|
||||
unsigned int flags;
|
||||
unsigned int type;
|
||||
|
@ -323,7 +323,7 @@ struct atomisp_sub_device {
|
|||
struct {
|
||||
struct list_head fw;
|
||||
struct list_head memory_maps;
|
||||
struct atomisp_css_pipeline *pipeline;
|
||||
struct ia_css_pipe *pipeline;
|
||||
bool extension_mode;
|
||||
struct ida ida;
|
||||
struct completion acc_done;
|
||||
|
@ -335,11 +335,11 @@ struct atomisp_sub_device {
|
|||
struct atomisp_stream_env stream_env[ATOMISP_INPUT_STREAM_NUM];
|
||||
|
||||
struct v4l2_pix_format dvs_envelop;
|
||||
unsigned int s3a_bufs_in_css[CSS_PIPE_ID_NUM];
|
||||
unsigned int s3a_bufs_in_css[IA_CSS_PIPE_ID_NUM];
|
||||
unsigned int dis_bufs_in_css;
|
||||
|
||||
unsigned int metadata_bufs_in_css
|
||||
[ATOMISP_INPUT_STREAM_NUM][CSS_PIPE_ID_NUM];
|
||||
[ATOMISP_INPUT_STREAM_NUM][IA_CSS_PIPE_ID_NUM];
|
||||
/* The list of free and available metadata buffers for CSS */
|
||||
struct list_head metadata[ATOMISP_METADATA_TYPE_NUM];
|
||||
/* The list of metadata buffers which have been en-queued to CSS */
|
||||
|
@ -358,8 +358,8 @@ struct atomisp_sub_device {
|
|||
struct list_head dis_stats_in_css;
|
||||
spinlock_t dis_stats_lock;
|
||||
|
||||
struct atomisp_css_frame *vf_frame; /* TODO: needed? */
|
||||
struct atomisp_css_frame *raw_output_frame;
|
||||
struct ia_css_frame *vf_frame; /* TODO: needed? */
|
||||
struct ia_css_frame *raw_output_frame;
|
||||
enum atomisp_frame_status frame_status[VIDEO_MAX_FRAME];
|
||||
|
||||
/* This field specifies which camera (v4l2 input) is selected. */
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -22,25 +23,25 @@
|
|||
#include "sh_css_params.h"
|
||||
|
||||
/*Sepia image effect table*/
|
||||
static struct atomisp_css_cc_config sepia_cc_config = {
|
||||
static struct ia_css_cc_config sepia_cc_config = {
|
||||
.fraction_bits = 8,
|
||||
.matrix = {141, 18, 68, -40, -5, -19, 35, 4, 16},
|
||||
};
|
||||
|
||||
/*Negative image effect table*/
|
||||
static struct atomisp_css_cc_config nega_cc_config = {
|
||||
static struct ia_css_cc_config nega_cc_config = {
|
||||
.fraction_bits = 8,
|
||||
.matrix = {255, 29, 120, 0, 374, 342, 0, 672, -301},
|
||||
};
|
||||
|
||||
/*Mono image effect table*/
|
||||
static struct atomisp_css_cc_config mono_cc_config = {
|
||||
static struct ia_css_cc_config mono_cc_config = {
|
||||
.fraction_bits = 8,
|
||||
.matrix = {255, 29, 120, 0, 0, 0, 0, 0, 0},
|
||||
};
|
||||
|
||||
/*Skin whiten image effect table*/
|
||||
static struct atomisp_css_macc_table skin_low_macc_table = {
|
||||
static struct ia_css_macc_table skin_low_macc_table = {
|
||||
.data = {
|
||||
8192, 0, 0, 8192,
|
||||
8192, 0, 0, 8192,
|
||||
|
@ -61,7 +62,7 @@ static struct atomisp_css_macc_table skin_low_macc_table = {
|
|||
}
|
||||
};
|
||||
|
||||
static struct atomisp_css_macc_table skin_medium_macc_table = {
|
||||
static struct ia_css_macc_table skin_medium_macc_table = {
|
||||
.data = {
|
||||
8192, 0, 0, 8192,
|
||||
8192, 0, 0, 8192,
|
||||
|
@ -82,7 +83,7 @@ static struct atomisp_css_macc_table skin_medium_macc_table = {
|
|||
}
|
||||
};
|
||||
|
||||
static struct atomisp_css_macc_table skin_high_macc_table = {
|
||||
static struct ia_css_macc_table skin_high_macc_table = {
|
||||
.data = {
|
||||
8192, 0, 0, 8192,
|
||||
8192, 0, 0, 8192,
|
||||
|
@ -104,7 +105,7 @@ static struct atomisp_css_macc_table skin_high_macc_table = {
|
|||
};
|
||||
|
||||
/*Blue enhencement image effect table*/
|
||||
static struct atomisp_css_macc_table blue_macc_table = {
|
||||
static struct ia_css_macc_table blue_macc_table = {
|
||||
.data = {
|
||||
9728, -3072, 0, 8192,
|
||||
8192, 0, 0, 8192,
|
||||
|
@ -126,7 +127,7 @@ static struct atomisp_css_macc_table blue_macc_table = {
|
|||
};
|
||||
|
||||
/*Green enhencement image effect table*/
|
||||
static struct atomisp_css_macc_table green_macc_table = {
|
||||
static struct ia_css_macc_table green_macc_table = {
|
||||
.data = {
|
||||
8192, 0, 0, 8192,
|
||||
8192, 0, 0, 8192,
|
||||
|
@ -147,7 +148,7 @@ static struct atomisp_css_macc_table green_macc_table = {
|
|||
}
|
||||
};
|
||||
|
||||
static struct atomisp_css_ctc_table vivid_ctc_table = {
|
||||
static struct ia_css_ctc_table vivid_ctc_table = {
|
||||
.data.vamem_2 = {
|
||||
0, 384, 837, 957, 1011, 1062, 1083, 1080,
|
||||
1078, 1077, 1053, 1039, 1012, 992, 969, 951,
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -147,7 +148,7 @@ int atomisp_tpg_init(struct atomisp_device *isp)
|
|||
tpg->isp = isp;
|
||||
v4l2_subdev_init(sd, &tpg_ops);
|
||||
sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
|
||||
strcpy(sd->name, "tpg_subdev");
|
||||
strscpy(sd->name, "tpg_subdev", sizeof(sd->name));
|
||||
v4l2_set_subdevdata(sd, tpg);
|
||||
|
||||
pads[0].flags = MEDIA_PAD_FL_SINK;
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support Camera Imaging tracer core.
|
||||
*
|
||||
|
@ -43,7 +44,7 @@ TRACE_EVENT(camera_meminfo,
|
|||
),
|
||||
|
||||
TP_fast_assign(
|
||||
strlcpy(__entry->name, name, 24);
|
||||
strscpy(__entry->name, name, 24);
|
||||
__entry->uptr_size = uptr_size;
|
||||
__entry->counter = counter;
|
||||
__entry->sys_size = sys_size;
|
||||
|
@ -73,8 +74,8 @@ TRACE_EVENT(camera_debug,
|
|||
),
|
||||
|
||||
TP_fast_assign(
|
||||
strlcpy(__entry->name, name, 24);
|
||||
strlcpy(__entry->info, info, 24);
|
||||
strscpy(__entry->name, name, 24);
|
||||
strscpy(__entry->info, info, 24);
|
||||
__entry->line = line;
|
||||
),
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
@ -42,7 +43,7 @@
|
|||
#include "hmm/hmm.h"
|
||||
#include "atomisp_trace_event.h"
|
||||
|
||||
#include "hrt/hive_isp_css_mm_hrt.h"
|
||||
#include "sh_css_firmware.h"
|
||||
|
||||
#include "device_access.h"
|
||||
|
||||
|
@ -58,21 +59,21 @@ module_param(skip_fwload, uint, 0644);
|
|||
MODULE_PARM_DESC(skip_fwload, "Skip atomisp firmware load");
|
||||
|
||||
/* set reserved memory pool size in page */
|
||||
static unsigned int repool_pgnr;
|
||||
static unsigned int repool_pgnr = 32768;
|
||||
module_param(repool_pgnr, uint, 0644);
|
||||
MODULE_PARM_DESC(repool_pgnr,
|
||||
"Set the reserved memory pool size in page (default:0)");
|
||||
"Set the reserved memory pool size in page (default:32768)");
|
||||
|
||||
/* set dynamic memory pool size in page */
|
||||
unsigned int dypool_pgnr = UINT_MAX;
|
||||
module_param(dypool_pgnr, uint, 0644);
|
||||
MODULE_PARM_DESC(dypool_pgnr,
|
||||
"Set the dynamic memory pool size in page (default:0)");
|
||||
"Set the dynamic memory pool size in page (default: unlimited)");
|
||||
|
||||
bool dypool_enable;
|
||||
bool dypool_enable = true;
|
||||
module_param(dypool_enable, bool, 0644);
|
||||
MODULE_PARM_DESC(dypool_enable,
|
||||
"dynamic memory pool enable/disable (default:disable)");
|
||||
"dynamic memory pool enable/disable (default:enabled)");
|
||||
|
||||
/* memory optimization: deferred firmware loading */
|
||||
bool defer_fw_load;
|
||||
|
@ -83,7 +84,7 @@ MODULE_PARM_DESC(defer_fw_load,
|
|||
/* cross componnet debug message flag */
|
||||
int dbg_level;
|
||||
module_param(dbg_level, int, 0644);
|
||||
MODULE_PARM_DESC(dbg_level, "debug message on/off (default:off)");
|
||||
MODULE_PARM_DESC(dbg_level, "debug message level (default:0)");
|
||||
|
||||
/* log function switch */
|
||||
int dbg_func = 2;
|
||||
|
@ -95,6 +96,10 @@ int mipicsi_flag;
|
|||
module_param(mipicsi_flag, int, 0644);
|
||||
MODULE_PARM_DESC(mipicsi_flag, "mipi csi compression predictor algorithm");
|
||||
|
||||
static char firmware_name[256];
|
||||
module_param_string(firmware_name, firmware_name, sizeof(firmware_name), 0);
|
||||
MODULE_PARM_DESC(firmware_name, "Firmware file name. Allows overriding the default firmware name.");
|
||||
|
||||
/*set to 16x16 since this is the amount of lines and pixels the sensor
|
||||
exports extra. If these are kept at the 10x8 that they were on, in yuv
|
||||
downscaling modes incorrect resolutions where requested to the sensor
|
||||
|
@ -119,11 +124,6 @@ MODULE_PARM_DESC(pad_h, "extra data for ISP processing");
|
|||
* be to replace this to something stored inside atomisp allocated
|
||||
* structures.
|
||||
*/
|
||||
bool atomisp_hw_is_isp2401;
|
||||
|
||||
/* Types of atomisp hardware */
|
||||
#define HW_IS_ISP2400 0
|
||||
#define HW_IS_ISP2401 1
|
||||
|
||||
struct device *atomisp_dev;
|
||||
|
||||
|
@ -349,52 +349,6 @@ static const struct atomisp_dfs_config dfs_config_byt = {
|
|||
.dfs_table_size = ARRAY_SIZE(dfs_rules_byt),
|
||||
};
|
||||
|
||||
static const struct atomisp_freq_scaling_rule dfs_rules_byt_cr[] = {
|
||||
{
|
||||
.width = ISP_FREQ_RULE_ANY,
|
||||
.height = ISP_FREQ_RULE_ANY,
|
||||
.fps = ISP_FREQ_RULE_ANY,
|
||||
.isp_freq = ISP_FREQ_320MHZ,
|
||||
.run_mode = ATOMISP_RUN_MODE_VIDEO,
|
||||
},
|
||||
{
|
||||
.width = ISP_FREQ_RULE_ANY,
|
||||
.height = ISP_FREQ_RULE_ANY,
|
||||
.fps = ISP_FREQ_RULE_ANY,
|
||||
.isp_freq = ISP_FREQ_320MHZ,
|
||||
.run_mode = ATOMISP_RUN_MODE_STILL_CAPTURE,
|
||||
},
|
||||
{
|
||||
.width = ISP_FREQ_RULE_ANY,
|
||||
.height = ISP_FREQ_RULE_ANY,
|
||||
.fps = ISP_FREQ_RULE_ANY,
|
||||
.isp_freq = ISP_FREQ_320MHZ,
|
||||
.run_mode = ATOMISP_RUN_MODE_CONTINUOUS_CAPTURE,
|
||||
},
|
||||
{
|
||||
.width = ISP_FREQ_RULE_ANY,
|
||||
.height = ISP_FREQ_RULE_ANY,
|
||||
.fps = ISP_FREQ_RULE_ANY,
|
||||
.isp_freq = ISP_FREQ_320MHZ,
|
||||
.run_mode = ATOMISP_RUN_MODE_PREVIEW,
|
||||
},
|
||||
{
|
||||
.width = ISP_FREQ_RULE_ANY,
|
||||
.height = ISP_FREQ_RULE_ANY,
|
||||
.fps = ISP_FREQ_RULE_ANY,
|
||||
.isp_freq = ISP_FREQ_320MHZ,
|
||||
.run_mode = ATOMISP_RUN_MODE_SDV,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct atomisp_dfs_config dfs_config_byt_cr = {
|
||||
.lowest_freq = ISP_FREQ_200MHZ,
|
||||
.max_freq_at_vmin = ISP_FREQ_320MHZ,
|
||||
.highest_freq = ISP_FREQ_320MHZ,
|
||||
.dfs_table = dfs_rules_byt_cr,
|
||||
.dfs_table_size = ARRAY_SIZE(dfs_rules_byt_cr),
|
||||
};
|
||||
|
||||
static const struct atomisp_freq_scaling_rule dfs_rules_cht[] = {
|
||||
{
|
||||
.width = ISP_FREQ_RULE_ANY,
|
||||
|
@ -659,7 +613,7 @@ static int __maybe_unused atomisp_restore_iunit_reg(struct atomisp_device *isp)
|
|||
* which has bugs(like sighting:4567697 and 4567699) and
|
||||
* will be removed in B0
|
||||
*/
|
||||
atomisp_store_uint32(MRFLD_CSI_RECEIVER_SELECTION_REG, 1);
|
||||
atomisp_css2_hw_store_32(MRFLD_CSI_RECEIVER_SELECTION_REG, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -689,7 +643,7 @@ static int atomisp_mrfld_pre_power_down(struct atomisp_device *isp)
|
|||
if (!(irq & (1 << INTR_IIR)))
|
||||
goto done;
|
||||
|
||||
atomisp_store_uint32(MRFLD_INTR_CLEAR_REG, 0xFFFFFFFF);
|
||||
atomisp_css2_hw_store_32(MRFLD_INTR_CLEAR_REG, 0xFFFFFFFF);
|
||||
atomisp_load_uint32(MRFLD_INTR_STATUS_REG, &irq);
|
||||
if (irq != 0) {
|
||||
dev_err(isp->dev,
|
||||
|
@ -704,7 +658,7 @@ static int atomisp_mrfld_pre_power_down(struct atomisp_device *isp)
|
|||
|
||||
pci_read_config_dword(dev, PCI_INTERRUPT_CTRL, &irq);
|
||||
if (!(irq & (1 << INTR_IIR))) {
|
||||
atomisp_store_uint32(MRFLD_INTR_ENABLE_REG, 0x0);
|
||||
atomisp_css2_hw_store_32(MRFLD_INTR_ENABLE_REG, 0x0);
|
||||
goto done;
|
||||
}
|
||||
dev_err(isp->dev,
|
||||
|
@ -1084,15 +1038,15 @@ static int atomisp_subdev_probe(struct atomisp_device *isp)
|
|||
/* FIXME: should return -EPROBE_DEFER if not all subdevs were probed */
|
||||
for (count = 0; count < SUBDEV_WAIT_TIMEOUT_MAX_COUNT; count++) {
|
||||
int camera_count = 0;
|
||||
|
||||
for (subdevs = pdata->subdevs; subdevs->type; ++subdevs) {
|
||||
if (subdevs->type == RAW_CAMERA ||
|
||||
subdevs->type == SOC_CAMERA)
|
||||
camera_count ++;
|
||||
camera_count++;
|
||||
}
|
||||
if (camera_count)
|
||||
break;
|
||||
msleep(SUBDEV_WAIT_TIMEOUT);
|
||||
count++;
|
||||
}
|
||||
/* Wait more time to give more time for subdev init code to finish */
|
||||
msleep(5 * SUBDEV_WAIT_TIMEOUT);
|
||||
|
@ -1143,9 +1097,9 @@ static int atomisp_subdev_probe(struct atomisp_device *isp)
|
|||
|
||||
switch (subdevs->type) {
|
||||
case RAW_CAMERA:
|
||||
raw_index = isp->input_cnt;
|
||||
dev_dbg(isp->dev, "raw_index: %d\n", raw_index);
|
||||
/* pass-though */
|
||||
raw_index = isp->input_cnt;
|
||||
/* fall through */
|
||||
case SOC_CAMERA:
|
||||
dev_dbg(isp->dev, "SOC_INDEX: %d\n", isp->input_cnt);
|
||||
if (isp->input_cnt >= ATOM_ISP_MAX_INPUTS) {
|
||||
|
@ -1250,7 +1204,7 @@ static int atomisp_register_entities(struct atomisp_device *isp)
|
|||
|
||||
isp->media_dev.dev = isp->dev;
|
||||
|
||||
strlcpy(isp->media_dev.model, "Intel Atom ISP",
|
||||
strscpy(isp->media_dev.model, "Intel Atom ISP",
|
||||
sizeof(isp->media_dev.model));
|
||||
|
||||
media_device_init(&isp->media_dev);
|
||||
|
@ -1447,19 +1401,23 @@ atomisp_load_firmware(struct atomisp_device *isp)
|
|||
if (skip_fwload)
|
||||
return NULL;
|
||||
|
||||
if ((isp->media_dev.hw_revision >> ATOMISP_HW_REVISION_SHIFT)
|
||||
== ATOMISP_HW_REVISION_ISP2401)
|
||||
fw_path = "shisp_2401a0_v21.bin";
|
||||
if (firmware_name[0] != '\0') {
|
||||
fw_path = firmware_name;
|
||||
} else {
|
||||
if ((isp->media_dev.hw_revision >> ATOMISP_HW_REVISION_SHIFT)
|
||||
== ATOMISP_HW_REVISION_ISP2401)
|
||||
fw_path = "shisp_2401a0_v21.bin";
|
||||
|
||||
if (isp->media_dev.hw_revision ==
|
||||
((ATOMISP_HW_REVISION_ISP2401_LEGACY << ATOMISP_HW_REVISION_SHIFT)
|
||||
| ATOMISP_HW_STEPPING_A0))
|
||||
fw_path = "shisp_2401a0_legacy_v21.bin";
|
||||
if (isp->media_dev.hw_revision ==
|
||||
((ATOMISP_HW_REVISION_ISP2401_LEGACY << ATOMISP_HW_REVISION_SHIFT)
|
||||
| ATOMISP_HW_STEPPING_A0))
|
||||
fw_path = "shisp_2401a0_legacy_v21.bin";
|
||||
|
||||
if (isp->media_dev.hw_revision ==
|
||||
((ATOMISP_HW_REVISION_ISP2400 << ATOMISP_HW_REVISION_SHIFT)
|
||||
| ATOMISP_HW_STEPPING_B0))
|
||||
fw_path = "shisp_2400b0_v21.bin";
|
||||
if (isp->media_dev.hw_revision ==
|
||||
((ATOMISP_HW_REVISION_ISP2400 << ATOMISP_HW_REVISION_SHIFT)
|
||||
| ATOMISP_HW_STEPPING_B0))
|
||||
fw_path = "shisp_2400b0_v21.bin";
|
||||
}
|
||||
|
||||
if (!fw_path) {
|
||||
dev_err(isp->dev, "Unsupported hw_revision 0x%x\n",
|
||||
|
@ -1494,21 +1452,17 @@ static bool is_valid_device(struct pci_dev *dev,
|
|||
switch (id->device & ATOMISP_PCI_DEVICE_SOC_MASK) {
|
||||
case ATOMISP_PCI_DEVICE_SOC_MRFLD:
|
||||
a0_max_id = ATOMISP_PCI_REV_MRFLD_A0_MAX;
|
||||
atomisp_hw_is_isp2401 = false;
|
||||
name = "Merrifield";
|
||||
break;
|
||||
case ATOMISP_PCI_DEVICE_SOC_BYT:
|
||||
a0_max_id = ATOMISP_PCI_REV_BYT_A0_MAX;
|
||||
atomisp_hw_is_isp2401 = false;
|
||||
name = "Baytrail";
|
||||
break;
|
||||
case ATOMISP_PCI_DEVICE_SOC_ANN:
|
||||
name = "Anniedale";
|
||||
atomisp_hw_is_isp2401 = true;
|
||||
break;
|
||||
case ATOMISP_PCI_DEVICE_SOC_CHT:
|
||||
name = "Cherrytrail";
|
||||
atomisp_hw_is_isp2401 = true;
|
||||
break;
|
||||
default:
|
||||
dev_err(&dev->dev, "%s: unknown device ID %x04:%x04\n",
|
||||
|
@ -1528,13 +1482,13 @@ static bool is_valid_device(struct pci_dev *dev,
|
|||
*/
|
||||
|
||||
#if defined(ISP2400)
|
||||
if (atomisp_hw_is_isp2401) {
|
||||
if (IS_ISP2401) {
|
||||
dev_err(&dev->dev, "Support for %s (ISP2401) was disabled at compile time\n",
|
||||
name);
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
if (!atomisp_hw_is_isp2401) {
|
||||
if (!IS_ISP2401) {
|
||||
dev_err(&dev->dev, "Support for %s (ISP2400) was disabled at compile time\n",
|
||||
name);
|
||||
return false;
|
||||
|
@ -1543,7 +1497,7 @@ static bool is_valid_device(struct pci_dev *dev,
|
|||
|
||||
dev_info(&dev->dev, "Detected %s version %d (ISP240%c) on %s\n",
|
||||
name, dev->revision,
|
||||
atomisp_hw_is_isp2401 ? '1' : '0',
|
||||
IS_ISP2401 ? '1' : '0',
|
||||
product);
|
||||
|
||||
return true;
|
||||
|
@ -1564,7 +1518,8 @@ static int init_atomisp_wdts(struct atomisp_device *isp)
|
|||
|
||||
for (i = 0; i < isp->num_of_streams; i++) {
|
||||
struct atomisp_sub_device *asd = &isp->asd[i];
|
||||
if (!atomisp_hw_is_isp2401)
|
||||
|
||||
if (!IS_ISP2401)
|
||||
timer_setup(&asd->wdt, atomisp_wdt, 0);
|
||||
else {
|
||||
timer_setup(&asd->video_out_capture.wdt,
|
||||
|
@ -1670,20 +1625,29 @@ static int atomisp_pci_probe(struct pci_dev *dev,
|
|||
(ATOMISP_HW_REVISION_ISP2400
|
||||
<< ATOMISP_HW_REVISION_SHIFT) |
|
||||
ATOMISP_HW_STEPPING_B0;
|
||||
#ifdef FIXME
|
||||
if (INTEL_MID_BOARD(3, TABLET, BYT, BLK, PRO, CRV2) ||
|
||||
INTEL_MID_BOARD(3, TABLET, BYT, BLK, ENG, CRV2)) {
|
||||
isp->dfs = &dfs_config_byt_cr;
|
||||
isp->hpll_freq = HPLL_FREQ_2000MHZ;
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
isp->dfs = &dfs_config_byt;
|
||||
isp->hpll_freq = HPLL_FREQ_1600MHZ;
|
||||
}
|
||||
/* HPLL frequency is known to be device-specific, but we don't
|
||||
|
||||
/*
|
||||
* Note: some Intel-based tablets with Android use a different
|
||||
* DFS table. Based on the comments at the Yocto Aero meta
|
||||
* version of this driver (at the ssid.h header), they're
|
||||
* identified via a "spid" var:
|
||||
*
|
||||
* androidboot.spid=vend:cust:manu:plat:prod:hard
|
||||
*
|
||||
* As we don't have this upstream, nor we know enough details
|
||||
* to use a DMI or PCI match table, the old code was just
|
||||
* removed, but let's keep a note here as a reminder that,
|
||||
* for certain devices, we may need to limit the max DFS
|
||||
* frequency to be below certain values, adjusting the
|
||||
* resolution accordingly.
|
||||
*/
|
||||
isp->dfs = &dfs_config_byt;
|
||||
|
||||
/*
|
||||
* HPLL frequency is known to be device-specific, but we don't
|
||||
* have specs yet for exactly how it varies. Default to
|
||||
* BYT-CR but let provisioning set it via EFI variable */
|
||||
* BYT-CR but let provisioning set it via EFI variable
|
||||
*/
|
||||
isp->hpll_freq = gmin_get_var_int(&dev->dev, false, "HpllFreq",
|
||||
HPLL_FREQ_2000MHZ);
|
||||
|
||||
|
@ -1735,7 +1699,7 @@ static int atomisp_pci_probe(struct pci_dev *dev,
|
|||
default:
|
||||
isp->hpll_freq = HPLL_FREQ_1600MHZ;
|
||||
dev_warn(isp->dev,
|
||||
"read HPLL from cck failed.default 1600MHz.\n");
|
||||
"read HPLL from cck failed. Default to 1600 MHz.\n");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -1758,7 +1722,8 @@ static int atomisp_pci_probe(struct pci_dev *dev,
|
|||
goto load_fw_fail;
|
||||
}
|
||||
|
||||
err = atomisp_css_check_firmware_version(isp);
|
||||
err = sh_css_check_firmware_version(isp->dev,
|
||||
isp->firmware->data);
|
||||
if (err) {
|
||||
dev_dbg(&dev->dev, "Firmware version check failed\n");
|
||||
goto fw_validation_fail;
|
||||
|
@ -1787,7 +1752,7 @@ static int atomisp_pci_probe(struct pci_dev *dev,
|
|||
* bugs(like sighting:4567697 and 4567699) and will be removed
|
||||
* in B0
|
||||
*/
|
||||
atomisp_store_uint32(MRFLD_CSI_RECEIVER_SELECTION_REG, 1);
|
||||
atomisp_css2_hw_store_32(MRFLD_CSI_RECEIVER_SELECTION_REG, 1);
|
||||
|
||||
if ((id->device & ATOMISP_PCI_DEVICE_SOC_MASK) ==
|
||||
ATOMISP_PCI_DEVICE_SOC_MRFLD) {
|
||||
|
@ -1938,7 +1903,7 @@ static void atomisp_pci_remove(struct pci_dev *dev)
|
|||
|
||||
atomisp_acc_cleanup(isp);
|
||||
|
||||
atomisp_css_unload_firmware(isp);
|
||||
ia_css_unload_firmware();
|
||||
hmm_cleanup();
|
||||
|
||||
pm_runtime_forbid(&dev->dev);
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Medifield PNW Camera Imaging ISP subsystem.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
@ -16,17 +17,18 @@
|
|||
#define _IA_CSS_REFCOUNT_H_
|
||||
|
||||
#include <type_support.h>
|
||||
#include <system_types.h>
|
||||
#include <system_local.h>
|
||||
#include <ia_css_err.h>
|
||||
#include <ia_css_types.h>
|
||||
|
||||
typedef void (*clear_func)(hrt_vaddress ptr);
|
||||
typedef void (*clear_func)(ia_css_ptr ptr);
|
||||
|
||||
/*! \brief Function for initializing refcount list
|
||||
*
|
||||
* \param[in] size Size of the refcount list.
|
||||
* \return ia_css_err
|
||||
*/
|
||||
enum ia_css_err ia_css_refcount_init(uint32_t size);
|
||||
int ia_css_refcount_init(uint32_t size);
|
||||
|
||||
/*! \brief Function for de-initializing refcount list
|
||||
*
|
||||
|
@ -38,9 +40,9 @@ void ia_css_refcount_uninit(void);
|
|||
*
|
||||
* \param[in] id ID of the object.
|
||||
* \param[in] ptr Data of the object (ptr).
|
||||
* \return hrt_vaddress (saved address)
|
||||
* \return ia_css_ptr (saved address)
|
||||
*/
|
||||
hrt_vaddress ia_css_refcount_increment(s32 id, hrt_vaddress ptr);
|
||||
ia_css_ptr ia_css_refcount_increment(s32 id, ia_css_ptr ptr);
|
||||
|
||||
/*! \brief Function for decrease reference by 1.
|
||||
*
|
||||
|
@ -50,7 +52,7 @@ hrt_vaddress ia_css_refcount_increment(s32 id, hrt_vaddress ptr);
|
|||
* - true, if it is successful.
|
||||
* - false, otherwise.
|
||||
*/
|
||||
bool ia_css_refcount_decrement(s32 id, hrt_vaddress ptr);
|
||||
bool ia_css_refcount_decrement(s32 id, ia_css_ptr ptr);
|
||||
|
||||
/*! \brief Function to check if reference count is 1.
|
||||
*
|
||||
|
@ -59,7 +61,7 @@ bool ia_css_refcount_decrement(s32 id, hrt_vaddress ptr);
|
|||
* - true, if it is successful.
|
||||
* - false, otherwise.
|
||||
*/
|
||||
bool ia_css_refcount_is_single(hrt_vaddress ptr);
|
||||
bool ia_css_refcount_is_single(ia_css_ptr ptr);
|
||||
|
||||
/*! \brief Function to clear reference list objects.
|
||||
*
|
||||
|
@ -78,6 +80,6 @@ void ia_css_refcount_clear(s32 id,
|
|||
* - true, if valid
|
||||
* - false, if invalid
|
||||
*/
|
||||
bool ia_css_refcount_is_valid(hrt_vaddress ptr);
|
||||
bool ia_css_refcount_is_valid(ia_css_ptr ptr);
|
||||
|
||||
#endif /* _IA_CSS_REFCOUNT_H_ */
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
@ -12,8 +13,9 @@
|
|||
* more details.
|
||||
*/
|
||||
|
||||
#include "hmm.h"
|
||||
|
||||
#include "ia_css_refcount.h"
|
||||
#include "memory_access/memory_access.h"
|
||||
#include "sh_css_defs.h"
|
||||
|
||||
#include "platform_support.h"
|
||||
|
@ -23,10 +25,10 @@
|
|||
#include "ia_css_debug.h"
|
||||
|
||||
/* TODO: enable for other memory aswell
|
||||
now only for hrt_vaddress */
|
||||
now only for ia_css_ptr */
|
||||
struct ia_css_refcount_entry {
|
||||
u32 count;
|
||||
hrt_vaddress data;
|
||||
ia_css_ptr data;
|
||||
s32 id;
|
||||
};
|
||||
|
||||
|
@ -37,7 +39,7 @@ struct ia_css_refcount_list {
|
|||
|
||||
static struct ia_css_refcount_list myrefcount;
|
||||
|
||||
static struct ia_css_refcount_entry *refcount_find_entry(hrt_vaddress ptr,
|
||||
static struct ia_css_refcount_entry *refcount_find_entry(ia_css_ptr ptr,
|
||||
bool firstfree)
|
||||
{
|
||||
u32 i;
|
||||
|
@ -46,7 +48,7 @@ static struct ia_css_refcount_entry *refcount_find_entry(hrt_vaddress ptr,
|
|||
return NULL;
|
||||
if (!myrefcount.items) {
|
||||
ia_css_debug_dtrace(IA_CSS_DEBUG_ERROR,
|
||||
"refcount_find_entry(): Ref count not initiliazed!\n");
|
||||
"refcount_find_entry(): Ref count not initialized!\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -65,25 +67,25 @@ static struct ia_css_refcount_entry *refcount_find_entry(hrt_vaddress ptr,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
enum ia_css_err ia_css_refcount_init(uint32_t size)
|
||||
int ia_css_refcount_init(uint32_t size)
|
||||
{
|
||||
enum ia_css_err err = IA_CSS_SUCCESS;
|
||||
int err = 0;
|
||||
|
||||
if (size == 0) {
|
||||
ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE,
|
||||
"ia_css_refcount_init(): Size of 0 for Ref count init!\n");
|
||||
return IA_CSS_ERR_INVALID_ARGUMENTS;
|
||||
return -EINVAL;
|
||||
}
|
||||
if (myrefcount.items) {
|
||||
ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE,
|
||||
"ia_css_refcount_init(): Ref count is already initialized\n");
|
||||
return IA_CSS_ERR_INTERNAL_ERROR;
|
||||
return -EINVAL;
|
||||
}
|
||||
myrefcount.items =
|
||||
sh_css_malloc(sizeof(struct ia_css_refcount_entry) * size);
|
||||
kvmalloc(sizeof(struct ia_css_refcount_entry) * size, GFP_KERNEL);
|
||||
if (!myrefcount.items)
|
||||
err = IA_CSS_ERR_CANNOT_ALLOCATE_MEMORY;
|
||||
if (err == IA_CSS_SUCCESS) {
|
||||
err = -ENOMEM;
|
||||
if (!err) {
|
||||
memset(myrefcount.items, 0,
|
||||
sizeof(struct ia_css_refcount_entry) * size);
|
||||
myrefcount.size = size;
|
||||
|
@ -114,14 +116,14 @@ void ia_css_refcount_uninit(void)
|
|||
entry->id = 0;
|
||||
}
|
||||
}
|
||||
sh_css_free(myrefcount.items);
|
||||
kvfree(myrefcount.items);
|
||||
myrefcount.items = NULL;
|
||||
myrefcount.size = 0;
|
||||
ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE,
|
||||
"ia_css_refcount_uninit() leave\n");
|
||||
}
|
||||
|
||||
hrt_vaddress ia_css_refcount_increment(s32 id, hrt_vaddress ptr)
|
||||
ia_css_ptr ia_css_refcount_increment(s32 id, ia_css_ptr ptr)
|
||||
{
|
||||
struct ia_css_refcount_entry *entry;
|
||||
|
||||
|
@ -158,7 +160,7 @@ hrt_vaddress ia_css_refcount_increment(s32 id, hrt_vaddress ptr)
|
|||
return ptr;
|
||||
}
|
||||
|
||||
bool ia_css_refcount_decrement(s32 id, hrt_vaddress ptr)
|
||||
bool ia_css_refcount_decrement(s32 id, ia_css_ptr ptr)
|
||||
{
|
||||
struct ia_css_refcount_entry *entry;
|
||||
|
||||
|
@ -201,7 +203,7 @@ bool ia_css_refcount_decrement(s32 id, hrt_vaddress ptr)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool ia_css_refcount_is_single(hrt_vaddress ptr)
|
||||
bool ia_css_refcount_is_single(ia_css_ptr ptr)
|
||||
{
|
||||
struct ia_css_refcount_entry *entry;
|
||||
|
||||
|
@ -262,7 +264,7 @@ void ia_css_refcount_clear(s32 id, clear_func clear_func_ptr)
|
|||
count);
|
||||
}
|
||||
|
||||
bool ia_css_refcount_is_valid(hrt_vaddress ptr)
|
||||
bool ia_css_refcount_is_valid(ia_css_ptr ptr)
|
||||
{
|
||||
struct ia_css_refcount_entry *entry;
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
@ -59,10 +60,10 @@ void ia_css_pipe_get_vfpp_binarydesc(
|
|||
* (= The numerator member in the sh_css_bds_factor structure.)
|
||||
* @param[out] bds_factor_denominator: The denominator of the bayer downscaling factor.
|
||||
* (= The denominator member in the sh_css_bds_factor structure.)
|
||||
* @return IA_CSS_SUCCESS or error code upon error.
|
||||
* @return 0 or error code upon error.
|
||||
*
|
||||
*/
|
||||
enum ia_css_err sh_css_bds_factor_get_numerator_denominator(
|
||||
int sh_css_bds_factor_get_numerator_denominator(
|
||||
unsigned int bds_factor,
|
||||
unsigned int *bds_factor_numerator,
|
||||
unsigned int *bds_factor_denominator);
|
||||
|
@ -75,10 +76,10 @@ enum ia_css_err sh_css_bds_factor_get_numerator_denominator(
|
|||
* @param[in/out] bds_out_info
|
||||
* @param[in/out] out_info
|
||||
* @param[in/out] vf_info
|
||||
* @return IA_CSS_SUCCESS or error code upon error.
|
||||
* @return 0 or error code upon error.
|
||||
*
|
||||
*/
|
||||
enum ia_css_err ia_css_pipe_get_preview_binarydesc(
|
||||
int ia_css_pipe_get_preview_binarydesc(
|
||||
struct ia_css_pipe *const pipe,
|
||||
struct ia_css_binary_descr *preview_descr,
|
||||
struct ia_css_frame_info *in_info,
|
||||
|
@ -93,10 +94,10 @@ enum ia_css_err ia_css_pipe_get_preview_binarydesc(
|
|||
* @param[in/out] in_info
|
||||
* @param[in/out] bds_out_info
|
||||
* @param[in/out] vf_info
|
||||
* @return IA_CSS_SUCCESS or error code upon error.
|
||||
* @return 0 or error code upon error.
|
||||
*
|
||||
*/
|
||||
enum ia_css_err ia_css_pipe_get_video_binarydesc(
|
||||
int ia_css_pipe_get_video_binarydesc(
|
||||
struct ia_css_pipe *const pipe,
|
||||
struct ia_css_binary_descr *video_descr,
|
||||
struct ia_css_frame_info *in_info,
|
||||
|
@ -287,9 +288,9 @@ void ia_css_pipe_get_ldc_binarydesc(
|
|||
* @param[in] input_res
|
||||
* @param[in] output_res
|
||||
* @param[in/out] bds_factor
|
||||
* @return IA_CSS_SUCCESS or error code upon error.
|
||||
* @return 0 or error code upon error.
|
||||
*/
|
||||
enum ia_css_err binarydesc_calculate_bds_factor(
|
||||
int binarydesc_calculate_bds_factor(
|
||||
struct ia_css_resolution input_res,
|
||||
struct ia_css_resolution output_res,
|
||||
unsigned int *bds_factor);
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
@ -141,7 +142,7 @@ static struct sh_css_bds_factor bds_factors_list[] = {
|
|||
{8, 1, SH_CSS_BDS_FACTOR_8_00}
|
||||
};
|
||||
|
||||
enum ia_css_err sh_css_bds_factor_get_numerator_denominator(
|
||||
int sh_css_bds_factor_get_numerator_denominator(
|
||||
unsigned int bds_factor,
|
||||
unsigned int *bds_factor_numerator,
|
||||
unsigned int *bds_factor_denominator)
|
||||
|
@ -153,16 +154,16 @@ enum ia_css_err sh_css_bds_factor_get_numerator_denominator(
|
|||
if (bds_factors_list[i].bds_factor == bds_factor) {
|
||||
*bds_factor_numerator = bds_factors_list[i].numerator;
|
||||
*bds_factor_denominator = bds_factors_list[i].denominator;
|
||||
return IA_CSS_SUCCESS;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Throw an error since bds_factor cannot be found
|
||||
in bds_factors_list */
|
||||
return IA_CSS_ERR_INVALID_ARGUMENTS;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
enum ia_css_err binarydesc_calculate_bds_factor(
|
||||
int binarydesc_calculate_bds_factor(
|
||||
struct ia_css_resolution input_res,
|
||||
struct ia_css_resolution output_res,
|
||||
unsigned int *bds_factor)
|
||||
|
@ -195,15 +196,15 @@ enum ia_css_err binarydesc_calculate_bds_factor(
|
|||
|
||||
if (cond) {
|
||||
*bds_factor = bds_factors_list[i].bds_factor;
|
||||
return IA_CSS_SUCCESS;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Throw an error since a suitable bds_factor cannot be found */
|
||||
return IA_CSS_ERR_INVALID_ARGUMENTS;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
enum ia_css_err ia_css_pipe_get_preview_binarydesc(
|
||||
int ia_css_pipe_get_preview_binarydesc(
|
||||
struct ia_css_pipe *const pipe,
|
||||
struct ia_css_binary_descr *preview_descr,
|
||||
struct ia_css_frame_info *in_info,
|
||||
|
@ -211,7 +212,7 @@ enum ia_css_err ia_css_pipe_get_preview_binarydesc(
|
|||
struct ia_css_frame_info *out_info,
|
||||
struct ia_css_frame_info *vf_info)
|
||||
{
|
||||
enum ia_css_err err;
|
||||
int err;
|
||||
struct ia_css_frame_info *out_infos[IA_CSS_BINARY_MAX_OUTPUT_PORTS];
|
||||
int mode = IA_CSS_BINARY_MODE_PREVIEW;
|
||||
unsigned int i;
|
||||
|
@ -264,7 +265,7 @@ enum ia_css_err ia_css_pipe_get_preview_binarydesc(
|
|||
binarydesc_calculate_bds_factor(in_info->res,
|
||||
bds_out_info->res,
|
||||
&preview_descr->required_bds_factor);
|
||||
if (err != IA_CSS_SUCCESS)
|
||||
if (err)
|
||||
return err;
|
||||
} else {
|
||||
bds_out_info->res.width = in_info->res.width / 2;
|
||||
|
@ -318,11 +319,11 @@ enum ia_css_err ia_css_pipe_get_preview_binarydesc(
|
|||
preview_descr->enable_dpc = pipe->config.enable_dpc;
|
||||
|
||||
preview_descr->isp_pipe_version = pipe->config.isp_pipe_version;
|
||||
IA_CSS_LEAVE_ERR_PRIVATE(IA_CSS_SUCCESS);
|
||||
return IA_CSS_SUCCESS;
|
||||
IA_CSS_LEAVE_ERR_PRIVATE(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum ia_css_err ia_css_pipe_get_video_binarydesc(
|
||||
int ia_css_pipe_get_video_binarydesc(
|
||||
struct ia_css_pipe *const pipe,
|
||||
struct ia_css_binary_descr *video_descr,
|
||||
struct ia_css_frame_info *in_info,
|
||||
|
@ -334,7 +335,7 @@ enum ia_css_err ia_css_pipe_get_video_binarydesc(
|
|||
int mode = IA_CSS_BINARY_MODE_VIDEO;
|
||||
unsigned int i;
|
||||
struct ia_css_frame_info *out_infos[IA_CSS_BINARY_MAX_OUTPUT_PORTS];
|
||||
enum ia_css_err err = IA_CSS_SUCCESS;
|
||||
int err = 0;
|
||||
bool stream_dz_config = false;
|
||||
|
||||
/* vf_info can be NULL */
|
||||
|
@ -407,7 +408,7 @@ enum ia_css_err ia_css_pipe_get_video_binarydesc(
|
|||
binarydesc_calculate_bds_factor(
|
||||
in_info->res, bds_out_info->res,
|
||||
&video_descr->required_bds_factor);
|
||||
if (err != IA_CSS_SUCCESS)
|
||||
if (err)
|
||||
return err;
|
||||
} else {
|
||||
bds_out_info->res.width =
|
||||
|
@ -607,7 +608,7 @@ void ia_css_pipe_get_primary_binarydesc(
|
|||
* since it has better performance. */
|
||||
if (pipe_version == IA_CSS_PIPE_VERSION_2_6_1)
|
||||
prim_descr->striped = false;
|
||||
else if (!atomisp_hw_is_isp2401) {
|
||||
else if (!IS_ISP2401) {
|
||||
prim_descr->striped = prim_descr->continuous &&
|
||||
(!pipe->stream->stop_copy_preview || !pipe->stream->disable_cont_vf);
|
||||
} else {
|
||||
|
@ -848,7 +849,7 @@ void ia_css_pipe_get_ldc_binarydesc(
|
|||
assert(out_info);
|
||||
IA_CSS_ENTER_PRIVATE("");
|
||||
|
||||
if (!atomisp_hw_is_isp2401) {
|
||||
if (!IS_ISP2401) {
|
||||
*in_info = *out_info;
|
||||
} else {
|
||||
if (pipe->out_yuv_ds_input_info.res.width)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
@ -15,8 +16,9 @@
|
|||
#ifndef __IA_CSS_UTIL_H__
|
||||
#define __IA_CSS_UTIL_H__
|
||||
|
||||
#include <linux/errno.h>
|
||||
|
||||
#include <ia_css_err.h>
|
||||
#include <error_support.h>
|
||||
#include <type_support.h>
|
||||
#include <ia_css_frame_public.h>
|
||||
#include <ia_css_stream_public.h>
|
||||
|
@ -28,26 +30,26 @@
|
|||
* @return "ia_css_err" error code
|
||||
*
|
||||
*/
|
||||
enum ia_css_err ia_css_convert_errno(
|
||||
int ia_css_convert_errno(
|
||||
int in_err);
|
||||
|
||||
/* @brief check vf frame info.
|
||||
*
|
||||
* @param[in] info
|
||||
* @return IA_CSS_SUCCESS or error code upon error.
|
||||
* @return 0 or error code upon error.
|
||||
*
|
||||
*/
|
||||
enum ia_css_err ia_css_util_check_vf_info(
|
||||
int ia_css_util_check_vf_info(
|
||||
const struct ia_css_frame_info *const info);
|
||||
|
||||
/* @brief check input configuration.
|
||||
*
|
||||
* @param[in] stream_config
|
||||
* @param[in] must_be_raw
|
||||
* @return IA_CSS_SUCCESS or error code upon error.
|
||||
* @return 0 or error code upon error.
|
||||
*
|
||||
*/
|
||||
enum ia_css_err ia_css_util_check_input(
|
||||
int ia_css_util_check_input(
|
||||
const struct ia_css_stream_config *const stream_config,
|
||||
bool must_be_raw,
|
||||
bool must_be_yuv);
|
||||
|
@ -56,10 +58,10 @@ enum ia_css_err ia_css_util_check_input(
|
|||
*
|
||||
* @param[in] out_info
|
||||
* @param[in] vf_info
|
||||
* @return IA_CSS_SUCCESS or error code upon error.
|
||||
* @return 0 or error code upon error.
|
||||
*
|
||||
*/
|
||||
enum ia_css_err ia_css_util_check_vf_out_info(
|
||||
int ia_css_util_check_vf_out_info(
|
||||
const struct ia_css_frame_info *const out_info,
|
||||
const struct ia_css_frame_info *const vf_info);
|
||||
|
||||
|
@ -67,10 +69,10 @@ enum ia_css_err ia_css_util_check_vf_out_info(
|
|||
*
|
||||
* @param[in] width
|
||||
* @param[in] height
|
||||
* @return IA_CSS_SUCCESS or error code upon error.
|
||||
* @return 0 or error code upon error.
|
||||
*
|
||||
*/
|
||||
enum ia_css_err ia_css_util_check_res(
|
||||
int ia_css_util_check_res(
|
||||
unsigned int width,
|
||||
unsigned int height);
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
@ -20,35 +21,6 @@
|
|||
/* for ia_css_binary_max_vf_width() */
|
||||
#include "ia_css_binary.h"
|
||||
|
||||
enum ia_css_err ia_css_convert_errno(
|
||||
int in_err)
|
||||
{
|
||||
enum ia_css_err out_err;
|
||||
|
||||
switch (in_err) {
|
||||
case 0:
|
||||
out_err = IA_CSS_SUCCESS;
|
||||
break;
|
||||
case EINVAL:
|
||||
out_err = IA_CSS_ERR_INVALID_ARGUMENTS;
|
||||
break;
|
||||
case ENODATA:
|
||||
out_err = IA_CSS_ERR_QUEUE_IS_EMPTY;
|
||||
break;
|
||||
case ENOSYS:
|
||||
case ENOTSUP:
|
||||
out_err = IA_CSS_ERR_INTERNAL_ERROR;
|
||||
break;
|
||||
case ENOBUFS:
|
||||
out_err = IA_CSS_ERR_QUEUE_IS_FULL;
|
||||
break;
|
||||
default:
|
||||
out_err = IA_CSS_ERR_INTERNAL_ERROR;
|
||||
break;
|
||||
}
|
||||
return out_err;
|
||||
}
|
||||
|
||||
/* MW: Table look-up ??? */
|
||||
unsigned int ia_css_util_input_format_bpp(
|
||||
enum atomisp_input_format format,
|
||||
|
@ -113,49 +85,49 @@ unsigned int ia_css_util_input_format_bpp(
|
|||
return rval;
|
||||
}
|
||||
|
||||
enum ia_css_err ia_css_util_check_vf_info(
|
||||
int ia_css_util_check_vf_info(
|
||||
const struct ia_css_frame_info *const info)
|
||||
{
|
||||
enum ia_css_err err;
|
||||
int err;
|
||||
unsigned int max_vf_width;
|
||||
|
||||
assert(info);
|
||||
err = ia_css_frame_check_info(info);
|
||||
if (err != IA_CSS_SUCCESS)
|
||||
if (err)
|
||||
return err;
|
||||
max_vf_width = ia_css_binary_max_vf_width();
|
||||
if (max_vf_width != 0 && info->res.width > max_vf_width * 2)
|
||||
return IA_CSS_ERR_INVALID_ARGUMENTS;
|
||||
return IA_CSS_SUCCESS;
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum ia_css_err ia_css_util_check_vf_out_info(
|
||||
int ia_css_util_check_vf_out_info(
|
||||
const struct ia_css_frame_info *const out_info,
|
||||
const struct ia_css_frame_info *const vf_info)
|
||||
{
|
||||
enum ia_css_err err;
|
||||
int err;
|
||||
|
||||
assert(out_info);
|
||||
assert(vf_info);
|
||||
|
||||
err = ia_css_frame_check_info(out_info);
|
||||
if (err != IA_CSS_SUCCESS)
|
||||
if (err)
|
||||
return err;
|
||||
err = ia_css_util_check_vf_info(vf_info);
|
||||
if (err != IA_CSS_SUCCESS)
|
||||
if (err)
|
||||
return err;
|
||||
return IA_CSS_SUCCESS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum ia_css_err ia_css_util_check_res(unsigned int width, unsigned int height)
|
||||
int ia_css_util_check_res(unsigned int width, unsigned int height)
|
||||
{
|
||||
/* height can be odd number for jpeg/embedded data from ISYS2401 */
|
||||
if (((width == 0) ||
|
||||
(height == 0) ||
|
||||
IS_ODD(width))) {
|
||||
return IA_CSS_ERR_INVALID_ARGUMENTS;
|
||||
return -EINVAL;
|
||||
}
|
||||
return IA_CSS_SUCCESS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ISP2401 */
|
||||
|
@ -200,7 +172,7 @@ bool ia_css_util_is_input_format_yuv(enum atomisp_input_format format)
|
|||
format == ATOMISP_INPUT_FORMAT_YUV422_16;
|
||||
}
|
||||
|
||||
enum ia_css_err ia_css_util_check_input(
|
||||
int ia_css_util_check_input(
|
||||
const struct ia_css_stream_config *const stream_config,
|
||||
bool must_be_raw,
|
||||
bool must_be_yuv)
|
||||
|
@ -208,18 +180,18 @@ enum ia_css_err ia_css_util_check_input(
|
|||
assert(stream_config);
|
||||
|
||||
if (!stream_config)
|
||||
return IA_CSS_ERR_INVALID_ARGUMENTS;
|
||||
return -EINVAL;
|
||||
|
||||
if (stream_config->input_config.effective_res.width == 0 ||
|
||||
stream_config->input_config.effective_res.height == 0)
|
||||
return IA_CSS_ERR_INVALID_ARGUMENTS;
|
||||
return -EINVAL;
|
||||
if (must_be_raw &&
|
||||
!ia_css_util_is_input_format_raw(stream_config->input_config.format))
|
||||
return IA_CSS_ERR_INVALID_ARGUMENTS;
|
||||
return -EINVAL;
|
||||
|
||||
if (must_be_yuv &&
|
||||
!ia_css_util_is_input_format_yuv(stream_config->input_config.format))
|
||||
return IA_CSS_ERR_INVALID_ARGUMENTS;
|
||||
return -EINVAL;
|
||||
|
||||
return IA_CSS_SUCCESS;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
@ -210,7 +211,7 @@ ia_css_initialize_ynr_state(
|
|||
|
||||
/* Code generated by genparam/genstate.c:gen_state_init_table() */
|
||||
|
||||
void (* ia_css_kernel_init_state[IA_CSS_NUM_STATE_IDS])(
|
||||
void (*ia_css_kernel_init_state[IA_CSS_NUM_STATE_IDS])(
|
||||
const struct ia_css_binary *binary) = {
|
||||
ia_css_initialize_aa_state,
|
||||
ia_css_initialize_cnr_state,
|
||||
|
|
|
@ -1,228 +0,0 @@
|
|||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*/
|
||||
|
||||
/* Version */
|
||||
#define RTL_VERSION
|
||||
|
||||
/* Cell name */
|
||||
#define ISP_CELL_TYPE isp2400_mamoiada
|
||||
#define ISP_VMEM simd_vmem
|
||||
#define _HRT_ISP_VMEM isp2400_mamoiada_simd_vmem
|
||||
|
||||
/* instruction pipeline depth */
|
||||
#define ISP_BRANCHDELAY 5
|
||||
|
||||
/* bus */
|
||||
#define ISP_BUS_WIDTH 32
|
||||
#define ISP_BUS_ADDR_WIDTH 32
|
||||
#define ISP_BUS_BURST_SIZE 1
|
||||
|
||||
/* data-path */
|
||||
#define ISP_SCALAR_WIDTH 32
|
||||
#define ISP_SLICE_NELEMS 4
|
||||
#define ISP_VEC_NELEMS 64
|
||||
#define ISP_VEC_ELEMBITS 14
|
||||
#define ISP_VEC_ELEM8BITS 16
|
||||
#define ISP_CLONE_DATAPATH_IS_16 1
|
||||
|
||||
/* memories */
|
||||
#define ISP_DMEM_DEPTH 4096
|
||||
#define ISP_DMEM_BSEL_DOWNSAMPLE 8
|
||||
#define ISP_VMEM_DEPTH 3072
|
||||
#define ISP_VMEM_BSEL_DOWNSAMPLE 8
|
||||
#define ISP_VMEM_ELEMBITS 14
|
||||
#define ISP_VMEM_ELEM_PRECISION 14
|
||||
#define ISP_PMEM_DEPTH 2048
|
||||
#define ISP_PMEM_WIDTH 640
|
||||
#define ISP_VAMEM_ADDRESS_BITS 12
|
||||
#define ISP_VAMEM_ELEMBITS 12
|
||||
#define ISP_VAMEM_DEPTH 2048
|
||||
#define ISP_VAMEM_ALIGNMENT 2
|
||||
#define ISP_VA_ADDRESS_WIDTH 896
|
||||
#define ISP_VEC_VALSU_LATENCY ISP_VEC_NELEMS
|
||||
#define ISP_HIST_ADDRESS_BITS 12
|
||||
#define ISP_HIST_ALIGNMENT 4
|
||||
#define ISP_HIST_COMP_IN_PREC 12
|
||||
#define ISP_HIST_DEPTH 1024
|
||||
#define ISP_HIST_WIDTH 24
|
||||
#define ISP_HIST_COMPONENTS 4
|
||||
|
||||
/* program counter */
|
||||
#define ISP_PC_WIDTH 13
|
||||
|
||||
/* Template switches */
|
||||
#define ISP_SHIELD_INPUT_DMEM 0
|
||||
#define ISP_SHIELD_OUTPUT_DMEM 1
|
||||
#define ISP_SHIELD_INPUT_VMEM 0
|
||||
#define ISP_SHIELD_OUTPUT_VMEM 0
|
||||
#define ISP_SHIELD_INPUT_PMEM 1
|
||||
#define ISP_SHIELD_OUTPUT_PMEM 1
|
||||
#define ISP_SHIELD_INPUT_HIST 1
|
||||
#define ISP_SHIELD_OUTPUT_HIST 1
|
||||
/* When LUT is select the shielding is always on */
|
||||
#define ISP_SHIELD_INPUT_VAMEM 1
|
||||
#define ISP_SHIELD_OUTPUT_VAMEM 1
|
||||
|
||||
#define ISP_HAS_IRQ 1
|
||||
#define ISP_HAS_SOFT_RESET 1
|
||||
#define ISP_HAS_VEC_DIV 0
|
||||
#define ISP_HAS_VFU_W_2O 1
|
||||
#define ISP_HAS_DEINT3 1
|
||||
#define ISP_HAS_LUT 1
|
||||
#define ISP_HAS_HIST 1
|
||||
#define ISP_HAS_VALSU 1
|
||||
#define ISP_HAS_3rdVALSU 1
|
||||
#define ISP_VRF1_HAS_2P 1
|
||||
|
||||
#define ISP_SRU_GUARDING 1
|
||||
#define ISP_VLSU_GUARDING 1
|
||||
|
||||
#define ISP_VRF_RAM 1
|
||||
#define ISP_SRF_RAM 1
|
||||
|
||||
#define ISP_SPLIT_VMUL_VADD_IS 0
|
||||
#define ISP_RFSPLIT_FPGA 0
|
||||
|
||||
/* RSN or Bus pipelining */
|
||||
#define ISP_RSN_PIPE 1
|
||||
#define ISP_VSF_BUS_PIPE 0
|
||||
|
||||
/* extra slave port to vmem */
|
||||
#define ISP_IF_VMEM 0
|
||||
#define ISP_GDC_VMEM 0
|
||||
|
||||
/* Streaming ports */
|
||||
#define ISP_IF 1
|
||||
#define ISP_IF_B 1
|
||||
#define ISP_GDC 1
|
||||
#define ISP_SCL 1
|
||||
#define ISP_GPFIFO 1
|
||||
#define ISP_SP 1
|
||||
|
||||
/* Removing Issue Slot(s) */
|
||||
#define ISP_HAS_NOT_SIMD_IS2 0
|
||||
#define ISP_HAS_NOT_SIMD_IS3 0
|
||||
#define ISP_HAS_NOT_SIMD_IS4 0
|
||||
#define ISP_HAS_NOT_SIMD_IS4_VADD 0
|
||||
#define ISP_HAS_NOT_SIMD_IS5 0
|
||||
#define ISP_HAS_NOT_SIMD_IS6 0
|
||||
#define ISP_HAS_NOT_SIMD_IS7 0
|
||||
#define ISP_HAS_NOT_SIMD_IS8 0
|
||||
|
||||
/* ICache */
|
||||
#define ISP_ICACHE 1
|
||||
#define ISP_ICACHE_ONLY 0
|
||||
#define ISP_ICACHE_PREFETCH 1
|
||||
#define ISP_ICACHE_INDEX_BITS 8
|
||||
#define ISP_ICACHE_SET_BITS 5
|
||||
#define ISP_ICACHE_BLOCKS_PER_SET_BITS 1
|
||||
|
||||
/* Experimental Flags */
|
||||
#define ISP_EXP_1 0
|
||||
#define ISP_EXP_2 0
|
||||
#define ISP_EXP_3 0
|
||||
#define ISP_EXP_4 0
|
||||
#define ISP_EXP_5 0
|
||||
#define ISP_EXP_6 0
|
||||
|
||||
/* Derived values */
|
||||
#define ISP_LOG2_PMEM_WIDTH 10
|
||||
#define ISP_VEC_WIDTH 896
|
||||
#define ISP_SLICE_WIDTH 56
|
||||
#define ISP_VMEM_WIDTH 896
|
||||
#define ISP_VMEM_ALIGN 128
|
||||
#define ISP_SIMDLSU 1
|
||||
#define ISP_LSU_IMM_BITS 12
|
||||
|
||||
/* convenient shortcuts for software*/
|
||||
#define ISP_NWAY ISP_VEC_NELEMS
|
||||
#define NBITS ISP_VEC_ELEMBITS
|
||||
|
||||
#define _isp_ceil_div(a, b) (((a) + (b) - 1) / (b))
|
||||
|
||||
#define ISP_VEC_ALIGN ISP_VMEM_ALIGN
|
||||
|
||||
/* HRT specific vector support */
|
||||
#define isp2400_mamoiada_vector_alignment ISP_VEC_ALIGN
|
||||
#define isp2400_mamoiada_vector_elem_bits ISP_VMEM_ELEMBITS
|
||||
#define isp2400_mamoiada_vector_elem_precision ISP_VMEM_ELEM_PRECISION
|
||||
#define isp2400_mamoiada_vector_num_elems ISP_VEC_NELEMS
|
||||
|
||||
/* register file sizes */
|
||||
#define ISP_RF0_SIZE 64
|
||||
#define ISP_RF1_SIZE 16
|
||||
#define ISP_RF2_SIZE 64
|
||||
#define ISP_RF3_SIZE 4
|
||||
#define ISP_RF4_SIZE 64
|
||||
#define ISP_RF5_SIZE 16
|
||||
#define ISP_RF6_SIZE 16
|
||||
#define ISP_RF7_SIZE 16
|
||||
#define ISP_RF8_SIZE 16
|
||||
#define ISP_RF9_SIZE 16
|
||||
#define ISP_RF10_SIZE 16
|
||||
#define ISP_RF11_SIZE 16
|
||||
#define ISP_VRF1_SIZE 24
|
||||
#define ISP_VRF2_SIZE 24
|
||||
#define ISP_VRF3_SIZE 24
|
||||
#define ISP_VRF4_SIZE 24
|
||||
#define ISP_VRF5_SIZE 24
|
||||
#define ISP_VRF6_SIZE 24
|
||||
#define ISP_VRF7_SIZE 24
|
||||
#define ISP_VRF8_SIZE 24
|
||||
#define ISP_SRF1_SIZE 4
|
||||
#define ISP_SRF2_SIZE 64
|
||||
#define ISP_SRF3_SIZE 64
|
||||
#define ISP_SRF4_SIZE 32
|
||||
#define ISP_SRF5_SIZE 64
|
||||
#define ISP_FRF0_SIZE 16
|
||||
#define ISP_FRF1_SIZE 4
|
||||
#define ISP_FRF2_SIZE 16
|
||||
#define ISP_FRF3_SIZE 4
|
||||
#define ISP_FRF4_SIZE 4
|
||||
#define ISP_FRF5_SIZE 8
|
||||
#define ISP_FRF6_SIZE 4
|
||||
/* register file read latency */
|
||||
#define ISP_VRF1_READ_LAT 1
|
||||
#define ISP_VRF2_READ_LAT 1
|
||||
#define ISP_VRF3_READ_LAT 1
|
||||
#define ISP_VRF4_READ_LAT 1
|
||||
#define ISP_VRF5_READ_LAT 1
|
||||
#define ISP_VRF6_READ_LAT 1
|
||||
#define ISP_VRF7_READ_LAT 1
|
||||
#define ISP_VRF8_READ_LAT 1
|
||||
#define ISP_SRF1_READ_LAT 1
|
||||
#define ISP_SRF2_READ_LAT 1
|
||||
#define ISP_SRF3_READ_LAT 1
|
||||
#define ISP_SRF4_READ_LAT 1
|
||||
#define ISP_SRF5_READ_LAT 1
|
||||
#define ISP_SRF5_READ_LAT 1
|
||||
/* immediate sizes */
|
||||
#define ISP_IS1_IMM_BITS 14
|
||||
#define ISP_IS2_IMM_BITS 13
|
||||
#define ISP_IS3_IMM_BITS 14
|
||||
#define ISP_IS4_IMM_BITS 14
|
||||
#define ISP_IS5_IMM_BITS 9
|
||||
#define ISP_IS6_IMM_BITS 16
|
||||
#define ISP_IS7_IMM_BITS 9
|
||||
#define ISP_IS8_IMM_BITS 16
|
||||
#define ISP_IS9_IMM_BITS 11
|
||||
/* fifo depths */
|
||||
#define ISP_IF_FIFO_DEPTH 0
|
||||
#define ISP_IF_B_FIFO_DEPTH 0
|
||||
#define ISP_DMA_FIFO_DEPTH 0
|
||||
#define ISP_OF_FIFO_DEPTH 0
|
||||
#define ISP_GDC_FIFO_DEPTH 0
|
||||
#define ISP_SCL_FIFO_DEPTH 0
|
||||
#define ISP_GPFIFO_FIFO_DEPTH 0
|
||||
#define ISP_SP_FIFO_DEPTH 0
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
@ -272,7 +273,6 @@ ia_css_configure_output(
|
|||
"ia_css_configure_output() leave:\n");
|
||||
}
|
||||
|
||||
|
||||
/* Code generated by genparam/genconfig.c:gen_configure_function() */
|
||||
|
||||
void
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
@ -210,7 +211,7 @@ ia_css_initialize_ynr_state(
|
|||
|
||||
/* Code generated by genparam/genstate.c:gen_state_init_table() */
|
||||
|
||||
void (* ia_css_kernel_init_state[IA_CSS_NUM_STATE_IDS])(
|
||||
void (*ia_css_kernel_init_state[IA_CSS_NUM_STATE_IDS])(
|
||||
const struct ia_css_binary *binary) = {
|
||||
ia_css_initialize_aa_state,
|
||||
ia_css_initialize_cnr_state,
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
@ -289,12 +290,12 @@ static inline void csi_rx_be_ctrl_dump_state(
|
|||
* lut.
|
||||
*/
|
||||
for (i = 0; i < N_SHORT_PACKET_LUT_ENTRIES[ID]; i++) {
|
||||
ia_css_print("CSI RX BE STATE Controller ID %d Short packat entry %d shart packet lut id 0x%x\n",
|
||||
ia_css_print("CSI RX BE STATE Controller ID %d Short packet entry %d short packet lut id 0x%x\n",
|
||||
ID, i,
|
||||
state->short_packet_lut_entry[i]);
|
||||
}
|
||||
for (i = 0; i < N_LONG_PACKET_LUT_ENTRIES[ID]; i++) {
|
||||
ia_css_print("CSI RX BE STATE Controller ID %d Long packat entry %d Long packet lut id 0x%x\n",
|
||||
ia_css_print("CSI RX BE STATE Controller ID %d Long packet entry %d long packet lut id 0x%x\n",
|
||||
ID, i,
|
||||
state->long_packet_lut_entry[i]);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Support for Intel Camera Imaging ISP subsystem.
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue