/*
 * TI OMAP4 ISS V4L2 Driver - ISP IPIPE module
 *
 * Copyright (C) 2012 Texas Instruments, Inc.
 *
 * Author: Sergio Aguirre <sergio.a.aguirre@gmail.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 */

#ifndef OMAP4_ISS_IPIPE_H
#define OMAP4_ISS_IPIPE_H

#include "iss_video.h"

enum ipipe_input_entity {
	IPIPE_INPUT_NONE,
	IPIPE_INPUT_IPIPEIF,
};

#define IPIPE_OUTPUT_VP				BIT(0)

/* Sink and source IPIPE pads */
#define IPIPE_PAD_SINK				0
#define IPIPE_PAD_SOURCE_VP			1
#define IPIPE_PADS_NUM				2

/*
 * struct iss_ipipe_device - Structure for the IPIPE module to store its own
 *			    information
 * @subdev: V4L2 subdevice
 * @pads: Sink and source media entity pads
 * @formats: Active video formats
 * @input: Active input
 * @output: Active outputs
 * @error: A hardware error occurred during capture
 * @state: Streaming state
 * @wait: Wait queue used to stop the module
 * @stopping: Stopping state
 */
struct iss_ipipe_device {
	struct v4l2_subdev subdev;
	struct media_pad pads[IPIPE_PADS_NUM];
	struct v4l2_mbus_framefmt formats[IPIPE_PADS_NUM];

	enum ipipe_input_entity input;
	unsigned int output;
	unsigned int error;

	enum iss_pipeline_stream_state state;
	wait_queue_head_t wait;
	atomic_t stopping;
};

struct iss_device;

int omap4iss_ipipe_register_entities(struct iss_ipipe_device *ipipe,
				     struct v4l2_device *vdev);
void omap4iss_ipipe_unregister_entities(struct iss_ipipe_device *ipipe);

int omap4iss_ipipe_init(struct iss_device *iss);
void omap4iss_ipipe_cleanup(struct iss_device *iss);

#endif	/* OMAP4_ISS_IPIPE_H */
