8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * CDDL HEADER START
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * The contents of this file are subject to the terms of the
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * Common Development and Distribution License, Version 1.0 only
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * (the "License"). You may not use this file except in compliance
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * with the License.
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * or http://www.opensolaris.org/os/licensing.
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * See the License for the specific language governing permissions
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * and limitations under the License.
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * When distributing Covered Code, include this CDDL HEADER in each
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * If applicable, add the following below this CDDL HEADER, with the
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * fields enclosed by brackets "[]" replaced with your own identifying
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * information: Portions Copyright [yyyy] [name of copyright owner]
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * CDDL HEADER END
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * Use is subject to license terms.
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap#pragma ident "%Z%%M% %I% %E% SMI"
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * dcam_param.c
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * dcam1394 driver. Device parameter access.
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap#include <sys/1394/targets/dcam1394/dcam.h>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap#include <sys/1394/targets/dcam1394/dcam_param.h>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap#include <sys/1394/targets/dcam1394/dcam_reg.h>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap#include <sys/tnf_probe.h>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/* index by vid_mode */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint g_frame_num_bytes[] = {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap 57600, /* vid mode 0 */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap 153600, /* vid mode 1 */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap 460800, /* vid mode 2 */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap 614400, /* vid mode 3 */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap 921600, /* vid mode 4 */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap 307200 /* vid mode 5 */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap};
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499apstatic uint_t feature_csr_val_construct(uint_t subparam, uint_t param_val,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t init_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499apstatic uint_t feature_csr_val_subparam_extract(uint_t subparam,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499apstatic uint_t feature_elm_inq_reg_val_subparam_extract(uint_t subparam,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t reg_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_attr_init
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_attr_init(dcam_state_t *softc_p, dcam1394_param_attr_t param_attr)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int err, ret_err;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t attr_bmap, cap_on_off, cap_power_ctrl, cap_read;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t param, presence, subparam;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap bzero(param_attr, sizeof (dcam1394_param_attr_t));
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_err = DDI_SUCCESS;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * power ctrl cap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param = DCAM1394_PARAM_CAP_POWER_CTRL;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_NONE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param, subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * video mode cap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param = DCAM1394_PARAM_CAP_VID_MODE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap for (subparam = DCAM1394_SUBPARAM_VID_MODE_0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam <= DCAM1394_SUBPARAM_VID_MODE_5; subparam++) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param, subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * frame rate cap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap for (param = DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param <= DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_5; param++) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap for (subparam = DCAM1394_SUBPARAM_FRAME_RATE_0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam <= DCAM1394_SUBPARAM_FRAME_RATE_4; subparam++) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param, subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * power
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param = DCAM1394_PARAM_POWER;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_NONE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = dcam1394_param_get(softc_p, DCAM1394_PARAM_CAP_POWER_CTRL,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SUBPARAM_NONE, &cap_power_ctrl);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (cap_power_ctrl) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap |= CAP_SET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param, subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * video mode
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param = DCAM1394_PARAM_VID_MODE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_NONE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET | CAP_SET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param, subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * frame rate
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param = DCAM1394_PARAM_FRAME_RATE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_NONE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET | CAP_SET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param, subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * ring buffer capacity
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param = DCAM1394_PARAM_RING_BUFF_CAPACITY;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_NONE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET | CAP_SET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param, subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * ring buffer: num frames ready
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param = DCAM1394_PARAM_RING_BUFF_NUM_FRAMES_READY;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_NONE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param, subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * ring buffer: read ptr increment stride
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param = DCAM1394_PARAM_RING_BUFF_READ_PTR_INCR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_NONE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET | CAP_SET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param, subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * frame size
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param = DCAM1394_PARAM_FRAME_NUM_BYTES;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_NONE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param, subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * cam status
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param = DCAM1394_PARAM_STATUS;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_NONE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param, subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * features
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap for (param = DCAM1394_PARAM_BRIGHTNESS; param <= DCAM1394_PARAM_TILT;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param++) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * get feature presence
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * If the operation to read the parameter fails, then act as
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * though the feature is not implemented (because it isn't),
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * don't report a DDI failure (as was previously done).
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = dcam1394_param_get(softc_p, param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SUBPARAM_PRESENCE, &presence);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (!err) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* feature presence */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_PRESENCE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param, subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (presence) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* feature cap read */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_CAP_READ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* feature cap on/off */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_CAP_ON_OFF;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* feature cap ctrl auto */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_CAP_CTRL_AUTO;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* feature cap ctrl manual */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_CAP_CTRL_MANUAL;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* feature min val */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_MIN_VAL;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* feature max val */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_MAX_VAL;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* feature on/off */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_ON_OFF;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = dcam1394_param_get(softc_p, param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SUBPARAM_CAP_ON_OFF, &cap_on_off);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (cap_on_off) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap |= (CAP_SET | CAP_CTRL_SET);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* feature control mode */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_CTRL_MODE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT | CAP_GET |
8eea8e29cc4374d1ee24c25a07f45af132db3499ap CAP_SET | CAP_CTRL_SET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* get value read-out capability */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = dcam1394_param_get(softc_p, param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SUBPARAM_CAP_READ,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap &cap_read);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (param == DCAM1394_PARAM_WHITE_BALANCE) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * white balance feature: u, v value
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_U_VALUE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT |
8eea8e29cc4374d1ee24c25a07f45af132db3499ap CAP_SET | CAP_CTRL_SET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (cap_read) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap |= CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_V_VALUE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT |
8eea8e29cc4374d1ee24c25a07f45af132db3499ap CAP_SET | CAP_CTRL_SET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (cap_read) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap |= CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap } else {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* feature value */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam = DCAM1394_SUBPARAM_VALUE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap = IS_VALID | IS_PRESENT |
8eea8e29cc4374d1ee24c25a07f45af132db3499ap CAP_SET | CAP_CTRL_SET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (cap_read) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap attr_bmap |= CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr_set(param_attr, param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam, attr_bmap);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_err);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_attr_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apvoid
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_attr_set(dcam1394_param_attr_t param_attr, uint_t param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t subparam, uint_t attr_bmap)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_attr[param][subparam] = attr_bmap;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * dcam1394_ioctl_param_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * softc's param_attr field must be initialized via param_attr_init()
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * before using this function.
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apdcam1394_ioctl_param_get(dcam_state_t *softc_p,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap dcam1394_param_list_t param_list)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int err, ret_err;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int param, subparam;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t cap_get, is_present, is_valid, val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_err = 0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap for (param = 0; param < DCAM1394_NUM_PARAM; param++) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap for (subparam = 0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam < DCAM1394_NUM_SUBPARAM;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam++) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (param_list[param][subparam].flag) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap is_valid =
8eea8e29cc4374d1ee24c25a07f45af132db3499ap softc_p->param_attr[param][subparam] &
8eea8e29cc4374d1ee24c25a07f45af132db3499ap IS_VALID;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap is_present =
8eea8e29cc4374d1ee24c25a07f45af132db3499ap softc_p->param_attr[param][subparam] &
8eea8e29cc4374d1ee24c25a07f45af132db3499ap IS_PRESENT;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap cap_get =
8eea8e29cc4374d1ee24c25a07f45af132db3499ap softc_p->param_attr[param][subparam] &
8eea8e29cc4374d1ee24c25a07f45af132db3499ap CAP_GET;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (is_valid && is_present && cap_get) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (err = dcam1394_param_get(softc_p,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param, subparam, &val)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_list[param][subparam].err = 1;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_err = 1;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (!err) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_list[param][subparam].val =
8eea8e29cc4374d1ee24c25a07f45af132db3499ap val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap } else {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_list[param][subparam].err = 1;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_err = 1;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_err);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * dcam1394_ioctl_param_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * softc's param_attr field must be initialized via param_attr_init()
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * before using this function.
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apdcam1394_ioctl_param_set(dcam_state_t *softc_p, int is_ctrl_file,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap dcam1394_param_list_t param_list)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int param, subparam;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_err;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t cap_set, is_present, is_valid, val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_err = 0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap for (param = 0; param < DCAM1394_NUM_PARAM; param++) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap for (subparam = 0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam < DCAM1394_NUM_SUBPARAM;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap subparam++) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (param_list[param][subparam].flag) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap is_valid =
8eea8e29cc4374d1ee24c25a07f45af132db3499ap softc_p->param_attr[param][subparam] &
8eea8e29cc4374d1ee24c25a07f45af132db3499ap IS_VALID;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap is_present =
8eea8e29cc4374d1ee24c25a07f45af132db3499ap softc_p->param_attr[param][subparam] &
8eea8e29cc4374d1ee24c25a07f45af132db3499ap IS_PRESENT;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap cap_set = is_ctrl_file ?
8eea8e29cc4374d1ee24c25a07f45af132db3499ap (softc_p->param_attr[param][subparam]
8eea8e29cc4374d1ee24c25a07f45af132db3499ap & CAP_CTRL_SET) :
8eea8e29cc4374d1ee24c25a07f45af132db3499ap (softc_p->param_attr[param][subparam]
8eea8e29cc4374d1ee24c25a07f45af132db3499ap & CAP_SET);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (is_valid && is_present && cap_set) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap val = param_list[param][subparam].val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam1394_param_set(softc_p,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param, subparam, val)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_list[param][subparam].err = 1;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_err = 1;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap } else {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap param_list[param][subparam].err = 1;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_err = 1;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_err);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * dcam1394_param_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apdcam1394_param_get(dcam_state_t *softc_p, uint_t param, uint_t subparam,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int err;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap switch (param) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_CAP_POWER_CTRL:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_cap_power_ctrl_get(softc_p, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_CAP_VID_MODE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_cap_vid_mode_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_0:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_1:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_2:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_3:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_4:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_5:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_cap_frame_rate_get(softc_p, param, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_POWER:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_power_get(softc_p, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_VID_MODE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_vid_mode_get(softc_p, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_FRAME_RATE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_frame_rate_get(softc_p, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_RING_BUFF_CAPACITY:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_ring_buff_capacity_get(softc_p, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_RING_BUFF_NUM_FRAMES_READY:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_ring_buff_num_frames_ready_get(softc_p, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_RING_BUFF_READ_PTR_INCR:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_ring_buff_read_ptr_incr_get(softc_p, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_FRAME_NUM_BYTES:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_frame_num_bytes_get(softc_p, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_STATUS:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_status_get(softc_p, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_BRIGHTNESS:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_brightness_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_EXPOSURE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_exposure_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_SHARPNESS:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_sharpness_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_WHITE_BALANCE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_white_balance_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_HUE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_hue_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_SATURATION:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_saturation_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_GAMMA:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_gamma_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_SHUTTER:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_shutter_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_GAIN:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_gain_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_IRIS:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_iris_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_FOCUS:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_focus_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_ZOOM:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_zoom_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_PAN:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_pan_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_TILT:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_tilt_get(softc_p, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap default:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = 1;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (err);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * dcam1394_param_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apdcam1394_param_set(dcam_state_t *softc_p, uint_t param, uint_t subparam,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int err;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap switch (param) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_POWER:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_power_set(softc_p, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_VID_MODE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_vid_mode_set(softc_p, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_FRAME_RATE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_frame_rate_set(softc_p, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_RING_BUFF_CAPACITY:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_ring_buff_capacity_set(softc_p, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_RING_BUFF_READ_PTR_INCR:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_ring_buff_read_ptr_incr_set(softc_p, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_BRIGHTNESS:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_brightness_set(softc_p, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_EXPOSURE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_exposure_set(softc_p, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_SHARPNESS:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_sharpness_set(softc_p, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_WHITE_BALANCE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_white_balance_set(softc_p, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_HUE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_hue_set(softc_p, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_SATURATION:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_saturation_set(softc_p, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_GAMMA:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_gamma_set(softc_p, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_SHUTTER:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_shutter_set(softc_p, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_GAIN:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_gain_set(softc_p, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_IRIS:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_iris_set(softc_p, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_FOCUS:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_focus_set(softc_p, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_ZOOM:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_zoom_set(softc_p, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_PAN:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_pan_set(softc_p, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_PARAM_TILT:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = param_tilt_set(softc_p, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap default:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap err = 1;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (err);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * feature_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apfeature_get(dcam_state_t *softc_p, uint_t feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap dcam1394_reg_io_t reg_io;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap switch (subparam) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_PRESENCE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_ON_OFF:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_CTRL_MODE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_VALUE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_U_VALUE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_V_VALUE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.offs = feature_csr_offs +
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_REG_OFFS_FEATURE_CSR_BASE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam_reg_read(softc_p, &reg_io)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap val = feature_csr_val_subparam_extract(subparam, reg_io.val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_CAP_READ:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_CAP_ON_OFF:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_CAP_CTRL_AUTO:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_CAP_CTRL_MANUAL:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_MIN_VAL:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_MAX_VAL:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.offs = feature_elm_inq_reg_offs +
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_REG_OFFS_FEATURE_ELM_INQ_BASE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam_reg_read(softc_p, &reg_io)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap val = feature_elm_inq_reg_val_subparam_extract(subparam,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap default:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * feature_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apfeature_set(dcam_state_t *softc_p, uint_t feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap dcam1394_reg_io_t reg_io;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.offs = feature_csr_offs + DCAM1394_REG_OFFS_FEATURE_CSR_BASE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam_reg_read(softc_p, &reg_io)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.val = feature_csr_val_construct(subparam, val, reg_io.val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam_reg_write(softc_p, &reg_io)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_cap_power_ctrl_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_cap_power_ctrl_get(dcam_state_t *softc_p, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap dcam1394_reg_io_t reg_io;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.offs = DCAM1394_REG_OFFS_BASIC_FUNC_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam_reg_read(softc_p, &reg_io)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = (reg_io.val & DCAM1394_MASK_CAM_POWER_CTRL) >>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SHIFT_CAM_POWER_CTRL;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_cap_vid_mode_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * dcam spec: sec 1.2.1.1
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_cap_vid_mode_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap dcam1394_reg_io_t reg_io;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t mask, shift, vid_mode;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap vid_mode = subparam - DCAM1394_SUBPARAM_VID_MODE_0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.offs = DCAM1394_REG_OFFS_VID_MODE_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam_reg_read(softc_p, &reg_io)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap mask = 1 << (31 - vid_mode);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap shift = 31 - vid_mode;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = (reg_io.val & mask) >> shift;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_cap_frame_rate_get()
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * dcam spec: sec 1.2.2
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_cap_frame_rate_get(dcam_state_t *softc_p, uint_t param,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap dcam1394_reg_io_t reg_io;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t frame_rate, mask, shift, vid_mode;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap vid_mode = param - DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap frame_rate = subparam - DCAM1394_SUBPARAM_FRAME_RATE_0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.offs = DCAM1394_REG_OFFS_FRAME_RATE_INQ_BASE + (4 * vid_mode);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam_reg_read(softc_p, &reg_io)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap mask = 1 << (31 - (frame_rate + 1));
8eea8e29cc4374d1ee24c25a07f45af132db3499ap shift = 31 - (frame_rate + 1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = (reg_io.val & mask) >> shift;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_power_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_power_get(dcam_state_t *softc_p, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap dcam1394_reg_io_t reg_io;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.offs = DCAM1394_REG_OFFS_CAMERA_POWER;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam_reg_read(softc_p, &reg_io)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = reg_io.val >> DCAM1394_SHIFT_CAMERA_POWER;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_power_set()
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_power_set(dcam_state_t *softc_p, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap dcam1394_reg_io_t reg_io;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.offs = DCAM1394_REG_OFFS_CAMERA_POWER;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.val = val << DCAM1394_SHIFT_CAMERA_POWER;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam_reg_write(softc_p, &reg_io)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_vid_mode_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_vid_mode_get(dcam_state_t *softc_p, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap dcam1394_reg_io_t reg_io;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.offs = DCAM1394_REG_OFFS_CUR_V_MODE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam_reg_read(softc_p, &reg_io)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = reg_io.val >> DCAM1394_SHIFT_CUR_V_MODE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_vid_mode_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_vid_mode_set(dcam_state_t *softc_p, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap dcam1394_reg_io_t reg_io;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t vid_mode;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap vid_mode = val - DCAM1394_VID_MODE_0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.offs = DCAM1394_REG_OFFS_CUR_V_MODE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.val = vid_mode << DCAM1394_SHIFT_CUR_V_MODE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam_reg_write(softc_p, &reg_io)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap softc_p->cur_vid_mode = val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * if we are currently receiving frames, we need to do a restart
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * so that the new vid mode value takes effect
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (softc_p->flags & DCAM1394_FLAG_FRAME_RCV_INIT) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap (void) dcam_frame_rcv_stop(softc_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap (void) dcam1394_ioctl_frame_rcv_start(softc_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_frame_rate_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_frame_rate_get(dcam_state_t *softc_p, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap dcam1394_reg_io_t reg_io;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t frame_rate;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.offs = DCAM1394_REG_OFFS_CUR_V_FRM_RATE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam_reg_read(softc_p, &reg_io)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap frame_rate = reg_io.val >> DCAM1394_SHIFT_CUR_V_FRM_RATE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = frame_rate - 1 + DCAM1394_FRAME_RATE_0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_frame_rate_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_frame_rate_set(dcam_state_t *softc_p, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap dcam1394_reg_io_t reg_io;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t frame_rate;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* if we are currently receiving frames, stop the camera */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (softc_p->flags & DCAM1394_FLAG_FRAME_RCV_INIT) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap (void) dcam_frame_rcv_stop(softc_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap frame_rate = val - DCAM1394_FRAME_RATE_0 + 1;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.offs = DCAM1394_REG_OFFS_CUR_V_FRM_RATE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.val = frame_rate << DCAM1394_SHIFT_CUR_V_FRM_RATE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam_reg_write(softc_p, &reg_io)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * Update the state info.
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * note: the driver maintains frame rate in an array
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * whereas the the camera uses predefined values whose
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * lowest frame rate starts at 6
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap softc_p->cur_frame_rate = val - 6;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* restart the camera */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap (void) dcam1394_ioctl_frame_rcv_start(softc_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap } else {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap frame_rate = val - DCAM1394_FRAME_RATE_0 + 1;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.offs = DCAM1394_REG_OFFS_CUR_V_FRM_RATE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap reg_io.val = frame_rate << DCAM1394_SHIFT_CUR_V_FRM_RATE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (dcam_reg_write(softc_p, &reg_io)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* see note above re skewing of value by 6 */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap softc_p->cur_frame_rate = val - 6;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_ring_buff_capacity_get()
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_ring_buff_capacity_get(dcam_state_t *softc_p, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = softc_p->cur_ring_buff_capacity;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_ring_buff_capacity_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_ring_buff_capacity_set(dcam_state_t *softc_p, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* bounds check */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if ((val < 2) || (val > 30)) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /* update our state info */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap softc_p->cur_ring_buff_capacity = val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * if we are currently receiving frames, we need to do a restart
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * so that the new buff_capacity value takes effect
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (softc_p->flags & DCAM1394_FLAG_FRAME_RCV_INIT) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap (void) dcam_frame_rcv_stop(softc_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap (void) dcam1394_ioctl_frame_rcv_start(softc_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_ring_buff_num_frames_ready_get()
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_ring_buff_num_frames_ready_get(dcam_state_t *softc_p, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap size_t read_pos, write_pos;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap /*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * note: currently we support only one read_ptr_id, so the
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * following logic will work. If multiple read_ptr_id's are
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * supported, this function call will need to receive a
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * read_ptr_id
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (softc_p->ring_buff_p == NULL) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap mutex_enter(&softc_p->dcam_frame_is_done_mutex);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap read_pos = ring_buff_read_ptr_pos_get(softc_p->ring_buff_p, 0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap write_pos = ring_buff_write_ptr_pos_get(softc_p->ring_buff_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (read_pos < write_pos) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = write_pos - read_pos;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap } else {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = (softc_p->ring_buff_p->num_buffs + write_pos) -
8eea8e29cc4374d1ee24c25a07f45af132db3499ap read_pos;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap mutex_exit(&softc_p->dcam_frame_is_done_mutex);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_ring_buff_read_ptr_incr_get()
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_ring_buff_read_ptr_incr_get(dcam_state_t *softc_p, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (softc_p->ring_buff_p == NULL) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = softc_p->ring_buff_p->read_ptr_incr_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_ring_buff_read_ptr_incr_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_ring_buff_read_ptr_incr_set(dcam_state_t *softc_p, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (softc_p->ring_buff_p == NULL) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap softc_p->ring_buff_p->read_ptr_incr_val = val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_frame_num_bytes_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_frame_num_bytes_get(dcam_state_t *softc_p, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (softc_p == NULL) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (1);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = g_frame_num_bytes[softc_p->cur_vid_mode];
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_status_get()
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_status_get(dcam_state_t *softc_p, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap mutex_enter(&softc_p->dcam_frame_is_done_mutex);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = softc_p->param_status;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap softc_p->param_status = 0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap mutex_exit(&softc_p->dcam_frame_is_done_mutex);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (0);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_brightness_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_brightness_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_BRIGHTNESS_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs = DCAM1394_REG_OFFS_BRIGHTNESS_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_get(softc_p, feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_brightness_set()
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_brightness_set(dcam_state_t *softc_p, uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_BRIGHTNESS_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_set(softc_p, feature_csr_offs, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_exposure_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_exposure_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_EXPOSURE_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs = DCAM1394_REG_OFFS_EXPOSURE_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_get(softc_p, feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_exposure_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_exposure_set(dcam_state_t *softc_p, uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_EXPOSURE_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_set(softc_p, feature_csr_offs, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_sharpness_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_sharpness_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_SHARPNESS_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs = DCAM1394_REG_OFFS_SHARPNESS_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_get(softc_p, feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_sharpness_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_sharpness_set(dcam_state_t *softc_p, uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_SHARPNESS_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_set(softc_p, feature_csr_offs, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_white_balance_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_white_balance_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_WHITE_BALANCE_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs = DCAM1394_REG_OFFS_WHITE_BALANCE_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_get(softc_p, feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_white_balance_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_white_balance_set(dcam_state_t *softc_p, uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_WHITE_BALANCE_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_set(softc_p, feature_csr_offs, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_hue_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_hue_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_HUE_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs = DCAM1394_REG_OFFS_HUE_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_get(softc_p, feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_hue_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_hue_set(dcam_state_t *softc_p, uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_HUE_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_set(softc_p, feature_csr_offs, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_saturation_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_saturation_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_SATURATION_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs = DCAM1394_REG_OFFS_SATURATION_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_get(softc_p, feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_saturation_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_saturation_set(dcam_state_t *softc_p, uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_SATURATION_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_set(softc_p, feature_csr_offs, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_gamma_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_gamma_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_GAMMA_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs = DCAM1394_REG_OFFS_GAMMA_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_get(softc_p, feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_gamma_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_gamma_set(dcam_state_t *softc_p, uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_GAMMA_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_set(softc_p, feature_csr_offs, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_shutter_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_shutter_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_SHUTTER_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs = DCAM1394_REG_OFFS_SHUTTER_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_get(softc_p, feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_shutter_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_shutter_set(dcam_state_t *softc_p, uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_SHUTTER_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_set(softc_p, feature_csr_offs, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_gain_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_gain_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_GAIN_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs = DCAM1394_REG_OFFS_GAIN_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_get(softc_p, feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_gain_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_gain_set(dcam_state_t *softc_p, uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_GAIN_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_set(softc_p, feature_csr_offs, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_iris_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_iris_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_IRIS_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs = DCAM1394_REG_OFFS_IRIS_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_get(softc_p, feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap switch (subparam) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_PRESENCE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = 0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_ON_OFF:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = 1;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_MIN_VAL:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_MAX_VAL:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_VALUE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap *val_p = 4;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap default:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_iris_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_iris_set(dcam_state_t *softc_p, uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_IRIS_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap if (subparam == DCAM1394_SUBPARAM_ON_OFF) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap val = 1;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap } else if (subparam == DCAM1394_SUBPARAM_VALUE) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap val = 4;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_set(softc_p, feature_csr_offs, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_focus_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_focus_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_FOCUS_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs = DCAM1394_REG_OFFS_FOCUS_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_get(softc_p, feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_focus_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_focus_set(dcam_state_t *softc_p, uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_FOCUS_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_set(softc_p, feature_csr_offs, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_zoom_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_zoom_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_ZOOM_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs = DCAM1394_REG_OFFS_ZOOM_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_get(softc_p, feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_zoom_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_zoom_set(dcam_state_t *softc_p, uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_ZOOM_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_set(softc_p, feature_csr_offs, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_pan_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_pan_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_PAN_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs = DCAM1394_REG_OFFS_PAN_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_get(softc_p, feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_pan_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_pan_set(dcam_state_t *softc_p, uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_PAN_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_set(softc_p, feature_csr_offs, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_tilt_get
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_tilt_get(dcam_state_t *softc_p, uint_t subparam, uint_t *val_p)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_elm_inq_reg_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_TILT_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs = DCAM1394_REG_OFFS_TILT_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_get(softc_p, feature_csr_offs,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_elm_inq_reg_offs, subparam, val_p);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * param_tilt_set
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apint
8eea8e29cc4374d1ee24c25a07f45af132db3499apparam_tilt_set(dcam_state_t *softc_p, uint_t subparam, uint_t val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap int ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t feature_csr_offs;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap feature_csr_offs = DCAM1394_REG_OFFS_TILT_CSR;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = feature_set(softc_p, feature_csr_offs, subparam, val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * feature_csr_val_construct
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apstatic uint_t
8eea8e29cc4374d1ee24c25a07f45af132db3499apfeature_csr_val_construct(uint_t subparam, uint_t param_val, uint_t init_val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap switch (subparam) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_ON_OFF:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (init_val & ~(DCAM1394_MASK_ON_OFF)) |
8eea8e29cc4374d1ee24c25a07f45af132db3499ap (param_val << DCAM1394_SHIFT_ON_OFF);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_CTRL_MODE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (init_val & ~(DCAM1394_MASK_A_M_MODE)) |
8eea8e29cc4374d1ee24c25a07f45af132db3499ap (param_val << DCAM1394_SHIFT_A_M_MODE);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_VALUE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (init_val & ~(DCAM1394_MASK_VALUE)) |
8eea8e29cc4374d1ee24c25a07f45af132db3499ap (param_val << DCAM1394_SHIFT_VALUE);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_U_VALUE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (init_val & ~(DCAM1394_MASK_U_VALUE)) |
8eea8e29cc4374d1ee24c25a07f45af132db3499ap (param_val << DCAM1394_SHIFT_U_VALUE);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_V_VALUE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (init_val & ~(DCAM1394_MASK_V_VALUE)) |
8eea8e29cc4374d1ee24c25a07f45af132db3499ap (param_val << DCAM1394_SHIFT_V_VALUE);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap default:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * feature_csr_val_subparam_extract
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apstatic uint_t
8eea8e29cc4374d1ee24c25a07f45af132db3499apfeature_csr_val_subparam_extract(uint_t subparam, uint_t reg_val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap switch (subparam) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_PRESENCE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (reg_val & DCAM1394_MASK_PRESENCE_INQ) >>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SHIFT_PRESENCE_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_ON_OFF:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (reg_val & DCAM1394_MASK_ON_OFF) >>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SHIFT_ON_OFF;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_CTRL_MODE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (reg_val & DCAM1394_MASK_A_M_MODE) >>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SHIFT_A_M_MODE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_VALUE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (reg_val & DCAM1394_MASK_VALUE) >>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SHIFT_VALUE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_U_VALUE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (reg_val & DCAM1394_MASK_U_VALUE) >>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SHIFT_U_VALUE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_V_VALUE:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (reg_val & DCAM1394_MASK_V_VALUE) >>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SHIFT_V_VALUE;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap default:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = 0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap/*
8eea8e29cc4374d1ee24c25a07f45af132db3499ap * feature_elm_inq_reg_val_subparam_extract
8eea8e29cc4374d1ee24c25a07f45af132db3499ap */
8eea8e29cc4374d1ee24c25a07f45af132db3499apstatic uint_t
8eea8e29cc4374d1ee24c25a07f45af132db3499apfeature_elm_inq_reg_val_subparam_extract(uint_t subparam,
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t reg_val)
8eea8e29cc4374d1ee24c25a07f45af132db3499ap{
8eea8e29cc4374d1ee24c25a07f45af132db3499ap uint_t ret_val;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap switch (subparam) {
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_CAP_READ:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (reg_val & DCAM1394_MASK_READOUT_INQ) >>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SHIFT_READOUT_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_CAP_ON_OFF:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (reg_val & DCAM1394_MASK_ON_OFF_INQ) >>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SHIFT_ON_OFF_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_CAP_CTRL_AUTO:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (reg_val & DCAM1394_MASK_AUTO_INQ) >>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SHIFT_AUTO_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_CAP_CTRL_MANUAL:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (reg_val & DCAM1394_MASK_MANUAL_INQ) >>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SHIFT_MANUAL_INQ;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_MIN_VAL:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (reg_val & DCAM1394_MASK_MIN_VAL) >>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SHIFT_MIN_VAL;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap case DCAM1394_SUBPARAM_MAX_VAL:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = (reg_val & DCAM1394_MASK_MAX_VAL) >>
8eea8e29cc4374d1ee24c25a07f45af132db3499ap DCAM1394_SHIFT_MAX_VAL;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap default:
8eea8e29cc4374d1ee24c25a07f45af132db3499ap ret_val = 0;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap break;
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap }
8eea8e29cc4374d1ee24c25a07f45af132db3499ap
8eea8e29cc4374d1ee24c25a07f45af132db3499ap return (ret_val);
8eea8e29cc4374d1ee24c25a07f45af132db3499ap}