2009-03-23 18:34:06 -07:00
/*
* linux / arch / arm / mach - omap2 / usb - musb . c
*
* This file will contain the board specific details for the
* MENTOR USB OTG controller on OMAP3430
*
* Copyright ( C ) 2007 - 2008 Texas Instruments
* Copyright ( C ) 2008 Nokia Corporation
* Author : Vikram Pandita
*
* Generalization by :
* Felipe Balbi < felipe . balbi @ nokia . com >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# include <linux/types.h>
# include <linux/errno.h>
# include <linux/delay.h>
# include <linux/platform_device.h>
# include <linux/clk.h>
# include <linux/dma-mapping.h>
# include <linux/io.h>
# include <linux/usb/musb.h>
2012-10-02 17:25:48 -07:00
# include "omap_device.h"
2012-10-05 13:25:59 -07:00
# include "soc.h"
2011-02-16 15:42:15 +05:30
# include "mux.h"
2012-10-24 14:26:18 -07:00
# include "usb.h"
2009-03-23 18:34:06 -07:00
static struct musb_hdrc_config musb_config = {
. multipoint = 1 ,
. dyn_fifo = 1 ,
. num_eps = 16 ,
. ram_bits = 12 ,
} ;
static struct musb_hdrc_platform_data musb_plat = {
. mode = MUSB_OTG ,
2013-08-06 20:06:15 +03:00
2009-03-23 18:34:06 -07:00
/* .clock is set dynamically */
. config = & musb_config ,
/* REVISIT charge pump on TWL4030 can supply up to
* 100 mA . . . but this value is board - specific , like
* " mode " , and should be passed to usb_musb_init ( ) .
*/
. power = 50 , /* up to 100 mA */
} ;
2009-04-13 14:40:14 -07:00
static u64 musb_dmamask = DMA_BIT_MASK ( 32 ) ;
2009-03-23 18:34:06 -07:00
2011-04-27 11:56:12 +03:00
static struct omap_musb_board_data musb_default_board_data = {
. interface_type = MUSB_INTERFACE_ULPI ,
. mode = MUSB_OTG ,
. power = 100 ,
} ;
void __init usb_musb_init ( struct omap_musb_board_data * musb_board_data )
2009-03-23 18:34:06 -07:00
{
2011-02-17 12:07:21 +05:30
struct omap_hwmod * oh ;
struct platform_device * pdev ;
struct device * dev ;
int bus_id = - 1 ;
const char * oh_name , * name ;
2011-04-27 11:56:12 +03:00
struct omap_musb_board_data * board_data ;
if ( musb_board_data )
board_data = musb_board_data ;
else
board_data = & musb_default_board_data ;
2011-02-16 15:42:15 +05:30
2009-03-23 18:34:06 -07:00
/*
* REVISIT : This line can be removed once all the platforms using
* musb_core . c have been converted to use use clkdev .
*/
musb_plat . clock = " ick " ;
2010-02-17 14:09:30 -08:00
musb_plat . board_data = board_data ;
musb_plat . power = board_data - > power > > 1 ;
musb_plat . mode = board_data - > mode ;
2010-03-25 13:25:27 +02:00
musb_plat . extvbus = board_data - > extvbus ;
2009-03-23 18:34:06 -07:00
2015-01-14 17:21:00 -08:00
oh_name = " usb_otg_hs " ;
name = " musb-omap2430 " ;
2011-02-17 12:07:21 +05:30
2011-10-04 09:47:06 -07:00
oh = omap_hwmod_lookup ( oh_name ) ;
if ( WARN ( ! oh , " %s: could not find omap_hwmod for %s \n " ,
__func__ , oh_name ) )
return ;
2011-02-17 12:07:21 +05:30
2011-10-04 09:47:06 -07:00
pdev = omap_device_build ( name , bus_id , oh , & musb_plat ,
2013-01-26 00:48:53 -07:00
sizeof ( musb_plat ) ) ;
2011-10-04 09:47:06 -07:00
if ( IS_ERR ( pdev ) ) {
2011-02-17 12:07:21 +05:30
pr_err ( " Could not build omap_device for %s %s \n " ,
name , oh_name ) ;
return ;
}
dev = & pdev - > dev ;
get_device ( dev ) ;
dev - > dma_mask = & musb_dmamask ;
dev - > coherent_dma_mask = musb_dmamask ;
put_device ( dev ) ;
2009-01-19 19:09:22 +02:00
}