static void maven_write_byte( MatroxMavenData *mav, MatroxDriverData *mdrv, u8 reg, u8 val ) { MatroxDeviceData *mdev = mdrv->device_data; if (mdev->g450_matrox) { volatile u8 *mmio = mdrv->mmio_base; mga_out_dac( mmio, 0x87, reg ); mga_out_dac( mmio, 0x88, val ); } else { union i2c_smbus_data data; struct i2c_smbus_ioctl_data args; data.byte = val; args.read_write = I2C_SMBUS_WRITE; args.command = reg; args.size = I2C_SMBUS_BYTE_DATA; args.data = &data; ioctl( mdrv->maven_fd, I2C_SMBUS, &args ); } }
static DFBResult besSetRegion( CoreLayer *layer, void *driver_data, void *layer_data, void *region_data, CoreLayerRegionConfig *config, CoreLayerRegionConfigFlags updated, CoreSurface *surface, CorePalette *palette, CoreSurfaceBufferLock *lock ) { MatroxDriverData *mdrv = (MatroxDriverData*) driver_data; MatroxBesLayerData *mbes = (MatroxBesLayerData*) layer_data; volatile u8 *mmio = mdrv->mmio_base; /* remember configuration */ mbes->config = *config; /* set main configuration */ if (updated & (CLRCF_WIDTH | CLRCF_HEIGHT | CLRCF_FORMAT | CLRCF_OPTIONS | CLRCF_DEST | CLRCF_OPACITY | CLRCF_SOURCE)) { bes_calc_regs( mdrv, mbes, config, surface, lock ); bes_set_regs( mdrv, mbes, true ); } /* set color key */ if (updated & CLRCF_DSTKEY) { DFBColorKey key = config->dst_key; switch (dfb_primary_layer_pixelformat()) { case DSPF_RGB555: case DSPF_ARGB1555: key.r >>= 3; key.g >>= 3; key.b >>= 3; break; case DSPF_RGB16: key.r >>= 3; key.g >>= 2; key.b >>= 3; break; default: ; } mga_out_dac( mmio, XCOLKEY0RED, key.r ); mga_out_dac( mmio, XCOLKEY0GREEN, key.g ); mga_out_dac( mmio, XCOLKEY0BLUE, key.b ); }
static void maven_write_word( MatroxMavenData *mav, MatroxDriverData *mdrv, u8 reg, u16 val ) { MatroxDeviceData *mdev = mdrv->device_data; if (mdev->g450_matrox) { volatile u8 *mmio = mdrv->mmio_base; mga_out_dac( mmio, 0x87, reg ); mga_out_dac( mmio, 0x88, val ); mga_out_dac( mmio, 0x87, reg + 1 ); mga_out_dac( mmio, 0x88, val >> 8 ); } else {
static DFBResult besInitLayer( CoreLayer *layer, void *driver_data, void *layer_data, DFBDisplayLayerDescription *description, DFBDisplayLayerConfig *config, DFBColorAdjustment *adjustment ) { MatroxDriverData *mdrv = (MatroxDriverData*) driver_data; volatile u8 *mmio = mdrv->mmio_base; /* set capabilities and type */ description->caps = DLCAPS_SCREEN_LOCATION | DLCAPS_SURFACE | DLCAPS_DEINTERLACING | DLCAPS_DST_COLORKEY; description->type = DLTF_GRAPHICS | DLTF_VIDEO | DLTF_STILL_PICTURE; /* set name */ snprintf( description->name, DFB_DISPLAY_LAYER_DESC_NAME_LENGTH, "Matrox Backend Scaler" ); /* fill out the default configuration */ config->flags = DLCONF_WIDTH | DLCONF_HEIGHT | DLCONF_PIXELFORMAT | DLCONF_BUFFERMODE | DLCONF_OPTIONS; config->width = 640; config->height = 480; config->pixelformat = DSPF_YUY2; config->buffermode = DLBM_FRONTONLY; config->options = DLOP_NONE; adjustment->flags = DCAF_NONE; if (mdrv->accelerator != FB_ACCEL_MATROX_MGAG200) { description->caps |= DLCAPS_BRIGHTNESS | DLCAPS_CONTRAST; /* fill out default color adjustment, only fields set in flags will be accepted from applications */ adjustment->flags |= DCAF_BRIGHTNESS | DCAF_CONTRAST; adjustment->brightness = 0x8000; adjustment->contrast = 0x8000; mga_out32( mmio, 0x80, BESLUMACTL ); } /* make sure BES registers get updated (besvcnt) */ mga_out32( mmio, 0, BESGLOBCTL ); /* disable backend scaler */ mga_out32( mmio, 0, BESCTL ); /* set defaults */ mga_out_dac( mmio, XKEYOPMODE, 0x00 ); /* keying off */ mga_out_dac( mmio, XCOLMSK0RED, 0xFF ); /* full mask */ mga_out_dac( mmio, XCOLMSK0GREEN, 0xFF ); mga_out_dac( mmio, XCOLMSK0BLUE, 0xFF ); mga_out_dac( mmio, XCOLKEY0RED, 0x00 ); /* default to black */ mga_out_dac( mmio, XCOLKEY0GREEN, 0x00 ); mga_out_dac( mmio, XCOLKEY0BLUE, 0x00 ); return DFB_OK; }