drivers/hid/hid-uclogic-params.c
Source file repositories/reference/linux-study-clean/drivers/hid/hid-uclogic-params.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/hid/hid-uclogic-params.c- Extension
.c- Size
- 57979 bytes
- Lines
- 2025
- Domain
- Driver Families
- Bucket
- drivers/hid
- 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.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
hid-uclogic-params.hhid-uclogic-rdesc.husbhid/usbhid.hhid-ids.hlinux/ctype.hlinux/string.hlinux/unaligned.hlinux/string_choices.hhid-uclogic-params-test.c
Detected Declarations
function uclogic_params_pen_inrange_to_strfunction uclogic_params_pen_hid_dbgfunction uclogic_params_frame_hid_dbgfunction uclogic_params_hid_dbgfunction retrievedfunction uclogic_params_penfunction uclogic_params_pen_init_v1function uclogic_params_get_le24function uclogic_params_pen_init_v2function uclogic_params_framefunction uclogic_params_frame_init_with_descfunction uclogic_params_frame_init_v1function uclogic_params_cleanup_event_hooksfunction list_for_each_entry_safefunction uclogic_params_cleanupfunction uclogic_params_get_descfunction uclogic_params_init_invalidfunction uclogic_params_init_with_opt_descfunction uclogic_params_huion_initfunction uclogic_probe_interfacefunction uclogic_params_parse_ugee_v2_descfunction uclogic_params_ugee_v2_init_frame_buttonsfunction uclogic_params_ugee_v2_init_frame_dialfunction uclogic_params_ugee_v2_init_frame_mousefunction uclogic_params_ugee_v2_has_batteryfunction uclogic_params_ugee_v2_init_batteryfunction uclogic_params_ugee_v2_reconnect_workfunction uclogic_params_ugee_v2_init_event_hooksfunction uclogic_params_ugee_v2_initfunction uclogic_params_init_ugee_xppen_profunction uclogic_params_initfunction VID_PIDfunction VID_PIDfunction VID_PIDfunction VID_PIDfunction VID_PIDfunction VID_PIDfunction VID_PID
Annotated Snippet
if ((_desc_ptr) == NULL) { \
break; \
} \
new_size = size + (_desc_size); \
new_desc = krealloc(desc, new_size, GFP_KERNEL); \
if (new_desc == NULL) { \
goto cleanup; \
} \
memcpy(new_desc + size, (_desc_ptr), (_desc_size)); \
desc = new_desc; \
size = new_size; \
present = true; \
} while (0)
ADD_DESC(params->desc_ptr, params->desc_size);
ADD_DESC(params->pen.desc_ptr, params->pen.desc_size);
for (i = 0; i < ARRAY_SIZE(params->frame_list); i++) {
ADD_DESC(params->frame_list[i].desc_ptr,
params->frame_list[i].desc_size);
}
#undef ADD_DESC
if (present) {
*pdesc = desc;
*psize = size;
desc = NULL;
}
rc = 0;
cleanup:
kfree(desc);
return rc;
}
/**
* uclogic_params_init_invalid() - initialize tablet interface parameters,
* specifying the interface is invalid.
*
* @params: Parameters to initialize (to be cleaned with
* uclogic_params_cleanup()). Cannot be NULL.
*/
static void uclogic_params_init_invalid(struct uclogic_params *params)
{
params->invalid = true;
}
/**
* uclogic_params_init_with_opt_desc() - initialize tablet interface
* parameters with an optional replacement report descriptor. Only modify
* report descriptor, if the original report descriptor matches the expected
* size.
*
* @params: Parameters to initialize (to be cleaned with
* uclogic_params_cleanup()). Not modified in case of
* error. Cannot be NULL.
* @hdev: The HID device of the tablet interface create the
* parameters for. Cannot be NULL.
* @orig_desc_size: Expected size of the original report descriptor to
* be replaced.
* @desc_ptr: Pointer to the replacement report descriptor.
* Can be NULL, if desc_size is zero.
* @desc_size: Size of the replacement report descriptor.
*
* Returns:
* Zero, if successful. -EINVAL if an invalid argument was passed.
* -ENOMEM, if failed to allocate memory.
*/
static int uclogic_params_init_with_opt_desc(struct uclogic_params *params,
struct hid_device *hdev,
unsigned int orig_desc_size,
const __u8 *desc_ptr,
unsigned int desc_size)
{
__u8 *desc_copy_ptr = NULL;
unsigned int desc_copy_size;
int rc;
/* Check arguments */
if (params == NULL || hdev == NULL ||
(desc_ptr == NULL && desc_size != 0)) {
rc = -EINVAL;
goto cleanup;
}
/* Replace report descriptor, if it matches */
if (hdev->dev_rsize == orig_desc_size) {
hid_dbg(hdev,
"device report descriptor matches the expected size, replacing\n");
desc_copy_ptr = kmemdup(desc_ptr, desc_size, GFP_KERNEL);
if (desc_copy_ptr == NULL) {
Annotation
- Immediate include surface: `hid-uclogic-params.h`, `hid-uclogic-rdesc.h`, `usbhid/usbhid.h`, `hid-ids.h`, `linux/ctype.h`, `linux/string.h`, `linux/unaligned.h`, `linux/string_choices.h`.
- Detected declarations: `function uclogic_params_pen_inrange_to_str`, `function uclogic_params_pen_hid_dbg`, `function uclogic_params_frame_hid_dbg`, `function uclogic_params_hid_dbg`, `function retrieved`, `function uclogic_params_pen`, `function uclogic_params_pen_init_v1`, `function uclogic_params_get_le24`, `function uclogic_params_pen_init_v2`, `function uclogic_params_frame`.
- Atlas domain: Driver Families / drivers/hid.
- 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.