/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Support for Intel Camera Imaging ISP subsystem.
 * Copyright (c) 2015, Intel Corporation.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 */

#ifndef __GP_DEVICE_PUBLIC_H_INCLUDED__
#define __GP_DEVICE_PUBLIC_H_INCLUDED__

#include "system_local.h"

typedef struct gp_device_state_s		gp_device_state_t;

/*! Read the state of GP_DEVICE[ID]

 \param	ID[in]				GP_DEVICE identifier
 \param	state[out]			gp device state structure

 \return none, state = GP_DEVICE[ID].state
 */
void gp_device_get_state(
    const gp_device_ID_t		ID,
    gp_device_state_t			*state);

/*! Write to a control register of GP_DEVICE[ID]

 \param	ID[in]				GP_DEVICE identifier
 \param	reg_addr[in]		register byte address
 \param value[in]			The data to be written

 \return none, GP_DEVICE[ID].ctrl[reg] = value
 */
STORAGE_CLASS_GP_DEVICE_H void gp_device_reg_store(
    const gp_device_ID_t	ID,
    const unsigned int		reg_addr,
    const hrt_data			value);

/*! Read from a control register of GP_DEVICE[ID]

 \param	ID[in]				GP_DEVICE identifier
 \param	reg_addr[in]		register byte address
 \param value[in]			The data to be written

 \return GP_DEVICE[ID].ctrl[reg]
 */
STORAGE_CLASS_GP_DEVICE_H hrt_data gp_device_reg_load(
    const gp_device_ID_t	ID,
    const hrt_address	reg_addr);

#endif /* __GP_DEVICE_PUBLIC_H_INCLUDED__ */
