drivers/staging/media/atomisp/pci/isp/kernels/xnr/xnr_3.0/ia_css_xnr3.host.c
Source file repositories/reference/linux-study-clean/drivers/staging/media/atomisp/pci/isp/kernels/xnr/xnr_3.0/ia_css_xnr3.host.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/staging/media/atomisp/pci/isp/kernels/xnr/xnr_3.0/ia_css_xnr3.host.c- Extension
.c- Size
- 6924 bytes
- Lines
- 241
- Domain
- Driver Families
- Bucket
- drivers/staging
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/log2.htype_support.hmath_support.hsh_css_defs.hia_css_types.hassert_support.hia_css_xnr3.host.h
Detected Declarations
function compute_alphafunction compute_coringfunction compute_blendingfunction ia_css_xnr3_encodefunction ia_css_xnr3_vmem_encodefunction ia_css_xnr3_debug_dtrace
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0
/*
* Support for Intel Camera Imaging ISP subsystem.
* Copyright (c) 2015, Intel Corporation.
*/
#include <linux/log2.h>
#include "type_support.h"
#include "math_support.h"
#include "sh_css_defs.h"
#include "ia_css_types.h"
#include "assert_support.h"
#include "ia_css_xnr3.host.h"
/* Maximum value for alpha on ISP interface */
#define XNR_MAX_ALPHA ((1 << (ISP_VEC_ELEMBITS - 1)) - 1)
/* Minimum value for sigma on host interface. Lower values translate to
* max_alpha.
*/
#define XNR_MIN_SIGMA (IA_CSS_XNR3_SIGMA_SCALE / 100)
/*
* division look-up table
* Refers to XNR3.0.5
*/
#define XNR3_LOOK_UP_TABLE_POINTS 16
static const s16 x[XNR3_LOOK_UP_TABLE_POINTS] = {
1024, 1164, 1320, 1492, 1680, 1884, 2108, 2352,
2616, 2900, 3208, 3540, 3896, 4276, 4684, 5120
};
static const s16 a[XNR3_LOOK_UP_TABLE_POINTS] = {
-7213, -5580, -4371, -3421, -2722, -2159, -6950, -5585,
-4529, -3697, -3010, -2485, -2070, -1727, -1428, 0
};
static const s16 b[XNR3_LOOK_UP_TABLE_POINTS] = {
4096, 3603, 3178, 2811, 2497, 2226, 1990, 1783,
1603, 1446, 1307, 1185, 1077, 981, 895, 819
};
static const s16 c[XNR3_LOOK_UP_TABLE_POINTS] = {
1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
/*
* Default kernel parameters. In general, default is bypass mode or as close
* to the ineffective values as possible. Due to the chroma down+upsampling,
* perfect bypass mode is not possible for xnr3 filter itself. Instead, the
* 'blending' parameter is used to create a bypass.
*/
const struct ia_css_xnr3_config default_xnr3_config = {
/* sigma */
{ 0, 0, 0, 0, 0, 0 },
/* coring */
{ 0, 0, 0, 0 },
/* blending */
{ 0 }
};
/*
* Compute an alpha value for the ISP kernel from sigma value on the host
* parameter interface as: alpha_scale * 1/(sigma/sigma_scale)
*/
static int32_t
compute_alpha(int sigma)
{
s32 alpha;
int offset = sigma / 2;
if (sigma < XNR_MIN_SIGMA) {
alpha = XNR_MAX_ALPHA;
} else {
alpha = ((IA_CSS_XNR3_SIGMA_SCALE * XNR_ALPHA_SCALE_FACTOR) + offset) / sigma;
if (alpha > XNR_MAX_ALPHA)
alpha = XNR_MAX_ALPHA;
}
return alpha;
}
/*
* Compute the scaled coring value for the ISP kernel from the value on the
* host parameter interface.
*/
static int32_t
Annotation
- Immediate include surface: `linux/log2.h`, `type_support.h`, `math_support.h`, `sh_css_defs.h`, `ia_css_types.h`, `assert_support.h`, `ia_css_xnr3.host.h`.
- Detected declarations: `function compute_alpha`, `function compute_coring`, `function compute_blending`, `function ia_css_xnr3_encode`, `function ia_css_xnr3_vmem_encode`, `function ia_css_xnr3_debug_dtrace`.
- Atlas domain: Driver Families / drivers/staging.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.