@ -21,7 +21,6 @@
# include <drm/drmP.h>
# include <drm/drm.h>
# include <drm/gma_drm.h>
# include "psb_drv.h"
# include "framebuffer.h"
# include "psb_reg.h"
@ -89,56 +88,7 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
/*
* Standard IOCTLs .
*/
# define DRM_IOCTL_GMA_ADB \
DRM_IOWR ( DRM_GMA_ADB + DRM_COMMAND_BASE , uint32_t )
# define DRM_IOCTL_GMA_MODE_OPERATION \
DRM_IOWR ( DRM_GMA_MODE_OPERATION + DRM_COMMAND_BASE , \
struct drm_psb_mode_operation_arg )
# define DRM_IOCTL_GMA_STOLEN_MEMORY \
DRM_IOWR ( DRM_GMA_STOLEN_MEMORY + DRM_COMMAND_BASE , \
struct drm_psb_stolen_memory_arg )
# define DRM_IOCTL_GMA_GAMMA \
DRM_IOWR ( DRM_GMA_GAMMA + DRM_COMMAND_BASE , \
struct drm_psb_dpst_lut_arg )
# define DRM_IOCTL_GMA_DPST_BL \
DRM_IOWR ( DRM_GMA_DPST_BL + DRM_COMMAND_BASE , \
uint32_t )
# define DRM_IOCTL_GMA_GET_PIPE_FROM_CRTC_ID \
DRM_IOWR ( DRM_GMA_GET_PIPE_FROM_CRTC_ID + DRM_COMMAND_BASE , \
struct drm_psb_get_pipe_from_crtc_id_arg )
# define DRM_IOCTL_GMA_GEM_CREATE \
DRM_IOWR ( DRM_GMA_GEM_CREATE + DRM_COMMAND_BASE , \
struct drm_psb_gem_create )
# define DRM_IOCTL_GMA_GEM_MMAP \
DRM_IOWR ( DRM_GMA_GEM_MMAP + DRM_COMMAND_BASE , \
struct drm_psb_gem_mmap )
static int psb_adb_ioctl ( struct drm_device * dev , void * data ,
struct drm_file * file_priv ) ;
static int psb_mode_operation_ioctl ( struct drm_device * dev , void * data ,
struct drm_file * file_priv ) ;
static int psb_stolen_memory_ioctl ( struct drm_device * dev , void * data ,
struct drm_file * file_priv ) ;
static int psb_gamma_ioctl ( struct drm_device * dev , void * data ,
struct drm_file * file_priv ) ;
static int psb_dpst_bl_ioctl ( struct drm_device * dev , void * data ,
struct drm_file * file_priv ) ;
static const struct drm_ioctl_desc psb_ioctls [ ] = {
DRM_IOCTL_DEF_DRV ( GMA_ADB , psb_adb_ioctl , DRM_AUTH ) ,
DRM_IOCTL_DEF_DRV ( GMA_MODE_OPERATION , psb_mode_operation_ioctl ,
DRM_AUTH ) ,
DRM_IOCTL_DEF_DRV ( GMA_STOLEN_MEMORY , psb_stolen_memory_ioctl ,
DRM_AUTH ) ,
DRM_IOCTL_DEF_DRV ( GMA_GAMMA , psb_gamma_ioctl , DRM_AUTH ) ,
DRM_IOCTL_DEF_DRV ( GMA_DPST_BL , psb_dpst_bl_ioctl , DRM_AUTH ) ,
DRM_IOCTL_DEF_DRV ( GMA_GET_PIPE_FROM_CRTC_ID ,
psb_intel_get_pipe_from_crtc_id , 0 ) ,
DRM_IOCTL_DEF_DRV ( GMA_GEM_CREATE , psb_gem_create_ioctl ,
DRM_UNLOCKED | DRM_AUTH ) ,
DRM_IOCTL_DEF_DRV ( GMA_GEM_MMAP , psb_gem_mmap_ioctl ,
DRM_UNLOCKED | DRM_AUTH ) ,
} ;
static void psb_lastclose ( struct drm_device * dev )
@ -451,152 +401,6 @@ static inline void get_brightness(struct backlight_device *bd)
# endif
}
static int psb_dpst_bl_ioctl ( struct drm_device * dev , void * data ,
struct drm_file * file_priv )
{
struct drm_psb_private * dev_priv = psb_priv ( dev ) ;
uint32_t * arg = data ;
dev_priv - > blc_adj2 = * arg ;
get_brightness ( dev_priv - > backlight_device ) ;
return 0 ;
}
static int psb_adb_ioctl ( struct drm_device * dev , void * data ,
struct drm_file * file_priv )
{
struct drm_psb_private * dev_priv = psb_priv ( dev ) ;
uint32_t * arg = data ;
dev_priv - > blc_adj1 = * arg ;
get_brightness ( dev_priv - > backlight_device ) ;
return 0 ;
}
static int psb_gamma_ioctl ( struct drm_device * dev , void * data ,
struct drm_file * file_priv )
{
struct drm_psb_dpst_lut_arg * lut_arg = data ;
struct drm_mode_object * obj ;
struct drm_crtc * crtc ;
struct drm_connector * connector ;
struct gma_crtc * gma_crtc ;
int i = 0 ;
int32_t obj_id ;
obj_id = lut_arg - > output_id ;
obj = drm_mode_object_find ( dev , obj_id , DRM_MODE_OBJECT_CONNECTOR ) ;
if ( ! obj ) {
dev_dbg ( dev - > dev , " Invalid Connector object. \n " ) ;
return - ENOENT ;
}
connector = obj_to_connector ( obj ) ;
crtc = connector - > encoder - > crtc ;
gma_crtc = to_gma_crtc ( crtc ) ;
for ( i = 0 ; i < 256 ; i + + )
gma_crtc - > lut_adj [ i ] = lut_arg - > lut [ i ] ;
gma_crtc_load_lut ( crtc ) ;
return 0 ;
}
static int psb_mode_operation_ioctl ( struct drm_device * dev , void * data ,
struct drm_file * file_priv )
{
uint32_t obj_id ;
uint16_t op ;
struct drm_mode_modeinfo * umode ;
struct drm_display_mode * mode = NULL ;
struct drm_psb_mode_operation_arg * arg ;
struct drm_mode_object * obj ;
struct drm_connector * connector ;
struct drm_connector_helper_funcs * connector_funcs ;
int ret = 0 ;
int resp = MODE_OK ;
arg = ( struct drm_psb_mode_operation_arg * ) data ;
obj_id = arg - > obj_id ;
op = arg - > operation ;
switch ( op ) {
case PSB_MODE_OPERATION_MODE_VALID :
umode = & arg - > mode ;
drm_modeset_lock_all ( dev ) ;
obj = drm_mode_object_find ( dev , obj_id ,
DRM_MODE_OBJECT_CONNECTOR ) ;
if ( ! obj ) {
ret = - ENOENT ;
goto mode_op_out ;
}
connector = obj_to_connector ( obj ) ;
mode = drm_mode_create ( dev ) ;
if ( ! mode ) {
ret = - ENOMEM ;
goto mode_op_out ;
}
/* drm_crtc_convert_umode(mode, umode); */
{
mode - > clock = umode - > clock ;
mode - > hdisplay = umode - > hdisplay ;
mode - > hsync_start = umode - > hsync_start ;
mode - > hsync_end = umode - > hsync_end ;
mode - > htotal = umode - > htotal ;
mode - > hskew = umode - > hskew ;
mode - > vdisplay = umode - > vdisplay ;
mode - > vsync_start = umode - > vsync_start ;
mode - > vsync_end = umode - > vsync_end ;
mode - > vtotal = umode - > vtotal ;
mode - > vscan = umode - > vscan ;
mode - > vrefresh = umode - > vrefresh ;
mode - > flags = umode - > flags ;
mode - > type = umode - > type ;
strncpy ( mode - > name , umode - > name , DRM_DISPLAY_MODE_LEN ) ;
mode - > name [ DRM_DISPLAY_MODE_LEN - 1 ] = 0 ;
}
connector_funcs = ( struct drm_connector_helper_funcs * )
connector - > helper_private ;
if ( connector_funcs - > mode_valid ) {
resp = connector_funcs - > mode_valid ( connector , mode ) ;
arg - > data = resp ;
}
/*do some clean up work*/
if ( mode )
drm_mode_destroy ( dev , mode ) ;
mode_op_out :
drm_modeset_unlock_all ( dev ) ;
return ret ;
default :
dev_dbg ( dev - > dev , " Unsupported psb mode operation \n " ) ;
return - EOPNOTSUPP ;
}
return 0 ;
}
static int psb_stolen_memory_ioctl ( struct drm_device * dev , void * data ,
struct drm_file * file_priv )
{
struct drm_psb_private * dev_priv = psb_priv ( dev ) ;
struct drm_psb_stolen_memory_arg * arg = data ;
arg - > base = dev_priv - > stolen_base ;
arg - > size = dev_priv - > vram_stolen_size ;
return 0 ;
}
static int psb_driver_open ( struct drm_device * dev , struct drm_file * priv )
{
return 0 ;