satip-axe/kernel/drivers/usb/host/hcd-stm.h
2015-03-26 17:24:57 +01:00

90 lines
2.9 KiB
C

/*
* HCD (Host Controller Driver) for USB.
*
* Copyright (c) 2009 STMicroelectronics Limited
* Author: Francesco Virlinzi
*
* Bus Glue for STMicroelectronics STx710x devices.
*
* This file is licenced under the GPL.
*/
#ifndef __ST_USB_HCD__
#define __ST_USB_HCD__
/* The transaction opcode is programmed in this register */
#define AHB2STBUS_STBUS_OPC_OFFSET 0x00 /* From PROTOCOL_BASE */
#define AHB2STBUS_STBUS_OPC_4BIT 0x00
#define AHB2STBUS_STBUS_OPC_8BIT 0x01
#define AHB2STBUS_STBUS_OPC_16BIT 0x02
#define AHB2STBUS_STBUS_OPC_32BIT 0x03
#define AHB2STBUS_STBUS_OPC_64BIT 0x04
/* The message length in number of packets is programmed in this register. */
#define AHB2STBUS_MSGSIZE_OFFSET 0x04 /* From PROTOCOL_BASE */
#define AHB2STBUS_MSGSIZE_DISABLE 0x0
#define AHB2STBUS_MSGSIZE_2 0x1
#define AHB2STBUS_MSGSIZE_4 0x2
#define AHB2STBUS_MSGSIZE_8 0x3
#define AHB2STBUS_MSGSIZE_16 0x4
#define AHB2STBUS_MSGSIZE_32 0x5
#define AHB2STBUS_MSGSIZE_64 0x6
/* The chunk size in number of packets is programmed in this register */
#define AHB2STBUS_CHUNKSIZE_OFFSET 0x08 /* From PROTOCOL_BASE */
#define AHB2STBUS_CHUNKSIZE_DISABLE 0x0
#define AHB2STBUS_CHUNKSIZE_2 0x1
#define AHB2STBUS_CHUNKSIZE_4 0x2
#define AHB2STBUS_CHUNKSIZE_8 0x3
#define AHB2STBUS_CHUNKSIZE_16 0x4
#define AHB2STBUS_CHUNKSIZE_32 0x5
#define AHB2STBUS_CHUNKSIZE_64 0x6
#define AHB2STBUS_TIMEOUT 0x0c
#define AHB2STBUS_SW_RESET 0x10
/* Wrapper Glue registers */
#define AHB2STBUS_STRAP_OFFSET 0x14 /* From WRAPPER_GLUE_BASE */
#define AHB2STBUS_STRAP_PLL 0x08 /* undocumented */
#define AHB2STBUS_STRAP_8_BIT 0x00 /* ss_word_if */
#define AHB2STBUS_STRAP_16_BIT 0x04 /* ss_word_if */
/* Extensions to the standard USB register set */
/* Define a bus wrapper IN/OUT threshold of 128 */
#define AHB2STBUS_INSREG01_OFFSET (0x10 + 0x84) /* From EHCI_BASE */
#define AHB2STBUS_INOUT_THRESHOLD 0x00800080
#include <linux/clk.h>
#include "../core/hcd.h"
#define USB_CLKS_NR 3
struct drv_usb_data {
/*
* USB-IP needs 2 clocks:
* - a 48 MHz oscillator (to generate a final 480 MHz)
* - a 100 MHz oscillator (for the NI)
* - an oscillator for Phy
* other clocks are generated internally using
* direclty the external oscillator
*/
struct clk *clks[USB_CLKS_NR];
void *ahb2stbus_wrapper_glue_base;
void *ahb2stbus_protocol_base;
struct platform_device *ehci_device;
struct platform_device *ohci_device;
struct stm_device_state *device_state;
};
#ifdef CONFIG_PM_RUNTIME
int stm_ehci_hcd_register(struct platform_device *);
int stm_ehci_hcd_unregister(struct platform_device *);
int stm_ohci_hcd_register(struct platform_device *);
int stm_ohci_hcd_unregister(struct platform_device *);
#endif
#endif