mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
update to linux 2.6.31-rc3-git4, add intel and intel-ati project
This commit is contained in:
parent
152c971d86
commit
e927afa321
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,586 +0,0 @@
|
||||
diff -up linux-2.6.28.x86_64/drivers/gpu/drm/radeon/atombios_crtc.c.mjg linux-2.6.28.x86_64/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
--- linux-2.6.28.x86_64/drivers/gpu/drm/radeon/atombios_crtc.c.mjg 2009-03-03 19:41:48.000000000 +0000
|
||||
+++ linux-2.6.28.x86_64/drivers/gpu/drm/radeon/atombios_crtc.c 2009-03-03 20:53:05.000000000 +0000
|
||||
@@ -441,14 +441,23 @@ static bool atombios_crtc_mode_fixup(str
|
||||
|
||||
static void atombios_crtc_prepare(struct drm_crtc *crtc)
|
||||
{
|
||||
+ struct drm_device *dev = crtc->dev;
|
||||
+ struct drm_radeon_private *dev_priv = dev->dev_private;
|
||||
+
|
||||
+ mutex_lock(&dev_priv->mode_info.power.pll_mutex);
|
||||
+
|
||||
atombios_crtc_dpms(crtc, DRM_MODE_DPMS_OFF);
|
||||
atombios_lock_crtc(crtc, 1);
|
||||
}
|
||||
|
||||
static void atombios_crtc_commit(struct drm_crtc *crtc)
|
||||
{
|
||||
+ struct drm_device *dev = crtc->dev;
|
||||
+ struct drm_radeon_private *dev_priv = dev->dev_private;
|
||||
+
|
||||
atombios_crtc_dpms(crtc, DRM_MODE_DPMS_ON);
|
||||
atombios_lock_crtc(crtc, 0);
|
||||
+ mutex_unlock(&dev_priv->mode_info.power.pll_mutex);
|
||||
}
|
||||
|
||||
static const struct drm_crtc_helper_funcs atombios_helper_funcs = {
|
||||
diff -up linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_atombios.c.mjg linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_atombios.c
|
||||
--- linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_atombios.c.mjg 2009-03-03 19:41:48.000000000 +0000
|
||||
+++ linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_atombios.c 2009-03-03 20:53:05.000000000 +0000
|
||||
@@ -620,6 +620,34 @@ void radeon_atom_static_pwrmgt_setup(str
|
||||
atom_execute_table(dev_priv->mode_info.atom_context, index, (uint32_t *)&args);
|
||||
}
|
||||
|
||||
+void radeon_atom_get_mc_arb_info(struct drm_device *dev)
|
||||
+{
|
||||
+ struct drm_radeon_private *dev_priv = dev->dev_private;
|
||||
+ struct radeon_mode_info *mode_info = &dev_priv->mode_info;
|
||||
+ struct atom_context *ctx = mode_info->atom_context;
|
||||
+ int index = GetIndexIntoMasterTable(DATA, MC_InitParameter);
|
||||
+ uint8_t frev, crev;
|
||||
+ uint16_t size, data_offset;
|
||||
+
|
||||
+ atom_parse_data_header(ctx, index, &size, &frev, &crev, &data_offset);
|
||||
+ dev_priv->mode_info.power.mc_arb_init_values =
|
||||
+ kmalloc(size*sizeof(int), GFP_KERNEL);
|
||||
+ memcpy(dev_priv->mode_info.power.mc_arb_init_values,
|
||||
+ ctx->bios + data_offset, size * sizeof(int));
|
||||
+}
|
||||
+
|
||||
+void radeon_atom_get_engine_clock(struct drm_device *dev, int *engine_clock)
|
||||
+{
|
||||
+ struct drm_radeon_private *dev_priv = dev->dev_private;
|
||||
+ struct radeon_mode_info *mode_info = &dev_priv->mode_info;
|
||||
+ struct atom_context *ctx = mode_info->atom_context;
|
||||
+ GET_ENGINE_CLOCK_PS_ALLOCATION args;
|
||||
+ int index = GetIndexIntoMasterTable(COMMAND, GetEngineClock);
|
||||
+
|
||||
+ atom_execute_table(ctx, index, (uint32_t *)&args);
|
||||
+ *engine_clock = args.ulReturnEngineClock;
|
||||
+}
|
||||
+
|
||||
void radeon_atom_set_engine_clock(struct drm_device *dev, int eng_clock)
|
||||
{
|
||||
struct drm_radeon_private *dev_priv = dev->dev_private;
|
||||
@@ -633,6 +661,18 @@ void radeon_atom_set_engine_clock(struct
|
||||
atom_execute_table(dev_priv->mode_info.atom_context, index, (uint32_t *)&args);
|
||||
}
|
||||
|
||||
+void radeon_atom_get_memory_clock(struct drm_device *dev, int *mem_clock)
|
||||
+{
|
||||
+ struct drm_radeon_private *dev_priv = dev->dev_private;
|
||||
+ struct radeon_mode_info *mode_info = &dev_priv->mode_info;
|
||||
+ struct atom_context *ctx = mode_info->atom_context;
|
||||
+ GET_MEMORY_CLOCK_PS_ALLOCATION args;
|
||||
+ int index = GetIndexIntoMasterTable(COMMAND, GetMemoryClock);
|
||||
+
|
||||
+ atom_execute_table(ctx, index, (uint32_t *)&args);
|
||||
+ *mem_clock = args.ulReturnMemoryClock;
|
||||
+}
|
||||
+
|
||||
void radeon_atom_set_memory_clock(struct drm_device *dev, int mem_clock)
|
||||
{
|
||||
struct drm_radeon_private *dev_priv = dev->dev_private;
|
||||
@@ -646,6 +686,16 @@ void radeon_atom_set_memory_clock(struct
|
||||
atom_execute_table(dev_priv->mode_info.atom_context, index, (uint32_t *)&args);
|
||||
}
|
||||
|
||||
+void radeon_atom_initialize_memory_controller(struct drm_device *dev)
|
||||
+{
|
||||
+ struct drm_radeon_private *dev_priv = dev->dev_private;
|
||||
+ struct atom_context *ctx = dev_priv->mode_info.atom_context;
|
||||
+ int index = GetIndexIntoMasterTable(COMMAND, MemoryDeviceInit);
|
||||
+ MEMORY_PLLINIT_PS_ALLOCATION args;
|
||||
+
|
||||
+ atom_execute_table(ctx, index, (uint32_t *)&args);
|
||||
+}
|
||||
+
|
||||
void radeon_atom_initialize_bios_scratch_regs(struct drm_device *dev)
|
||||
{
|
||||
struct drm_radeon_private *dev_priv = dev->dev_private;
|
||||
diff -up linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_cp.c.mjg linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_cp.c
|
||||
--- linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_cp.c.mjg 2009-03-03 19:41:48.000000000 +0000
|
||||
+++ linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_cp.c 2009-03-03 20:53:05.000000000 +0000
|
||||
@@ -3223,6 +3223,8 @@ int radeon_driver_load(struct drm_device
|
||||
if (ret)
|
||||
goto modeset_fail;
|
||||
|
||||
+ mutex_init(&dev_priv->mode_info.power.pll_mutex);
|
||||
+
|
||||
radeon_modeset_init(dev);
|
||||
|
||||
radeon_modeset_cp_init(dev);
|
||||
@@ -3231,7 +3233,7 @@ int radeon_driver_load(struct drm_device
|
||||
drm_irq_install(dev);
|
||||
}
|
||||
|
||||
-
|
||||
+ radeon_pm_init(dev);
|
||||
return ret;
|
||||
modeset_fail:
|
||||
dev->driver->driver_features &= ~DRIVER_MODESET;
|
||||
@@ -3303,6 +3305,8 @@ int radeon_driver_unload(struct drm_devi
|
||||
{
|
||||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
|
||||
+ radeon_pm_exit(dev);
|
||||
+
|
||||
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
|
||||
drm_irq_uninstall(dev);
|
||||
radeon_modeset_cleanup(dev);
|
||||
diff -up linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_cs.c.mjg linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_cs.c
|
||||
--- linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_cs.c.mjg 2009-03-03 19:41:48.000000000 +0000
|
||||
+++ linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_cs.c 2009-03-03 20:53:05.000000000 +0000
|
||||
@@ -41,6 +41,8 @@ int radeon_cs_ioctl(struct drm_device *d
|
||||
long size;
|
||||
int r, i;
|
||||
|
||||
+ radeon_pm_timer_reset(dev);
|
||||
+
|
||||
mutex_lock(&dev_priv->cs.cs_mutex);
|
||||
/* set command stream id to 0 which is fake id */
|
||||
cs_id = 0;
|
||||
diff -up linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_drv.h.mjg linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_drv.h
|
||||
--- linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_drv.h.mjg 2009-03-03 19:41:48.000000000 +0000
|
||||
+++ linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_drv.h 2009-03-03 20:53:05.000000000 +0000
|
||||
@@ -612,6 +612,9 @@ extern int radeon_modeset_cp_resume(stru
|
||||
/* radeon_pm.c */
|
||||
int radeon_suspend(struct drm_device *dev, pm_message_t state);
|
||||
int radeon_resume(struct drm_device *dev);
|
||||
+void radeon_pm_init(struct drm_device *dev);
|
||||
+void radeon_pm_exit(struct drm_device *dev);
|
||||
+void radeon_pm_timer_reset(struct drm_device *dev);
|
||||
|
||||
/* Flags for stats.boxes
|
||||
*/
|
||||
diff -up linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_irq.c.mjg linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_irq.c
|
||||
--- linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_irq.c.mjg 2009-03-03 19:41:48.000000000 +0000
|
||||
+++ linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_irq.c 2009-03-03 20:53:05.000000000 +0000
|
||||
@@ -185,8 +185,10 @@ irqreturn_t radeon_driver_irq_handler(DR
|
||||
struct drm_device *dev = (struct drm_device *) arg;
|
||||
drm_radeon_private_t *dev_priv =
|
||||
(drm_radeon_private_t *) dev->dev_private;
|
||||
+ struct radeon_powermanagement_info *power = &dev_priv->mode_info.power;
|
||||
u32 stat;
|
||||
u32 r500_disp_int;
|
||||
+ unsigned long flags;
|
||||
|
||||
/* Only consider the bits we're interested in - others could be used
|
||||
* outside the DRM
|
||||
@@ -206,15 +208,47 @@ irqreturn_t radeon_driver_irq_handler(DR
|
||||
|
||||
/* VBLANK interrupt */
|
||||
if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS690) {
|
||||
- if (r500_disp_int & R500_D1_VBLANK_INTERRUPT)
|
||||
+ if (r500_disp_int & R500_D1_VBLANK_INTERRUPT) {
|
||||
+ spin_lock_irqsave(&power->power_lock, flags);
|
||||
+ if (power->reclock_head & 1) {
|
||||
+ power->reclock_head &= ~1;
|
||||
+ schedule_work(&power->reclock_work);
|
||||
+ drm_vblank_put(dev, 0);
|
||||
+ }
|
||||
+ spin_unlock_irqrestore(&power->power_lock, flags);
|
||||
drm_handle_vblank(dev, 0);
|
||||
- if (r500_disp_int & R500_D2_VBLANK_INTERRUPT)
|
||||
+ }
|
||||
+ if (r500_disp_int & R500_D2_VBLANK_INTERRUPT) {
|
||||
+ spin_lock_irqsave(&power->power_lock, flags);
|
||||
+ if (power->reclock_head & 2) {
|
||||
+ power->reclock_head &= ~2;
|
||||
+ schedule_work(&power->reclock_work);
|
||||
+ drm_vblank_put(dev, 1);
|
||||
+ }
|
||||
+ spin_unlock_irqrestore(&power->power_lock, flags);
|
||||
drm_handle_vblank(dev, 1);
|
||||
+ }
|
||||
} else {
|
||||
- if (stat & RADEON_CRTC_VBLANK_STAT)
|
||||
+ if (stat & RADEON_CRTC_VBLANK_STAT) {
|
||||
+ spin_lock_irqsave(&power->power_lock, flags);
|
||||
+ if (power->reclock_head & 1) {
|
||||
+ power->reclock_head &= ~1;
|
||||
+ schedule_work(&power->reclock_work);
|
||||
+ drm_vblank_put(dev, 0);
|
||||
+ }
|
||||
+ spin_unlock_irqrestore(&power->power_lock, flags);
|
||||
drm_handle_vblank(dev, 0);
|
||||
- if (stat & RADEON_CRTC2_VBLANK_STAT)
|
||||
+ }
|
||||
+ if (stat & RADEON_CRTC2_VBLANK_STAT) {
|
||||
+ spin_lock_irqsave(&power->power_lock, flags);
|
||||
+ if (power->reclock_head & 2) {
|
||||
+ power->reclock_head &= ~2;
|
||||
+ schedule_work(&power->reclock_work);
|
||||
+ drm_vblank_put(dev, 1);
|
||||
+ }
|
||||
+ spin_unlock_irqrestore(&power->power_lock, flags);
|
||||
drm_handle_vblank(dev, 1);
|
||||
+ }
|
||||
}
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
diff -up linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_mode.h.mjg linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_mode.h
|
||||
--- linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_mode.h.mjg 2009-03-03 19:41:48.000000000 +0000
|
||||
+++ linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_mode.h 2009-03-03 20:53:05.000000000 +0000
|
||||
@@ -173,6 +173,22 @@ struct radeon_i2c_chan {
|
||||
struct radeon_i2c_bus_rec rec;
|
||||
};
|
||||
|
||||
+struct radeon_powermanagement_info {
|
||||
+ struct timer_list idle_power_timer;
|
||||
+ struct work_struct reclock_work;
|
||||
+ struct drm_device *dev;
|
||||
+ uint32_t orig_memory_clock;
|
||||
+ uint32_t orig_engine_clock;
|
||||
+ uint32_t *mc_arb_init_values;
|
||||
+ uint8_t orig_fbdiv;
|
||||
+ int new_mem_clock;
|
||||
+ int new_engine_clock;
|
||||
+ int current_clock_state;
|
||||
+ int reclock_head;
|
||||
+ struct mutex pll_mutex;
|
||||
+ spinlock_t power_lock;
|
||||
+};
|
||||
+
|
||||
struct radeon_mode_info {
|
||||
struct atom_context *atom_context;
|
||||
struct radeon_bios_connector bios_connector[RADEON_MAX_BIOS_CONNECTOR];
|
||||
@@ -182,6 +198,9 @@ struct radeon_mode_info {
|
||||
struct radeon_pll mpll;
|
||||
uint32_t mclk;
|
||||
uint32_t sclk;
|
||||
+
|
||||
+ /* power management */
|
||||
+ struct radeon_powermanagement_info power;
|
||||
};
|
||||
|
||||
struct radeon_crtc {
|
||||
@@ -307,6 +326,12 @@ extern int radeon_crtc_cursor_move(struc
|
||||
|
||||
extern bool radeon_atom_get_clock_info(struct drm_device *dev);
|
||||
extern bool radeon_combios_get_clock_info(struct drm_device *dev);
|
||||
+extern void radeon_atom_get_engine_clock(struct drm_device *dev, int *engine_clock);
|
||||
+extern void radeon_atom_get_memory_clock(struct drm_device *dev, int *memory_clock);
|
||||
+extern void radeon_atom_set_engine_clock(struct drm_device *dev, int engine_clock);
|
||||
+extern void radeon_atom_set_memory_clock(struct drm_device *dev, int memory_clock);
|
||||
+extern void radeon_atom_initialize_memory_controller(struct drm_device *dev);
|
||||
+extern void radeon_atom_get_mc_arb_info(struct drm_device *dev);
|
||||
extern void radeon_atombios_get_lvds_info(struct radeon_encoder *encoder);
|
||||
extern void radeon_atombios_get_tmds_info(struct radeon_encoder *encoder);
|
||||
extern bool radeon_combios_get_lvds_info(struct radeon_encoder *encoder);
|
||||
diff -up linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_pm.c.mjg linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_pm.c
|
||||
--- linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_pm.c.mjg 2009-03-03 19:41:48.000000000 +0000
|
||||
+++ linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_pm.c 2009-03-03 20:53:05.000000000 +0000
|
||||
@@ -31,6 +31,8 @@
|
||||
|
||||
#include "drm_crtc_helper.h"
|
||||
|
||||
+#define RADEON_DOWNCLOCK_IDLE_MS 30
|
||||
+
|
||||
int radeon_suspend(struct drm_device *dev, pm_message_t state)
|
||||
{
|
||||
struct drm_radeon_private *dev_priv = dev->dev_private;
|
||||
@@ -255,3 +257,214 @@ bool radeon_set_pcie_lanes(struct drm_de
|
||||
return false;
|
||||
}
|
||||
|
||||
+static void radeon_pm_set_engine_clock(struct drm_device *dev, int freq)
|
||||
+{
|
||||
+ drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
+
|
||||
+ if (dev_priv->is_atom_bios)
|
||||
+ radeon_atom_set_engine_clock(dev, freq);
|
||||
+}
|
||||
+
|
||||
+static void radeon_pm_set_memory_clock(struct drm_device *dev, int freq)
|
||||
+{
|
||||
+ drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
+ struct radeon_powermanagement_info *power = &dev_priv->mode_info.power;
|
||||
+
|
||||
+ mutex_lock(&power->pll_mutex);
|
||||
+ radeon_do_cp_idle(dev_priv);
|
||||
+ if (dev_priv->is_atom_bios) {
|
||||
+ int mpll, spll, hclk, sclk, fbdiv, index, factor;
|
||||
+ switch (dev_priv->chip_family) {
|
||||
+ case CHIP_R520:
|
||||
+ case CHIP_RV530:
|
||||
+ case CHIP_RV560:
|
||||
+ case CHIP_RV570:
|
||||
+ case CHIP_R580:
|
||||
+ mpll = RADEON_READ_PLL(dev_priv, MPLL_FUNC_CNTL);
|
||||
+ fbdiv = (mpll & 0x1fe0) >> 5;
|
||||
+
|
||||
+ /* Set new fbdiv */
|
||||
+ factor = power->orig_memory_clock / freq;
|
||||
+ fbdiv = power->orig_fbdiv / factor;
|
||||
+
|
||||
+ mpll &= ~0x1fe0;
|
||||
+ mpll |= ((fbdiv << 5) | (1 << 24));
|
||||
+ mpll &= ~(1 << 25);
|
||||
+
|
||||
+ spll = RADEON_READ_PLL(dev_priv, SPLL_FUNC_CNTL);
|
||||
+
|
||||
+ hclk = fbdiv << 5;
|
||||
+ hclk += 0x20;
|
||||
+ hclk *= 8;
|
||||
+
|
||||
+ sclk = spll & 0x1fe0;
|
||||
+ sclk += 0x20;
|
||||
+ sclk *= 6;
|
||||
+ sclk = sclk >> 5;
|
||||
+
|
||||
+ index = (hclk/sclk);
|
||||
+
|
||||
+ R500_WRITE_MCIND(R530_MC_ARB_RATIO_CLK_SEQ,
|
||||
+ power->mc_arb_init_values[index]);
|
||||
+ RADEON_WRITE_PLL(dev_priv, MPLL_FUNC_CNTL, mpll);
|
||||
+ radeon_atom_initialize_memory_controller(dev);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ mutex_unlock(&power->pll_mutex);
|
||||
+}
|
||||
+
|
||||
+static int radeon_pm_get_active_crtcs(struct drm_device *dev, int *crtcs)
|
||||
+{
|
||||
+ struct drm_crtc *crtc;
|
||||
+ int count = 0;
|
||||
+ struct radeon_crtc *radeon_crtc;
|
||||
+
|
||||
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
|
||||
+ radeon_crtc = to_radeon_crtc(crtc);
|
||||
+ if (crtc->enabled) {
|
||||
+ count++;
|
||||
+ *crtcs |= (1 << radeon_crtc->crtc_id);
|
||||
+ }
|
||||
+ }
|
||||
+ return count;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static void radeon_pm_perform_transition(struct drm_device *dev)
|
||||
+{
|
||||
+ drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
+ struct radeon_powermanagement_info *power = &dev_priv->mode_info.power;
|
||||
+ int crtcs = 0, count;
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ count = radeon_pm_get_active_crtcs(dev, &crtcs);
|
||||
+
|
||||
+ spin_lock_irqsave(&power->power_lock, flags);
|
||||
+ switch (count) {
|
||||
+ case 0:
|
||||
+ schedule_work(&power->reclock_work);
|
||||
+ break;
|
||||
+ case 1:
|
||||
+ if (power->reclock_head)
|
||||
+ break;
|
||||
+ if (crtcs & 1) {
|
||||
+ power->reclock_head |= 1;
|
||||
+ drm_vblank_get(dev, 0);
|
||||
+ } else {
|
||||
+ power->reclock_head |= 2;
|
||||
+ drm_vblank_get(dev, 1);
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ /* Too many active heads */
|
||||
+ break;
|
||||
+ }
|
||||
+ spin_unlock_irqrestore(&power->power_lock, flags);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int radeon_pm_set_runtime_power(struct drm_device *dev, int value)
|
||||
+{
|
||||
+ drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
+ struct radeon_powermanagement_info *power = &dev_priv->mode_info.power;
|
||||
+
|
||||
+ if (power->current_clock_state == value)
|
||||
+ return 1;
|
||||
+
|
||||
+ switch (value) {
|
||||
+ case 0:
|
||||
+ power->new_engine_clock = 100*100;
|
||||
+ power->new_mem_clock = 100*100;
|
||||
+ break;
|
||||
+ case 1:
|
||||
+ power->new_engine_clock = power->orig_engine_clock;
|
||||
+ power->new_mem_clock = power->orig_memory_clock;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ power->current_clock_state = value;
|
||||
+ radeon_pm_perform_transition(dev);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void radeon_pm_idle_timeout(unsigned long d)
|
||||
+{
|
||||
+ struct drm_device *dev = (struct drm_device *)d;
|
||||
+ drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
+
|
||||
+ radeon_pm_set_runtime_power(dev, 0);
|
||||
+}
|
||||
+
|
||||
+static void radeon_pm_reclock_callback(struct work_struct *work)
|
||||
+{
|
||||
+ struct radeon_powermanagement_info *power =
|
||||
+ container_of(work, struct radeon_powermanagement_info,
|
||||
+ reclock_work);
|
||||
+ struct drm_device *dev = power->dev;
|
||||
+ drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
+
|
||||
+ mutex_lock(&dev_priv->cs.cs_mutex);
|
||||
+ radeon_pm_set_memory_clock(dev, power->new_mem_clock);
|
||||
+ radeon_pm_set_engine_clock(dev, power->new_engine_clock);
|
||||
+ mutex_unlock(&dev_priv->cs.cs_mutex);
|
||||
+}
|
||||
+
|
||||
+void radeon_pm_timer_reset(struct drm_device *dev)
|
||||
+{
|
||||
+ drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
+ struct radeon_powermanagement_info *power = &dev_priv->mode_info.power;
|
||||
+
|
||||
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
+ return;
|
||||
+
|
||||
+ radeon_pm_set_runtime_power(dev, 1);
|
||||
+
|
||||
+ mod_timer(&power->idle_power_timer,
|
||||
+ jiffies + msecs_to_jiffies(RADEON_DOWNCLOCK_IDLE_MS));
|
||||
+}
|
||||
+
|
||||
+void radeon_pm_init(struct drm_device *dev)
|
||||
+{
|
||||
+ drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
+ struct radeon_powermanagement_info *power = &dev_priv->mode_info.power;
|
||||
+
|
||||
+ power->dev = dev;
|
||||
+
|
||||
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
+ return;
|
||||
+
|
||||
+ if (dev_priv->is_atom_bios) {
|
||||
+ int mpll;
|
||||
+ radeon_atom_get_mc_arb_info(dev);
|
||||
+ radeon_atom_get_engine_clock(dev, &power->orig_engine_clock);
|
||||
+ radeon_atom_get_memory_clock(dev, &power->orig_memory_clock);
|
||||
+
|
||||
+ mpll = RADEON_READ_PLL(dev_priv, MPLL_FUNC_CNTL);
|
||||
+ dev_priv->mode_info.power.orig_fbdiv = (mpll & 0x1fe0) >> 5;
|
||||
+ }
|
||||
+
|
||||
+ setup_timer(&power->idle_power_timer, radeon_pm_idle_timeout,
|
||||
+ (unsigned long)dev);
|
||||
+ INIT_WORK(&power->reclock_work, radeon_pm_reclock_callback);
|
||||
+
|
||||
+ spin_lock_init(&power->power_lock);
|
||||
+
|
||||
+ power->current_clock_state = 1;
|
||||
+ power->reclock_head = 0;
|
||||
+
|
||||
+ radeon_pm_timer_reset(dev);
|
||||
+}
|
||||
+
|
||||
+void radeon_pm_exit(struct drm_device *dev)
|
||||
+{
|
||||
+ drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
+ struct radeon_powermanagement_info *power = &dev_priv->mode_info.power;
|
||||
+
|
||||
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
+ return;
|
||||
+
|
||||
+ del_timer_sync(&power->idle_power_timer);
|
||||
+}
|
||||
diff -up linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_reg.h.mjg linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_reg.h
|
||||
--- linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_reg.h.mjg 2009-03-03 19:41:48.000000000 +0000
|
||||
+++ linux-2.6.28.x86_64/drivers/gpu/drm/radeon/radeon_reg.h 2009-03-03 20:53:05.000000000 +0000
|
||||
@@ -303,6 +303,28 @@
|
||||
# define RADEON_PLL_WR_EN (1 << 7)
|
||||
# define RADEON_PLL_DIV_SEL (3 << 8)
|
||||
# define RADEON_PLL2_DIV_SEL_MASK ~(3 << 8)
|
||||
+#define SPLL_FUNC_CNTL 0x0000
|
||||
+#define MPLL_FUNC_CNTL 0x0004
|
||||
+#define GENERAL_PWRMGT 0x0008
|
||||
+# define RADEON_GLOBAL_PWRMGT_EN (1 << 0)
|
||||
+#define SCLK_PWRMGT_CNTL 0x0009
|
||||
+# define RADEON_SCLK_PWRMGT_OFF (1 << 0)
|
||||
+#define MCLK_PWRMGT_CNTL 0x000a
|
||||
+# define RADEON_MCLK_PWRMGT_OFF (1 << 0)
|
||||
+#define DYN_PWRMGT_SCLK_CNTL 0x000b
|
||||
+# define RADEON_ENGINE_DYNCLK_MODE (1 << 0)
|
||||
+# define RADEON_STATIC_SCREEN_EN (1 << 20)
|
||||
+# define RADEON_CLIENT_SELECT_POWER_EN (1 << 21)
|
||||
+#define DYN_SCLK_PWMEN_PIPE 0x000d
|
||||
+# define RADEON_PIPE_3D_NOT_AUTO (1 << 8)
|
||||
+#define DYN_SCLK_VOL_CNTL 0x000e
|
||||
+# define RADEON_IO_CG_VOLTAGE_DROP (1 << 0)
|
||||
+# define RADEON_VOLTAGE_DROP_SYNC (1 << 2)
|
||||
+#define CP_DYN_CNTL 0x000f
|
||||
+# define RADEON_CP_FORCEON (1 << 0)
|
||||
+# define RADEON_CP_LOWER_POWER_IGNORE (1 << 20)
|
||||
+# define RADEON_CP_NORMAL_POWER_IGNORE (1 << 21)
|
||||
+# define RADEON_CP_NORMAL_POWER_BUSY (1 << 24)
|
||||
#define RADEON_CLK_PWRMGT_CNTL 0x0014
|
||||
# define RADEON_ENGIN_DYNCLK_MODE (1 << 12)
|
||||
# define RADEON_ACTIVE_HILO_LAT_MASK (3 << 13)
|
||||
@@ -3961,7 +3983,48 @@
|
||||
# define AVIVO_I2C_RESET (1 << 8)
|
||||
|
||||
#define R600_GENERAL_PWRMGT 0x618
|
||||
+# define R600_GLOBAL_PWRMGT_EN (1 << 0)
|
||||
+# define R600_STATIC_PM_EN (1 << 1)
|
||||
+# define R600_MOBILE_SU (1 << 2)
|
||||
+# define R600_THERMAL_PROTECTION_DIS (1 << 3)
|
||||
+# define R600_THERMAL_PROTECTION_TYPE (1 << 4)
|
||||
+# define R600_ENABLE_GEN2PCIE (1 << 5)
|
||||
+# define R600_SW_GPIO_INDEX (1 << 6)
|
||||
+# define R600_LOW_VOLT_D2_ACPI (1 << 8)
|
||||
+# define R600_LOW_VOLT_D3_ACPI (1 << 9)
|
||||
+# define R600_VOLT_PWRMGT_EN (1 << 10)
|
||||
# define R600_OPEN_DRAIN_PADS (1 << 11)
|
||||
+# define R600_AVP_SCLK_EN (1 << 12)
|
||||
+# define R600_IDCT_SCLK_EN (1 << 13)
|
||||
+# define R600_GPU_COUNTER_ACPI (1 << 14)
|
||||
+# define R600_COUNTER_CLK (1 << 15)
|
||||
+# define R600_BACKBIAS_PAD_EN (1 << 16)
|
||||
+# define R600_BACKBIAS_VALUE (1 << 17)
|
||||
+# define R600_BACKBIAS_DPM_CNTL (1 << 18)
|
||||
+# define R600_SPREAD_SPECTRUM_INDEX (1 << 19)
|
||||
+# define R600_DYN_SPREAD_SPECTRUM_EN (1 << 21)
|
||||
+
|
||||
+#define R600_SCLK_PWRMGT_CNTL 0x620
|
||||
+# define R600_SCLK_PWRMGT_OFF (1 << 0)
|
||||
+# define R600_SCLK_TURNOFF (1 << 1)
|
||||
+# define R600_SPLL_TURNOFF (1 << 2)
|
||||
+# define R600_SU_SCLK_USE_BCLK (1 << 3)
|
||||
+# define R600_DYNAMIC_GFX_ISLAND_PWR_DOWN (1 << 4)
|
||||
+# define R600_DYNAMIC_GFX_ISLAND_LP (1 << 5)
|
||||
+# define R600_CLK_TURN_ON_STAGGER (1 << 6)
|
||||
+# define R600_CLK_TURN_OFF_STAGGER (1 << 7)
|
||||
+# define R600_FIR_FORCE_TREND_SEL (1 << 8)
|
||||
+# define R600_FIR_TREND_MODE (1 << 9)
|
||||
+# define R600_DYN_GFX_CLK_OFF_EN (1 << 10)
|
||||
+# define R600_VDDC3D_TURNOFF_D1 (1 << 11)
|
||||
+# define R600_VDDC3D_TURNOFF_D2 (1 << 12)
|
||||
+# define R600_VDDC3D_TURNOFF_D3 (1 << 13)
|
||||
+# define R600_SPLL_TURNOFF_D2 (1 << 14)
|
||||
+# define R600_SCLK_LOW_D1 (1 << 15)
|
||||
+# define R600_DYN_GFX_CLK_OFF_MC_EN (1 << 16)
|
||||
+
|
||||
+#define R600_MCLK_PWRMGT_CNTL 0x624
|
||||
+# define R600_MPLL_PWRMGT_OFF (1 << 0)
|
||||
|
||||
#define R600_LOWER_GPIO_ENABLE 0x710
|
||||
#define R600_CTXSW_VID_LOWER_GPIO_CNTL 0x718
|
||||
@@ -5331,5 +5394,6 @@
|
||||
# define R500_RS_IP_OFFSET_EN (1 << 31)
|
||||
|
||||
#define R500_DYN_SCLK_PWMEM_PIPE 0x000d /* PLL */
|
||||
+#define R530_MC_ARB_RATIO_CLK_SEQ 0x0016 /* MC */
|
||||
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
@ -1,50 +0,0 @@
|
||||
http://lists.freedesktop.org/archives/intel-gfx/2009-February/001313.html
|
||||
|
||||
--- a/drivers/gpu/drm/i915/i915_suspend.c.orig 2009-02-18 22:59:19.000000000 -0500
|
||||
+++ b/drivers/gpu/drm/i915/i915_suspend.c 2009-02-18 22:59:58.000000000 -0500
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "drm.h"
|
||||
#include "i915_drm.h"
|
||||
#include "i915_drv.h"
|
||||
+#include <drm/drm_crtc_helper.h>
|
||||
|
||||
static bool i915_pipe_enabled(struct drm_device *dev, enum pipe pipe)
|
||||
{
|
||||
@@ -519,6 +520,8 @@
|
||||
|
||||
i915_restore_vga(dev);
|
||||
|
||||
+ drm_helper_resume_force_mode(dev);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
From f5192bce8be69e5b33d7579bc282fef4d673e2c1 Mon Sep 17 00:00:00 2001
|
||||
From: Lubomir Rintel <lkundrak@v3.sk>
|
||||
Date: Sun, 15 Mar 2009 13:55:55 +0100
|
||||
Subject: [PATCH] Fix i915 nomodeset NULL deref. during PM resume
|
||||
|
||||
drm_helper_resume_force_mode() would crash while attempting to
|
||||
iterate through crtc_list, which is uninitialized when is modesetting
|
||||
disabled.
|
||||
---
|
||||
drivers/gpu/drm/i915/i915_suspend.c | 3 ++-
|
||||
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c
|
||||
index ef5fb6e..b138032 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_suspend.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_suspend.c
|
||||
@@ -520,7 +520,8 @@ int i915_restore_state(struct drm_device *dev)
|
||||
|
||||
i915_restore_vga(dev);
|
||||
|
||||
- drm_helper_resume_force_mode(dev);
|
||||
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
+ drm_helper_resume_force_mode(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
1.6.2
|
||||
|
@ -1,16 +0,0 @@
|
||||
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
|
||||
index 37427e4..08af9db 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_gem.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_gem.c
|
||||
@@ -2553,6 +2553,11 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
|
||||
+ /* We don't get the flushing right for these chipsets, use the
|
||||
+ * big hamer for now to avoid random crashiness. */
|
||||
+ if (IS_I855(dev) || IS_I865G(dev))
|
||||
+ wbinvd();
|
||||
+
|
||||
i915_verify_inactive(dev, __FILE__, __LINE__);
|
||||
|
||||
if (dev_priv->mm.wedged) {
|
@ -1,95 +0,0 @@
|
||||
[PATCH] drm: ignore LVDS on intel graphics systems that lie about having it
|
||||
|
||||
There are a number of small form factor desktop systems with Intel mobile
|
||||
graphics chips that lie and say they have an LVDS. With kernel mode-setting,
|
||||
this becomes a problem, and makes native resolution boot go haywire -- for
|
||||
example, my Dell Studio Hybrid, hooked to a 1920x1080 display claims to
|
||||
have a 1024x768 LVDS, and the resulting graphical boot on the 1920x1080
|
||||
display uses only the top left 1024x768, and auto-configured X will end
|
||||
up only 1024x768 as well. With this change, graphical boot and X
|
||||
both do 1920x1080 as expected.
|
||||
|
||||
Nb: one minor issue... Current Fedora rawhide, video playback using Xv
|
||||
makes X go off into the weeds with this patch added... But that's a bug
|
||||
elsewhere, still confident this patch DTRT.
|
||||
|
||||
Signed-off-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
---
|
||||
drivers/gpu/drm/i915/intel_lvds.c | 46 ++++++++++++++++++++++++++++++------
|
||||
1 files changed, 38 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
|
||||
index 6619f26..4d64686 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lvds.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lvds.c
|
||||
@@ -384,7 +384,51 @@ static const struct drm_encoder_funcs intel_lvds_enc_funcs = {
|
||||
.destroy = intel_lvds_enc_destroy,
|
||||
};
|
||||
|
||||
+static int __init intel_no_lvds_dmi_callback(const struct dmi_system_id *id)
|
||||
+{
|
||||
+ DRM_DEBUG("Skipping LVDS initialization for %s\n", id->ident);
|
||||
+ return 1;
|
||||
+}
|
||||
|
||||
+/* These systems claim to have LVDS, but really don't */
|
||||
+static const struct dmi_system_id __initdata intel_no_lvds[] = {
|
||||
+ {
|
||||
+ .callback = intel_no_lvds_dmi_callback,
|
||||
+ .ident = "Apple Mac Mini (Core series)",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "Macmini1,1"),
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
+ .callback = intel_no_lvds_dmi_callback,
|
||||
+ .ident = "Apple Mac Mini (Core 2 series)",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "Macmini2,1"),
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
+ .callback = intel_no_lvds_dmi_callback,
|
||||
+ .ident = "MSI IM-945GSE-A",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "MSI"),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "A9830IMS"),
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
+ .callback = intel_no_lvds_dmi_callback,
|
||||
+ .ident = "Dell Studio Hybrid",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "Studio Hybrid 140g"),
|
||||
+ },
|
||||
+ },
|
||||
+
|
||||
+ /* FIXME: add a check for the Aopen Mini PC */
|
||||
+
|
||||
+ { } /* terminating entry */
|
||||
+};
|
||||
|
||||
/**
|
||||
* intel_lvds_init - setup LVDS connectors on this device
|
||||
@@ -404,15 +440,9 @@ void intel_lvds_init(struct drm_device *dev)
|
||||
u32 lvds;
|
||||
int pipe;
|
||||
|
||||
- /* Blacklist machines that we know falsely report LVDS. */
|
||||
- /* FIXME: add a check for the Aopen Mini PC */
|
||||
-
|
||||
- /* Apple Mac Mini Core Duo and Mac Mini Core 2 Duo */
|
||||
- if(dmi_match(DMI_PRODUCT_NAME, "Macmini1,1") ||
|
||||
- dmi_match(DMI_PRODUCT_NAME, "Macmini2,1")) {
|
||||
- DRM_DEBUG("Skipping LVDS initialization for Apple Mac Mini\n");
|
||||
+ /* Skip init on machines we know falsely report LVDS */
|
||||
+ if (dmi_check_system(intel_no_lvds))
|
||||
return;
|
||||
- }
|
||||
|
||||
intel_output = kzalloc(sizeof(struct intel_output), GFP_KERNEL);
|
||||
if (!intel_output) {
|
@ -1,14 +0,0 @@
|
||||
diff -up linux-2.6.29.noarch/drivers/gpu/drm/i915/intel_display.c.jx linux-2.6.29.noarch/drivers/gpu/drm/i915/intel_display.c
|
||||
--- linux-2.6.29.noarch/drivers/gpu/drm/i915/intel_display.c.jx 2009-04-09 13:42:51.000000000 -0400
|
||||
+++ linux-2.6.29.noarch/drivers/gpu/drm/i915/intel_display.c 2009-04-09 13:44:14.000000000 -0400
|
||||
@@ -2011,8 +2011,8 @@ void intel_modeset_init(struct drm_devic
|
||||
dev->mode_config.max_width = 8192;
|
||||
dev->mode_config.max_height = 8192;
|
||||
} else {
|
||||
- dev->mode_config.max_width = 2048;
|
||||
- dev->mode_config.max_height = 2048;
|
||||
+ dev->mode_config.max_width = 4096;
|
||||
+ dev->mode_config.max_height = 4096;
|
||||
}
|
||||
|
||||
/* set memory base */
|
@ -1,65 +0,0 @@
|
||||
From: Jesse Barnes <jbarnes@virtuousgeek.org>
|
||||
Date: Tue, 14 Apr 2009 21:17:47 +0000 (-0700)
|
||||
Subject: drm/i915: allow tiled front buffers on 965+
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fanholt%2Fdrm-intel.git;a=commitdiff_plain;h=f544847fbaf099278343f875987a983f2b913134
|
||||
|
||||
drm/i915: allow tiled front buffers on 965+
|
||||
|
||||
This patch corrects a pretty big oversight in the KMS code for 965+
|
||||
chips. The current code is missing tiled surface register programming,
|
||||
so userland can allocate a tiled surface and use it for mode setting,
|
||||
resulting in corruption. This patch fixes that, allowing for tiled
|
||||
front buffers on 965+.
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Tested-by: Arkadiusz Miskiewicz <arekm@maven.pl>
|
||||
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
---
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
|
||||
index e805b59..5211947 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_reg.h
|
||||
+++ b/drivers/gpu/drm/i915/i915_reg.h
|
||||
@@ -1446,6 +1446,7 @@
|
||||
#define DISPPLANE_NO_LINE_DOUBLE 0
|
||||
#define DISPPLANE_STEREO_POLARITY_FIRST 0
|
||||
#define DISPPLANE_STEREO_POLARITY_SECOND (1<<18)
|
||||
+#define DISPPLANE_TILED (1<<10)
|
||||
#define DSPAADDR 0x70184
|
||||
#define DSPASTRIDE 0x70188
|
||||
#define DSPAPOS 0x7018C /* reserved */
|
||||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
|
||||
index c2c8e95..bdcda36 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_display.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
||||
@@ -657,6 +657,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
|
||||
int dspbase = (pipe == 0 ? DSPAADDR : DSPBADDR);
|
||||
int dspsurf = (pipe == 0 ? DSPASURF : DSPBSURF);
|
||||
int dspstride = (pipe == 0) ? DSPASTRIDE : DSPBSTRIDE;
|
||||
+ int dsptileoff = (pipe == 0 ? DSPATILEOFF : DSPBTILEOFF);
|
||||
int dspcntr_reg = (pipe == 0) ? DSPACNTR : DSPBCNTR;
|
||||
u32 dspcntr, alignment;
|
||||
int ret;
|
||||
@@ -733,6 +734,13 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
return -EINVAL;
|
||||
}
|
||||
+ if (IS_I965G(dev)) {
|
||||
+ if (obj_priv->tiling_mode != I915_TILING_NONE)
|
||||
+ dspcntr |= DISPPLANE_TILED;
|
||||
+ else
|
||||
+ dspcntr &= ~DISPPLANE_TILED;
|
||||
+ }
|
||||
+
|
||||
I915_WRITE(dspcntr_reg, dspcntr);
|
||||
|
||||
Start = obj_priv->gtt_offset;
|
||||
@@ -745,6 +753,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
|
||||
I915_READ(dspbase);
|
||||
I915_WRITE(dspsurf, Start);
|
||||
I915_READ(dspsurf);
|
||||
+ I915_WRITE(dsptileoff, (y << 16) | x);
|
||||
} else {
|
||||
I915_WRITE(dspbase, Start + Offset);
|
||||
I915_READ(dspbase);
|
19
packages/linux/init.d/01_time
Normal file
19
packages/linux/init.d/01_time
Normal file
@ -0,0 +1,19 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# set time
|
||||
#
|
||||
# runlevels: openelec, text, debug
|
||||
|
||||
. /etc/sysconfig
|
||||
|
||||
progress "saving Starttime"
|
||||
|
||||
ADJTIME=/etc/adjtime
|
||||
|
||||
#. /etc/funcs
|
||||
|
||||
if [ -x /sbin/hwclock ]; then
|
||||
make_persistent file ${ADJTIME} /var/data/config/adjtime create
|
||||
[ -r ${ADJTIME} ] && ! ( grep -q "LOCAL" ${ADJTIME} || grep -q "UTC" ${ADJTIME} ) && echo "UTC" >>${ADJTIME}
|
||||
/sbin/hwclock --hctosys
|
||||
fi
|
@ -6,6 +6,6 @@
|
||||
|
||||
. /etc/sysconfig
|
||||
|
||||
progress "saving Starttime"
|
||||
progress "saving Bootdate"
|
||||
|
||||
/bin/date > /tmp/bootdate
|
2457
packages/linux/patches/15_patch-2.6.31-rc3-git4.diff
Normal file
2457
packages/linux/patches/15_patch-2.6.31-rc3-git4.diff
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,9 +0,0 @@
|
||||
diff -Naur linux-2.6.30-rc3.orig/scripts/Makefile.lib linux-2.6.30-rc3/scripts/Makefile.lib
|
||||
--- linux-2.6.30-rc3.orig/scripts/Makefile.lib 2009-04-25 12:42:08.000000000 +0200
|
||||
+++ linux-2.6.30-rc3/scripts/Makefile.lib 2009-04-25 18:29:44.000000000 +0200
|
||||
@@ -204,4 +204,4 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
quiet_cmd_lzma = LZMA $@
|
||||
-cmd_lzma = (lzma -9 -c $< && $(size_append) $<) >$@ || (rm -f $@ ; false)
|
||||
+cmd_lzma = (lzma e -a1 -so $< && $(size_append) $<) >$@ || (rm -f $@ ; false)
|
@ -1,29 +0,0 @@
|
||||
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
|
||||
index cc0adb4..9303063 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_dma.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_dma.c
|
||||
@@ -1108,8 +1108,8 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
|
||||
/* don't enable GEM on PAE - needs agp + set_memory_* interface fixes */
|
||||
dev_priv->has_gem = 0;
|
||||
#else
|
||||
- /* enable GEM by default */
|
||||
- dev_priv->has_gem = 1;
|
||||
+ /* enable GEM by default, except on I8xx */
|
||||
+ dev_priv->has_gem = !IS_I8XX(dev) ? 1 : 0;
|
||||
#endif
|
||||
|
||||
i915_gem_load(dev);
|
||||
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
|
||||
index a70bf77..84664fe 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_drv.h
|
||||
+++ b/drivers/gpu/drm/i915/i915_drv.h
|
||||
@@ -750,6 +750,9 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
|
||||
#define IS_I855(dev) ((dev)->pci_device == 0x3582)
|
||||
#define IS_I865G(dev) ((dev)->pci_device == 0x2572)
|
||||
|
||||
+#define IS_I8XX(dev) (IS_I830(dev) || IS_845G(dev) || IS_I85X(dev) || \
|
||||
+ IS_I855(dev) || IS_I865G(dev))
|
||||
+
|
||||
#define IS_I915G(dev) ((dev)->pci_device == 0x2582 || (dev)->pci_device == 0x258a)
|
||||
#define IS_I915GM(dev) ((dev)->pci_device == 0x2592)
|
||||
#define IS_I945G(dev) ((dev)->pci_device == 0x2772)
|
@ -1,12 +0,0 @@
|
||||
diff -Naur linux-2.6.30-rc4.orig/drivers/gpu/drm/i915/i915_dma.c linux-2.6.30-rc4/drivers/gpu/drm/i915/i915_dma.c
|
||||
--- linux-2.6.30-rc4.orig/drivers/gpu/drm/i915/i915_dma.c 2009-05-06 21:37:41.000000000 +0200
|
||||
+++ linux-2.6.30-rc4/drivers/gpu/drm/i915/i915_dma.c 2009-05-06 21:39:59.000000000 +0200
|
||||
@@ -1149,7 +1149,7 @@
|
||||
dev_priv->has_gem = 0;
|
||||
#else
|
||||
/* enable GEM by default, except on I8xx */
|
||||
- dev_priv->has_gem = !IS_I8XX(dev) ? 1 : 0;
|
||||
+ dev_priv->has_gem = !IS_I8XX(dev) ? 0 : 0;
|
||||
#endif
|
||||
|
||||
dev->driver->get_vblank_counter = i915_get_vblank_counter;
|
File diff suppressed because it is too large
Load Diff
@ -1,27 +0,0 @@
|
||||
Index: linux-2.6.16/fs/fat/inode.c
|
||||
===================================================================
|
||||
--- linux-2.6.16.orig/fs/fat/inode.c 2006-03-20 06:53:29.000000000 +0100
|
||||
+++ linux-2.6.16/fs/fat/inode.c 2006-03-20 18:47:09.000000000 +0100
|
||||
@@ -952,7 +952,8 @@
|
||||
opts->shortname = 0;
|
||||
opts->name_check = 'n';
|
||||
opts->quiet = opts->showexec = opts->sys_immutable = opts->dotsOK = 0;
|
||||
- opts->utf8 = opts->unicode_xlate = 0;
|
||||
+ opts->utf8 = 1;
|
||||
+ opts->unicode_xlate = 0;
|
||||
opts->numtail = 1;
|
||||
opts->nocase = 0;
|
||||
*debug = 0;
|
||||
Index: linux-2.6.16/fs/isofs/inode.c
|
||||
===================================================================
|
||||
--- linux-2.6.16.orig/fs/isofs/inode.c 2006-03-20 06:53:29.000000000 +0100
|
||||
+++ linux-2.6.16/fs/isofs/inode.c 2006-03-20 18:47:09.000000000 +0100
|
||||
@@ -371,7 +371,7 @@
|
||||
popt->gid = 0;
|
||||
popt->uid = 0;
|
||||
popt->iocharset = NULL;
|
||||
- popt->utf8 = 0;
|
||||
+ popt->utf8 = 1;
|
||||
popt->session=-1;
|
||||
popt->sbsector=-1;
|
||||
if (!options)
|
@ -1,16 +0,0 @@
|
||||
--- linux-2.6.22.orig/drivers/net/8139too.c 2007-07-09 01:32:17.000000000 +0200
|
||||
+++ linux-2.6.22/drivers/net/8139too.c 2007-09-22 22:29:43.310538315 +0200
|
||||
@@ -1395,13 +1395,6 @@
|
||||
|
||||
rtl_check_media (dev, 1);
|
||||
|
||||
- if (tp->chipset >= CH_8139B) {
|
||||
- /* Disable magic packet scanning, which is enabled
|
||||
- * when PM is enabled in Config1. It can be reenabled
|
||||
- * via ETHTOOL_SWOL if desired. */
|
||||
- RTL_W8 (Config3, RTL_R8 (Config3) & ~Cfg3_Magic);
|
||||
- }
|
||||
-
|
||||
DPRINTK("init buffer addresses\n");
|
||||
|
||||
/* Lock Config[01234] and BMCR register writes */
|
@ -1,337 +0,0 @@
|
||||
diff -Naur linux-2.6.29.1/drivers/media/dvb/ttpci/av7110_av.c linux-2.6.29.1a/drivers/media/dvb/ttpci/av7110_av.c
|
||||
--- linux-2.6.29.1/drivers/media/dvb/ttpci/av7110_av.c 2009-04-02 22:55:27.000000000 +0200
|
||||
+++ linux-2.6.29.1a/drivers/media/dvb/ttpci/av7110_av.c 2009-04-14 14:11:04.000000000 +0200
|
||||
@@ -89,6 +89,11 @@
|
||||
|
||||
static void p_to_t(u8 const *buf, long int length, u16 pid,
|
||||
u8 *counter, struct dvb_demux_feed *feed);
|
||||
+static int write_ts_to_decoder(struct av7110 *av7110, int type, const u8 *buf, size_t len);
|
||||
+static int dvb_video_ioctl(struct inode *inode, struct file *file,
|
||||
+ unsigned int cmd, void *parg);
|
||||
+static int dvb_audio_ioctl(struct inode *inode, struct file *file,
|
||||
+ unsigned int cmd, void *parg);
|
||||
|
||||
|
||||
int av7110_record_cb(struct dvb_filter_pes2ts *p2t, u8 *buf, size_t len)
|
||||
@@ -437,6 +442,45 @@
|
||||
aux_ring_buffer_write(&av7110->aout, buf, count);
|
||||
}
|
||||
|
||||
+
|
||||
+#define FREE_COND_TS (dvb_ringbuffer_free(rb) >= 4096)
|
||||
+
|
||||
+static ssize_t ts_play(struct av7110 *av7110, const char __user *buf,
|
||||
+ unsigned long count, int nonblock, int type)
|
||||
+{
|
||||
+ struct dvb_ringbuffer *rb;
|
||||
+ u8 *kb;
|
||||
+ unsigned long todo = count;
|
||||
+
|
||||
+ dprintk(2, "%s: type %d cnt %lu\n", __func__, type, count);
|
||||
+
|
||||
+ rb = (type) ? &av7110->avout : &av7110->aout;
|
||||
+ kb = av7110->kbuf[type];
|
||||
+
|
||||
+ if (!kb)
|
||||
+ return -ENOBUFS;
|
||||
+
|
||||
+ if (nonblock && !FREE_COND_TS)
|
||||
+ return -EWOULDBLOCK;
|
||||
+
|
||||
+ while (todo >= TS_SIZE) {
|
||||
+ if (!FREE_COND_TS) {
|
||||
+ if (nonblock)
|
||||
+ return count - todo;
|
||||
+ if (wait_event_interruptible(rb->queue, FREE_COND_TS))
|
||||
+ return count - todo;
|
||||
+ }
|
||||
+ if (copy_from_user(kb, buf, TS_SIZE))
|
||||
+ return -EFAULT;
|
||||
+ write_ts_to_decoder(av7110, type, kb, TS_SIZE);
|
||||
+ todo -= TS_SIZE;
|
||||
+ buf += TS_SIZE;
|
||||
+ }
|
||||
+
|
||||
+ return count - todo;
|
||||
+}
|
||||
+
|
||||
+
|
||||
#define FREE_COND (dvb_ringbuffer_free(&av7110->avout) >= 20 * 1024 && \
|
||||
dvb_ringbuffer_free(&av7110->aout) >= 20 * 1024)
|
||||
|
||||
@@ -780,11 +824,32 @@
|
||||
}
|
||||
|
||||
|
||||
+static int write_ts_to_decoder(struct av7110 *av7110, int type, const u8 *buf, size_t len)
|
||||
+{
|
||||
+ struct ipack *ipack = &av7110->ipack[type];
|
||||
+
|
||||
+ if (!(buf[3] & PAYLOAD))
|
||||
+ return -1;
|
||||
+
|
||||
+ if (buf[1] & PAY_START)
|
||||
+ av7110_ipack_flush(ipack);
|
||||
+
|
||||
+ if (buf[3] & ADAPT_FIELD) {
|
||||
+ len -= buf[4] + 1;
|
||||
+ buf += buf[4] + 1;
|
||||
+ if (!len)
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ av7110_ipack_instant_repack(buf + 4, len - 4, ipack);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
int av7110_write_to_decoder(struct dvb_demux_feed *feed, const u8 *buf, size_t len)
|
||||
{
|
||||
struct dvb_demux *demux = feed->demux;
|
||||
struct av7110 *av7110 = (struct av7110 *) demux->priv;
|
||||
- struct ipack *ipack = &av7110->ipack[feed->pes_type];
|
||||
|
||||
dprintk(2, "av7110:%p, \n", av7110);
|
||||
|
||||
@@ -804,20 +869,7 @@
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (!(buf[3] & 0x10)) /* no payload? */
|
||||
- return -1;
|
||||
- if (buf[1] & 0x40)
|
||||
- av7110_ipack_flush(ipack);
|
||||
-
|
||||
- if (buf[3] & 0x20) { /* adaptation field? */
|
||||
- len -= buf[4] + 1;
|
||||
- buf += buf[4] + 1;
|
||||
- if (!len)
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- av7110_ipack_instant_repack(buf + 4, len - 4, &av7110->ipack[feed->pes_type]);
|
||||
- return 0;
|
||||
+ return write_ts_to_decoder(av7110, feed->pes_type, buf, len);
|
||||
}
|
||||
|
||||
|
||||
@@ -916,6 +968,8 @@
|
||||
{
|
||||
struct dvb_device *dvbdev = file->private_data;
|
||||
struct av7110 *av7110 = dvbdev->priv;
|
||||
+ unsigned char c;
|
||||
+ ssize_t rc;
|
||||
|
||||
dprintk(2, "av7110:%p, \n", av7110);
|
||||
|
||||
@@ -925,7 +979,19 @@
|
||||
if (av7110->videostate.stream_source != VIDEO_SOURCE_MEMORY)
|
||||
return -EPERM;
|
||||
|
||||
- return dvb_play(av7110, buf, count, file->f_flags & O_NONBLOCK, 1);
|
||||
+ if (get_user(c, buf))
|
||||
+ return -EFAULT;
|
||||
+ if (c == 0x47 && count % TS_SIZE == 0)
|
||||
+ rc = ts_play(av7110, buf, count, file->f_flags & O_NONBLOCK, 1);
|
||||
+ else
|
||||
+ rc = dvb_play(av7110, buf, count, file->f_flags & O_NONBLOCK, 1);
|
||||
+
|
||||
+ if (av7110->video_start_delayed) {
|
||||
+ av7110->video_start_delayed = false;
|
||||
+ dvb_video_ioctl(NULL, file, VIDEO_PLAY, NULL);
|
||||
+ }
|
||||
+
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
static unsigned int dvb_audio_poll(struct file *file, poll_table *wait)
|
||||
@@ -952,6 +1018,8 @@
|
||||
{
|
||||
struct dvb_device *dvbdev = file->private_data;
|
||||
struct av7110 *av7110 = dvbdev->priv;
|
||||
+ unsigned char c;
|
||||
+ ssize_t rc;
|
||||
|
||||
dprintk(2, "av7110:%p, \n", av7110);
|
||||
|
||||
@@ -959,7 +1027,20 @@
|
||||
printk(KERN_ERR "not audio source memory\n");
|
||||
return -EPERM;
|
||||
}
|
||||
- return dvb_aplay(av7110, buf, count, file->f_flags & O_NONBLOCK, 0);
|
||||
+
|
||||
+ if (get_user(c, buf))
|
||||
+ return -EFAULT;
|
||||
+ if (c == 0x47 && count % TS_SIZE == 0)
|
||||
+ rc = ts_play(av7110, buf, count, file->f_flags & O_NONBLOCK, 0);
|
||||
+ else
|
||||
+ rc = dvb_aplay(av7110, buf, count, file->f_flags & O_NONBLOCK, 0);
|
||||
+
|
||||
+ if (av7110->audio_start_delayed) {
|
||||
+ av7110->audio_start_delayed = false;
|
||||
+ dvb_audio_ioctl(NULL, file, AUDIO_PLAY, NULL);
|
||||
+ }
|
||||
+
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
static u8 iframe_header[] = { 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x80, 0x00, 0x00 };
|
||||
@@ -1044,6 +1125,7 @@
|
||||
|
||||
switch (cmd) {
|
||||
case VIDEO_STOP:
|
||||
+ av7110->video_start_delayed = false;
|
||||
av7110->videostate.play_state = VIDEO_STOPPED;
|
||||
if (av7110->videostate.stream_source == VIDEO_SOURCE_MEMORY)
|
||||
ret = av7110_av_stop(av7110, RP_VIDEO);
|
||||
@@ -1055,6 +1137,12 @@
|
||||
break;
|
||||
|
||||
case VIDEO_PLAY:
|
||||
+ if (av7110->videostate.stream_source == VIDEO_SOURCE_MEMORY) {
|
||||
+ if (dvb_ringbuffer_empty(&av7110->avout)) {
|
||||
+ av7110->video_start_delayed = true;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
av7110->trickmode = TRICK_NONE;
|
||||
if (av7110->videostate.play_state == VIDEO_FREEZED) {
|
||||
av7110->videostate.play_state = VIDEO_PLAYING;
|
||||
@@ -1062,7 +1150,6 @@
|
||||
if (ret)
|
||||
break;
|
||||
}
|
||||
-
|
||||
if (av7110->videostate.stream_source == VIDEO_SOURCE_MEMORY) {
|
||||
if (av7110->playing == RP_AV) {
|
||||
ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Stop, 0);
|
||||
@@ -1079,6 +1166,8 @@
|
||||
break;
|
||||
|
||||
case VIDEO_FREEZE:
|
||||
+ if (av7110->video_start_delayed)
|
||||
+ break;
|
||||
av7110->videostate.play_state = VIDEO_FREEZED;
|
||||
if (av7110->playing & RP_VIDEO)
|
||||
ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Pause, 0);
|
||||
@@ -1089,6 +1178,8 @@
|
||||
break;
|
||||
|
||||
case VIDEO_CONTINUE:
|
||||
+ if (av7110->video_start_delayed)
|
||||
+ break;
|
||||
if (av7110->playing & RP_VIDEO)
|
||||
ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Continue, 0);
|
||||
if (!ret)
|
||||
@@ -1169,6 +1260,8 @@
|
||||
}
|
||||
|
||||
case VIDEO_FAST_FORWARD:
|
||||
+ if (av7110->video_start_delayed)
|
||||
+ break;
|
||||
//note: arg is ignored by firmware
|
||||
if (av7110->playing & RP_VIDEO)
|
||||
ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY,
|
||||
@@ -1182,6 +1275,8 @@
|
||||
break;
|
||||
|
||||
case VIDEO_SLOWMOTION:
|
||||
+ if (av7110->video_start_delayed)
|
||||
+ break;
|
||||
if (av7110->playing&RP_VIDEO) {
|
||||
ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Slow, 2, 0, 0);
|
||||
if (!ret)
|
||||
@@ -1228,13 +1323,13 @@
|
||||
break;
|
||||
|
||||
case VIDEO_SET_STREAMTYPE:
|
||||
-
|
||||
break;
|
||||
|
||||
default:
|
||||
ret = -ENOIOCTLCMD;
|
||||
break;
|
||||
}
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1254,6 +1349,7 @@
|
||||
|
||||
switch (cmd) {
|
||||
case AUDIO_STOP:
|
||||
+ av7110->audio_start_delayed = false;
|
||||
if (av7110->audiostate.stream_source == AUDIO_SOURCE_MEMORY)
|
||||
ret = av7110_av_stop(av7110, RP_AUDIO);
|
||||
else
|
||||
@@ -1263,8 +1359,13 @@
|
||||
break;
|
||||
|
||||
case AUDIO_PLAY:
|
||||
- if (av7110->audiostate.stream_source == AUDIO_SOURCE_MEMORY)
|
||||
+ if (av7110->audiostate.stream_source == AUDIO_SOURCE_MEMORY) {
|
||||
+ if (dvb_ringbuffer_avail(&av7110->aout) < 4096) {
|
||||
+ av7110->audio_start_delayed = true;
|
||||
+ break;
|
||||
+ }
|
||||
ret = av7110_av_start_play(av7110, RP_AUDIO);
|
||||
+ }
|
||||
if (!ret)
|
||||
ret = audcom(av7110, AUDIO_CMD_UNMUTE);
|
||||
if (!ret)
|
||||
@@ -1272,12 +1373,16 @@
|
||||
break;
|
||||
|
||||
case AUDIO_PAUSE:
|
||||
+ if (av7110->audio_start_delayed)
|
||||
+ break;
|
||||
ret = audcom(av7110, AUDIO_CMD_MUTE);
|
||||
if (!ret)
|
||||
av7110->audiostate.play_state = AUDIO_PAUSED;
|
||||
break;
|
||||
|
||||
case AUDIO_CONTINUE:
|
||||
+ if (av7110->audio_start_delayed)
|
||||
+ break;
|
||||
if (av7110->audiostate.play_state == AUDIO_PAUSED) {
|
||||
av7110->audiostate.play_state = AUDIO_PLAYING;
|
||||
ret = audcom(av7110, AUDIO_CMD_UNMUTE | AUDIO_CMD_PCM16);
|
||||
@@ -1366,9 +1471,10 @@
|
||||
ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY,
|
||||
__Play, 2, AV_PES, 0);
|
||||
break;
|
||||
- case AUDIO_SET_ID:
|
||||
|
||||
+ case AUDIO_SET_ID:
|
||||
break;
|
||||
+
|
||||
case AUDIO_SET_MIXER:
|
||||
{
|
||||
struct audio_mixer *amix = (struct audio_mixer *)parg;
|
||||
@@ -1376,11 +1482,14 @@
|
||||
ret = av7110_set_volume(av7110, amix->volume_left, amix->volume_right);
|
||||
break;
|
||||
}
|
||||
+
|
||||
case AUDIO_SET_STREAMTYPE:
|
||||
break;
|
||||
+
|
||||
default:
|
||||
ret = -ENOIOCTLCMD;
|
||||
}
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
diff -Naur linux-2.6.29.1/drivers/media/dvb/ttpci/av7110.h linux-2.6.29.1a/drivers/media/dvb/ttpci/av7110.h
|
||||
--- linux-2.6.29.1/drivers/media/dvb/ttpci/av7110.h 2009-04-02 22:55:27.000000000 +0200
|
||||
+++ linux-2.6.29.1a/drivers/media/dvb/ttpci/av7110.h 2009-04-14 14:11:04.000000000 +0200
|
||||
@@ -163,6 +163,8 @@
|
||||
#define RP_VIDEO 1
|
||||
#define RP_AUDIO 2
|
||||
#define RP_AV 3
|
||||
+ bool audio_start_delayed;
|
||||
+ bool video_start_delayed;
|
||||
|
||||
|
||||
/* OSD */
|
File diff suppressed because it is too large
Load Diff
@ -1,13 +0,0 @@
|
||||
diff --git a/sound/pci/hda/hda_beep.c b/sound/pci/hda/hda_beep.c
|
||||
index 3ecd7e7..2762b40 100644
|
||||
--- a/sound/pci/hda/hda_beep.c
|
||||
+++ b/sound/pci/hda/hda_beep.c
|
||||
@@ -122,7 +122,7 @@ int snd_hda_attach_beep_device(struct hda_codec *codec, int nid)
|
||||
beep->nid = nid;
|
||||
beep->dev = input_dev;
|
||||
beep->codec = codec;
|
||||
- beep->enabled = 1;
|
||||
+ beep->enabled = 0;
|
||||
codec->beep = beep;
|
||||
|
||||
INIT_WORK(&beep->beep_work, &snd_hda_generate_beep);
|
@ -1,35 +0,0 @@
|
||||
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
|
||||
index c8d9178..7d3bb15 100644
|
||||
--- a/sound/pci/hda/hda_intel.c
|
||||
+++ b/sound/pci/hda/hda_intel.c
|
||||
@@ -1774,6 +1774,7 @@ azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
|
||||
struct azx_pcm *apcm;
|
||||
int pcm_dev = cpcm->device;
|
||||
int s, err;
|
||||
+ size_t prealloc_min = 64*1024; /* 64KB */
|
||||
|
||||
if (pcm_dev >= AZX_MAX_PCMS) {
|
||||
snd_printk(KERN_ERR SFX "Invalid PCM device number %d\n",
|
||||
@@ -1807,10 +1808,21 @@ azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
|
||||
if (cpcm->stream[s].substreams)
|
||||
snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
|
||||
}
|
||||
+
|
||||
/* buffer pre-allocation */
|
||||
+
|
||||
+ /* subtle, don't allocate a big buffer for modems...
|
||||
+ * also, don't just test 32BIT_MASK, since azx supports
|
||||
+ * 64-bit DMA in some cases.
|
||||
+ */
|
||||
+ /* lennart wants a 2.2MB buffer for 2sec of 48khz */
|
||||
+ if (pcm->dev_class == SNDRV_PCM_CLASS_GENERIC &&
|
||||
+ chip->pci->dma_mask >= DMA_32BIT_MASK)
|
||||
+ prealloc_min = 4 * 1024 * 1024; /* 4MB */
|
||||
+
|
||||
snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
|
||||
snd_dma_pci_data(chip->pci),
|
||||
- 1024 * 64, 32 * 1024 * 1024);
|
||||
+ prealloc_min, 32 * 1024 * 1024);
|
||||
return 0;
|
||||
}
|
||||
|
@ -0,0 +1,25 @@
|
||||
From 76ec0e2e6d6edf81abc0331d5e7873ef7b2f6019 Mon Sep 17 00:00:00 2001
|
||||
From: Kyle McMartin <kyle@phobos.i.jkkm.org>
|
||||
Date: Wed, 8 Jul 2009 13:06:01 -0400
|
||||
Subject: [PATCH 6/6] fedora: linux-2.6-debug-always-inline-kzalloc.patch
|
||||
|
||||
---
|
||||
include/linux/slab.h | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/include/linux/slab.h b/include/linux/slab.h
|
||||
index 2da8372..d4ef74f 100644
|
||||
--- a/include/linux/slab.h
|
||||
+++ b/include/linux/slab.h
|
||||
@@ -310,7 +310,7 @@ static inline void *kmem_cache_zalloc(struct kmem_cache *k, gfp_t flags)
|
||||
* @size: how many bytes of memory are required.
|
||||
* @flags: the type of memory to allocate (see kmalloc).
|
||||
*/
|
||||
-static inline void *kzalloc(size_t size, gfp_t flags)
|
||||
+static __always_inline void *kzalloc(size_t size, gfp_t flags)
|
||||
{
|
||||
return kmalloc(size, flags | __GFP_ZERO);
|
||||
}
|
||||
--
|
||||
1.6.2.5
|
||||
|
27
packages/linux/patches/linux-2.6-e1000-ich9.diff
Normal file
27
packages/linux/patches/linux-2.6-e1000-ich9.diff
Normal file
@ -0,0 +1,27 @@
|
||||
diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c
|
||||
index 8f8139d..22c49ec 100644
|
||||
--- a/drivers/net/e1000e/ich8lan.c
|
||||
+++ b/drivers/net/e1000e/ich8lan.c
|
||||
@@ -209,6 +209,12 @@ static s32 e1000_init_phy_params_ich8lan(struct e1000_hw *hw)
|
||||
|
||||
/* Verify phy id */
|
||||
switch (phy->id) {
|
||||
+ case 0x0:
|
||||
+ if (hw->adapter->pdev->device == 0x10be)
|
||||
+ hw_dbg(hw, "got 0 phy id, trying anyway");
|
||||
+ /* Fall through to IGP03E1000 case below */
|
||||
+ else
|
||||
+ return -E1000_ERR_PHY;
|
||||
case IGP03E1000_E_PHY_ID:
|
||||
phy->type = e1000_phy_igp_3;
|
||||
phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT;
|
||||
--- linux-2.6.25.noarch/drivers/net/e1000e/netdev.c~ 2008-05-16 10:31:41.000000000 -0400
|
||||
+++ linux-2.6.25.noarch/drivers/net/e1000e/netdev.c 2008-05-16 10:32:43.000000000 -0400
|
||||
@@ -4599,6 +4599,7 @@ static struct pci_device_id e1000_pci_tb
|
||||
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M), board_ich9lan },
|
||||
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_AMT), board_ich9lan },
|
||||
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_V), board_ich9lan },
|
||||
+ { PCI_VDEVICE(INTEL, 0x10be), board_ich9lan },
|
||||
|
||||
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_LM), board_ich9lan },
|
||||
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_LF), board_ich9lan },
|
@ -1,32 +0,0 @@
|
||||
diff -Naur linux-2.6.29-rc8-old/drivers/ata/libata-core.c linux-2.6.29-rc8-new/drivers/ata/libata-core.c
|
||||
--- linux-2.6.29-rc8-old/drivers/ata/libata-core.c 2009-03-15 11:44:28.000000000 -0700
|
||||
+++ linux-2.6.29-rc8-new/drivers/ata/libata-core.c 2009-03-15 11:50:46.000000000 -0700
|
||||
@@ -4444,6 +4444,12 @@
|
||||
"other device, disabling DMA\n");
|
||||
}
|
||||
|
||||
+ if (ata_id_is_cfa(dev->id)) {
|
||||
+ xfer_mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA);
|
||||
+ ata_dev_printk(dev, KERN_WARNING,
|
||||
+ "device is a CFA, disabling DMA\n");
|
||||
+ }
|
||||
+
|
||||
if (ap->flags & ATA_FLAG_NO_IORDY)
|
||||
xfer_mask &= ata_pio_mask_no_iordy(dev);
|
||||
|
||||
diff -Naur linux-2.6.29-rc8-old/drivers/ide/ide-dma.c linux-2.6.29-rc8-new/drivers/ide/ide-dma.c
|
||||
--- linux-2.6.29-rc8-old/drivers/ide/ide-dma.c 2009-03-15 11:44:28.000000000 -0700
|
||||
+++ linux-2.6.29-rc8-new/drivers/ide/ide-dma.c 2009-03-15 11:50:46.000000000 -0700
|
||||
@@ -217,6 +217,12 @@
|
||||
drive->name, (char *)&id[ATA_ID_PROD]);
|
||||
return blacklist;
|
||||
}
|
||||
+ if (id->config == 0x848a) {
|
||||
+ printk(KERN_WARNING "%s: Disabling (U)DMA for %s (CFA)\n",
|
||||
+ drive->name, id->model);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(__ide_dma_bad_drive);
|
File diff suppressed because it is too large
Load Diff
429
packages/linux/patches/lirc_streamzap-buffer-rework.diff
Normal file
429
packages/linux/patches/lirc_streamzap-buffer-rework.diff
Normal file
@ -0,0 +1,429 @@
|
||||
Rework the lirc_streamzap buffers a bit, see if we can't get it behaving
|
||||
better when the receiver is pulled... (rhbz#508952)
|
||||
|
||||
---
|
||||
drivers/input/lirc/lirc_streamzap.c | 207 +++++++++++++++++++----------------
|
||||
1 files changed, 112 insertions(+), 95 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/lirc/lirc_streamzap.c b/drivers/input/lirc/lirc_streamzap.c
|
||||
index d1ce354..a5f3140 100644
|
||||
--- a/drivers/input/lirc/lirc_streamzap.c
|
||||
+++ b/drivers/input/lirc/lirc_streamzap.c
|
||||
@@ -73,7 +73,7 @@ MODULE_DEVICE_TABLE(usb, streamzap_table);
|
||||
#define STREAMZAP_RESOLUTION 256
|
||||
|
||||
/* number of samples buffered */
|
||||
-#define STREAMZAP_BUFFER_SIZE 128
|
||||
+#define STREAMZAP_BUF_LEN 128
|
||||
|
||||
enum StreamzapDecoderState {
|
||||
PulseSpace,
|
||||
@@ -121,9 +121,8 @@ struct usb_streamzap {
|
||||
struct urb *urb_in;
|
||||
|
||||
/* lirc */
|
||||
- struct lirc_driver driver;
|
||||
- struct lirc_buffer delay_buf;
|
||||
- struct lirc_buffer lirc_buf;
|
||||
+ struct lirc_driver *driver;
|
||||
+ struct lirc_buffer *delay_buf;
|
||||
|
||||
/* timer used to support delay buffering */
|
||||
struct timer_list delay_timer;
|
||||
@@ -199,18 +198,18 @@ static void delay_timeout(unsigned long arg)
|
||||
|
||||
spin_lock_irqsave(&sz->timer_lock, flags);
|
||||
|
||||
- if (!lirc_buffer_empty(&sz->delay_buf) &&
|
||||
- !lirc_buffer_full(&sz->lirc_buf)) {
|
||||
- lirc_buffer_read(&sz->delay_buf, (unsigned char *) &data);
|
||||
- lirc_buffer_write(&sz->lirc_buf, (unsigned char *) &data);
|
||||
+ if (!lirc_buffer_empty(sz->delay_buf) &&
|
||||
+ !lirc_buffer_full(sz->driver->rbuf)) {
|
||||
+ lirc_buffer_read(sz->delay_buf, (unsigned char *) &data);
|
||||
+ lirc_buffer_write(sz->driver->rbuf, (unsigned char *) &data);
|
||||
}
|
||||
- if (!lirc_buffer_empty(&sz->delay_buf)) {
|
||||
- while (lirc_buffer_available(&sz->delay_buf) <
|
||||
- STREAMZAP_BUFFER_SIZE/2 &&
|
||||
- !lirc_buffer_full(&sz->lirc_buf)) {
|
||||
- lirc_buffer_read(&sz->delay_buf,
|
||||
+ if (!lirc_buffer_empty(sz->delay_buf)) {
|
||||
+ while (lirc_buffer_available(sz->delay_buf) <
|
||||
+ STREAMZAP_BUF_LEN / 2 &&
|
||||
+ !lirc_buffer_full(sz->driver->rbuf)) {
|
||||
+ lirc_buffer_read(sz->delay_buf,
|
||||
(unsigned char *) &data);
|
||||
- lirc_buffer_write(&sz->lirc_buf,
|
||||
+ lirc_buffer_write(sz->driver->rbuf,
|
||||
(unsigned char *) &data);
|
||||
}
|
||||
if (sz->timer_running) {
|
||||
@@ -221,8 +220,8 @@ static void delay_timeout(unsigned long arg)
|
||||
sz->timer_running = 0;
|
||||
}
|
||||
|
||||
- if (!lirc_buffer_empty(&sz->lirc_buf))
|
||||
- wake_up(&sz->lirc_buf.wait_poll);
|
||||
+ if (!lirc_buffer_empty(sz->driver->rbuf))
|
||||
+ wake_up(&sz->driver->rbuf->wait_poll);
|
||||
|
||||
spin_unlock_irqrestore(&sz->timer_lock, flags);
|
||||
}
|
||||
@@ -232,18 +231,18 @@ static void flush_delay_buffer(struct usb_streamzap *sz)
|
||||
int data;
|
||||
int empty = 1;
|
||||
|
||||
- while (!lirc_buffer_empty(&sz->delay_buf)) {
|
||||
+ while (!lirc_buffer_empty(sz->delay_buf)) {
|
||||
empty = 0;
|
||||
- lirc_buffer_read(&sz->delay_buf, (unsigned char *) &data);
|
||||
- if (!lirc_buffer_full(&sz->lirc_buf)) {
|
||||
- lirc_buffer_write(&sz->lirc_buf,
|
||||
+ lirc_buffer_read(sz->delay_buf, (unsigned char *) &data);
|
||||
+ if (!lirc_buffer_full(sz->driver->rbuf)) {
|
||||
+ lirc_buffer_write(sz->driver->rbuf,
|
||||
(unsigned char *) &data);
|
||||
} else {
|
||||
- dprintk("buffer overflow", sz->driver.minor);
|
||||
+ dprintk("buffer overflow", sz->driver->minor);
|
||||
}
|
||||
}
|
||||
if (!empty)
|
||||
- wake_up(&sz->lirc_buf.wait_poll);
|
||||
+ wake_up(&sz->driver->rbuf->wait_poll);
|
||||
}
|
||||
|
||||
static void push(struct usb_streamzap *sz, unsigned char *data)
|
||||
@@ -251,20 +250,20 @@ static void push(struct usb_streamzap *sz, unsigned char *data)
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&sz->timer_lock, flags);
|
||||
- if (lirc_buffer_full(&sz->delay_buf)) {
|
||||
+ if (lirc_buffer_full(sz->delay_buf)) {
|
||||
int read_data;
|
||||
|
||||
- lirc_buffer_read(&sz->delay_buf,
|
||||
+ lirc_buffer_read(sz->delay_buf,
|
||||
(unsigned char *) &read_data);
|
||||
- if (!lirc_buffer_full(&sz->lirc_buf)) {
|
||||
- lirc_buffer_write(&sz->lirc_buf,
|
||||
+ if (!lirc_buffer_full(sz->driver->rbuf)) {
|
||||
+ lirc_buffer_write(sz->driver->rbuf,
|
||||
(unsigned char *) &read_data);
|
||||
} else {
|
||||
- dprintk("buffer overflow", sz->driver.minor);
|
||||
+ dprintk("buffer overflow", sz->driver->minor);
|
||||
}
|
||||
}
|
||||
|
||||
- lirc_buffer_write(&sz->delay_buf, data);
|
||||
+ lirc_buffer_write(sz->delay_buf, data);
|
||||
|
||||
if (!sz->timer_running) {
|
||||
sz->delay_timer.expires = jiffies + HZ/10;
|
||||
@@ -296,7 +295,7 @@ static void push_full_pulse(struct usb_streamzap *sz,
|
||||
sz->signal_last.tv_usec);
|
||||
tmp -= sz->sum;
|
||||
}
|
||||
- dprintk("ls %u", sz->driver.minor, tmp);
|
||||
+ dprintk("ls %u", sz->driver->minor, tmp);
|
||||
push(sz, (char *)&tmp);
|
||||
|
||||
sz->idle = 0;
|
||||
@@ -308,7 +307,7 @@ static void push_full_pulse(struct usb_streamzap *sz,
|
||||
sz->sum += pulse;
|
||||
pulse |= PULSE_BIT;
|
||||
|
||||
- dprintk("p %u", sz->driver.minor, pulse & PULSE_MASK);
|
||||
+ dprintk("p %u", sz->driver->minor, pulse & PULSE_MASK);
|
||||
push(sz, (char *)&pulse);
|
||||
}
|
||||
|
||||
@@ -326,7 +325,7 @@ static void push_full_space(struct usb_streamzap *sz,
|
||||
space = ((int) value)*STREAMZAP_RESOLUTION;
|
||||
space += STREAMZAP_RESOLUTION/2;
|
||||
sz->sum += space;
|
||||
- dprintk("s %u", sz->driver.minor, space);
|
||||
+ dprintk("s %u", sz->driver->minor, space);
|
||||
push(sz, (char *)&space);
|
||||
}
|
||||
|
||||
@@ -368,10 +367,10 @@ static void usb_streamzap_irq(struct urb *urb)
|
||||
break;
|
||||
}
|
||||
|
||||
- dprintk("received %d", sz->driver.minor, urb->actual_length);
|
||||
+ dprintk("received %d", sz->driver->minor, urb->actual_length);
|
||||
if (!sz->flush) {
|
||||
for (i = 0; i < urb->actual_length; i++) {
|
||||
- dprintk("%d: %x", sz->driver.minor,
|
||||
+ dprintk("%d: %x", sz->driver->minor,
|
||||
i, (unsigned char) sz->buf_in[i]);
|
||||
switch (sz->decoder_state) {
|
||||
case PulseSpace:
|
||||
@@ -443,14 +442,18 @@ static int streamzap_probe(struct usb_interface *interface,
|
||||
{
|
||||
struct usb_device *udev = interface_to_usbdev(interface);
|
||||
struct usb_host_interface *iface_host;
|
||||
- int retval = -ENOMEM;
|
||||
- struct usb_streamzap *sz = NULL;
|
||||
+ struct usb_streamzap *sz;
|
||||
+ struct lirc_driver *driver;
|
||||
+ struct lirc_buffer *lirc_buf;
|
||||
+ struct lirc_buffer *delay_buf;
|
||||
char buf[63], name[128] = "";
|
||||
+ int retval = -ENOMEM;
|
||||
+ int minor = 0;
|
||||
|
||||
/* Allocate space for device driver specific data */
|
||||
sz = kzalloc(sizeof(struct usb_streamzap), GFP_KERNEL);
|
||||
if (sz == NULL)
|
||||
- goto error;
|
||||
+ return -ENOMEM;
|
||||
|
||||
sz->udev = udev;
|
||||
sz->interface = interface;
|
||||
@@ -462,7 +465,7 @@ static int streamzap_probe(struct usb_interface *interface,
|
||||
err("%s: Unexpected desc.bNumEndpoints (%d)", __func__,
|
||||
iface_host->desc.bNumEndpoints);
|
||||
retval = -ENODEV;
|
||||
- goto error;
|
||||
+ goto free_sz;
|
||||
}
|
||||
|
||||
sz->endpoint = &(iface_host->endpoint[0].desc);
|
||||
@@ -471,7 +474,7 @@ static int streamzap_probe(struct usb_interface *interface,
|
||||
err("%s: endpoint doesn't match input device 02%02x",
|
||||
__func__, sz->endpoint->bEndpointAddress);
|
||||
retval = -ENODEV;
|
||||
- goto error;
|
||||
+ goto free_sz;
|
||||
}
|
||||
|
||||
if ((sz->endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
|
||||
@@ -479,13 +482,13 @@ static int streamzap_probe(struct usb_interface *interface,
|
||||
err("%s: endpoint attributes don't match xfer 02%02x",
|
||||
__func__, sz->endpoint->bmAttributes);
|
||||
retval = -ENODEV;
|
||||
- goto error;
|
||||
+ goto free_sz;
|
||||
}
|
||||
|
||||
if (sz->endpoint->wMaxPacketSize == 0) {
|
||||
err("%s: endpoint message size==0? ", __func__);
|
||||
retval = -ENODEV;
|
||||
- goto error;
|
||||
+ goto free_sz;
|
||||
}
|
||||
|
||||
/* Allocate the USB buffer and IRQ URB */
|
||||
@@ -494,36 +497,43 @@ static int streamzap_probe(struct usb_interface *interface,
|
||||
sz->buf_in = usb_buffer_alloc(sz->udev, sz->buf_in_len,
|
||||
GFP_ATOMIC, &sz->dma_in);
|
||||
if (sz->buf_in == NULL)
|
||||
- goto error;
|
||||
+ goto free_sz;
|
||||
|
||||
sz->urb_in = usb_alloc_urb(0, GFP_KERNEL);
|
||||
if (sz->urb_in == NULL)
|
||||
- goto error;
|
||||
+ goto free_sz;
|
||||
|
||||
/* Connect this device to the LIRC sub-system */
|
||||
-
|
||||
- if (lirc_buffer_init(&sz->lirc_buf, sizeof(int),
|
||||
- STREAMZAP_BUFFER_SIZE))
|
||||
- goto error;
|
||||
-
|
||||
- if (lirc_buffer_init(&sz->delay_buf, sizeof(int),
|
||||
- STREAMZAP_BUFFER_SIZE)) {
|
||||
- lirc_buffer_free(&sz->lirc_buf);
|
||||
- goto error;
|
||||
- }
|
||||
-
|
||||
- strcpy(sz->driver.name, DRIVER_NAME);
|
||||
- sz->driver.minor = -1;
|
||||
- sz->driver.sample_rate = 0;
|
||||
- sz->driver.code_length = sizeof(int) * 8;
|
||||
- sz->driver.features = LIRC_CAN_REC_MODE2 | LIRC_CAN_GET_REC_RESOLUTION;
|
||||
- sz->driver.data = sz;
|
||||
- sz->driver.rbuf = &sz->lirc_buf;
|
||||
- sz->driver.set_use_inc = &streamzap_use_inc;
|
||||
- sz->driver.set_use_dec = &streamzap_use_dec;
|
||||
- sz->driver.fops = &streamzap_fops;
|
||||
- sz->driver.dev = &interface->dev;
|
||||
- sz->driver.owner = THIS_MODULE;
|
||||
+ driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
|
||||
+ if (!driver)
|
||||
+ goto free_sz;
|
||||
+
|
||||
+ lirc_buf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
|
||||
+ if (!lirc_buf)
|
||||
+ goto free_driver;
|
||||
+ if (lirc_buffer_init(lirc_buf, sizeof(int), STREAMZAP_BUF_LEN))
|
||||
+ goto kfree_lirc_buf;
|
||||
+
|
||||
+ delay_buf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
|
||||
+ if (!delay_buf)
|
||||
+ goto free_lirc_buf;
|
||||
+ if (lirc_buffer_init(delay_buf, sizeof(int), STREAMZAP_BUF_LEN))
|
||||
+ goto kfree_delay_buf;
|
||||
+
|
||||
+ sz->driver = driver;
|
||||
+ strcpy(sz->driver->name, DRIVER_NAME);
|
||||
+ sz->driver->minor = -1;
|
||||
+ sz->driver->sample_rate = 0;
|
||||
+ sz->driver->code_length = sizeof(int) * 8;
|
||||
+ sz->driver->features = LIRC_CAN_REC_MODE2 | LIRC_CAN_GET_REC_RESOLUTION;
|
||||
+ sz->driver->data = sz;
|
||||
+ sz->driver->rbuf = lirc_buf;
|
||||
+ sz->delay_buf = delay_buf;
|
||||
+ sz->driver->set_use_inc = &streamzap_use_inc;
|
||||
+ sz->driver->set_use_dec = &streamzap_use_dec;
|
||||
+ sz->driver->fops = &streamzap_fops;
|
||||
+ sz->driver->dev = &interface->dev;
|
||||
+ sz->driver->owner = THIS_MODULE;
|
||||
|
||||
sz->idle = 1;
|
||||
sz->decoder_state = PulseSpace;
|
||||
@@ -556,28 +566,32 @@ static int streamzap_probe(struct usb_interface *interface,
|
||||
snprintf(name + strlen(name), sizeof(name) - strlen(name),
|
||||
" %s", buf);
|
||||
|
||||
- printk(KERN_INFO DRIVER_NAME "[%d]: %s on usb%d:%d attached\n",
|
||||
- sz->driver.minor, name,
|
||||
- udev->bus->busnum, sz->udev->devnum);
|
||||
+ minor = lirc_register_driver(driver);
|
||||
|
||||
- usb_set_intfdata(interface, sz);
|
||||
+ if (minor < 0)
|
||||
+ goto free_delay_buf;
|
||||
|
||||
- if (lirc_register_driver(&sz->driver) < 0) {
|
||||
- lirc_buffer_free(&sz->delay_buf);
|
||||
- lirc_buffer_free(&sz->lirc_buf);
|
||||
- goto error;
|
||||
- }
|
||||
+ sz->driver->minor = minor;
|
||||
|
||||
- return 0;
|
||||
+ usb_set_intfdata(interface, sz);
|
||||
|
||||
-error:
|
||||
+ printk(KERN_INFO DRIVER_NAME "[%d]: %s on usb%d:%d attached\n",
|
||||
+ sz->driver->minor, name,
|
||||
+ udev->bus->busnum, sz->udev->devnum);
|
||||
|
||||
- /*
|
||||
- * Premise is that a 'goto error' can be invoked from inside the
|
||||
- * probe function and all necessary cleanup actions will be taken
|
||||
- * including freeing any necessary memory blocks
|
||||
- */
|
||||
+ return 0;
|
||||
|
||||
+free_delay_buf:
|
||||
+ lirc_buffer_free(sz->delay_buf);
|
||||
+kfree_delay_buf:
|
||||
+ kfree(delay_buf);
|
||||
+free_lirc_buf:
|
||||
+ lirc_buffer_free(sz->driver->rbuf);
|
||||
+kfree_lirc_buf:
|
||||
+ kfree(lirc_buf);
|
||||
+free_driver:
|
||||
+ kfree(driver);
|
||||
+free_sz:
|
||||
if (retval == -ENOMEM)
|
||||
err("Out of memory");
|
||||
|
||||
@@ -598,10 +612,10 @@ static int streamzap_use_inc(void *data)
|
||||
dprintk("%s called with no context", -1, __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
- dprintk("set use inc", sz->driver.minor);
|
||||
+ dprintk("set use inc", sz->driver->minor);
|
||||
|
||||
- lirc_buffer_clear(&sz->lirc_buf);
|
||||
- lirc_buffer_clear(&sz->delay_buf);
|
||||
+ lirc_buffer_clear(sz->driver->rbuf);
|
||||
+ lirc_buffer_clear(sz->delay_buf);
|
||||
|
||||
sz->flush_timer.expires = jiffies + HZ;
|
||||
sz->flush = 1;
|
||||
@@ -610,7 +624,7 @@ static int streamzap_use_inc(void *data)
|
||||
sz->urb_in->dev = sz->udev;
|
||||
if (usb_submit_urb(sz->urb_in, GFP_ATOMIC)) {
|
||||
dprintk("open result = -EIO error submitting urb",
|
||||
- sz->driver.minor);
|
||||
+ sz->driver->minor);
|
||||
return -EIO;
|
||||
}
|
||||
sz->in_use++;
|
||||
@@ -626,7 +640,7 @@ static void streamzap_use_dec(void *data)
|
||||
dprintk("%s called with no context", -1, __func__);
|
||||
return;
|
||||
}
|
||||
- dprintk("set use dec", sz->driver.minor);
|
||||
+ dprintk("set use dec", sz->driver->minor);
|
||||
|
||||
if (sz->flush) {
|
||||
sz->flush = 0;
|
||||
@@ -677,13 +691,13 @@ static void streamzap_disconnect(struct usb_interface *interface)
|
||||
|
||||
/* unregister from the LIRC sub-system */
|
||||
|
||||
- errnum = lirc_unregister_driver(sz->driver.minor);
|
||||
+ errnum = lirc_unregister_driver(sz->driver->minor);
|
||||
if (errnum != 0)
|
||||
dprintk("error in lirc_unregister: (returned %d)",
|
||||
- sz->driver.minor, errnum);
|
||||
+ sz->driver->minor, errnum);
|
||||
|
||||
- lirc_buffer_free(&sz->delay_buf);
|
||||
- lirc_buffer_free(&sz->lirc_buf);
|
||||
+ lirc_buffer_free(sz->delay_buf);
|
||||
+ lirc_buffer_free(sz->driver->rbuf);
|
||||
|
||||
/* unregister from the USB sub-system */
|
||||
|
||||
@@ -691,7 +705,10 @@ static void streamzap_disconnect(struct usb_interface *interface)
|
||||
|
||||
usb_buffer_free(sz->udev, sz->buf_in_len, sz->buf_in, sz->dma_in);
|
||||
|
||||
- minor = sz->driver.minor;
|
||||
+ minor = sz->driver->minor;
|
||||
+ kfree(sz->driver->rbuf);
|
||||
+ kfree(sz->driver);
|
||||
+ kfree(sz->delay_buf);
|
||||
kfree(sz);
|
||||
|
||||
printk(KERN_INFO DRIVER_NAME "[%d]: disconnected\n", minor);
|
||||
@@ -701,7 +718,7 @@ static int streamzap_suspend(struct usb_interface *intf, pm_message_t message)
|
||||
{
|
||||
struct usb_streamzap *sz = usb_get_intfdata(intf);
|
||||
|
||||
- printk(KERN_INFO DRIVER_NAME "[%d]: suspend\n", sz->driver.minor);
|
||||
+ printk(KERN_INFO DRIVER_NAME "[%d]: suspend\n", sz->driver->minor);
|
||||
if (sz->in_use) {
|
||||
if (sz->flush) {
|
||||
sz->flush = 0;
|
||||
@@ -719,8 +736,8 @@ static int streamzap_resume(struct usb_interface *intf)
|
||||
{
|
||||
struct usb_streamzap *sz = usb_get_intfdata(intf);
|
||||
|
||||
- lirc_buffer_clear(&sz->lirc_buf);
|
||||
- lirc_buffer_clear(&sz->delay_buf);
|
||||
+ lirc_buffer_clear(sz->driver->rbuf);
|
||||
+ lirc_buffer_clear(sz->delay_buf);
|
||||
|
||||
if (sz->in_use) {
|
||||
sz->flush_timer.expires = jiffies + HZ;
|
||||
@@ -730,7 +747,7 @@ static int streamzap_resume(struct usb_interface *intf)
|
||||
sz->urb_in->dev = sz->udev;
|
||||
if (usb_submit_urb(sz->urb_in, GFP_ATOMIC)) {
|
||||
dprintk("open result = -EIO error submitting urb",
|
||||
- sz->driver.minor);
|
||||
+ sz->driver->minor);
|
||||
return -EIO;
|
||||
}
|
||||
}
|
@ -1 +1 @@
|
||||
http://eu.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.30-rc8.tar.bz2
|
||||
http://kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.31-rc3.tar.bz2
|
||||
|
@ -1 +0,0 @@
|
||||
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.1.tar.bz2
|
@ -1,5 +1,5 @@
|
||||
# Mediacenter to use (elisa, entertainer)
|
||||
MEDIACENTER=elisa
|
||||
# Mediacenter to use (moovida, entertainer)
|
||||
MEDIACENTER=moovida
|
||||
|
||||
# X.org drivers to use (all/ati/geode/glint/i740/intel/mga/nv/openchrome/
|
||||
# radeonhd/s3/s3virge/savage/sis/tdfx/trident/vesa/vmware)
|
||||
|
2123
projects/intel-ati/linux/linux.i386.cnf.old
Normal file
2123
projects/intel-ati/linux/linux.i386.cnf.old
Normal file
File diff suppressed because it is too large
Load Diff
2354
projects/intel-ati/linux/linux.i386.conf
Normal file
2354
projects/intel-ati/linux/linux.i386.conf
Normal file
File diff suppressed because it is too large
Load Diff
15
projects/intel-ati/options
Normal file
15
projects/intel-ati/options
Normal file
@ -0,0 +1,15 @@
|
||||
# Mediacenter to use (moovida, entertainer)
|
||||
MEDIACENTER=moovida
|
||||
|
||||
GAMES=yes
|
||||
EMULATORS=yes
|
||||
|
||||
# X.org drivers to use (all/ati/geode/glint/i740/intel/mga/nv/openchrome/
|
||||
# radeonhd/s3/s3virge/savage/sis/tdfx/trident/vesa/vmware)
|
||||
# Space separated list is supported, e.g. XORG_DRIVERS="ati s3"
|
||||
XORG_DRIVERS="ati"
|
||||
DRIDRIVERS="mach64,r128,r200,r300,radeon"
|
||||
|
||||
MESA=Mesa
|
||||
LIBDRM=libdrm
|
||||
|
2123
projects/intel/linux/linux.i386.cnf.old
Normal file
2123
projects/intel/linux/linux.i386.cnf.old
Normal file
File diff suppressed because it is too large
Load Diff
2338
projects/intel/linux/linux.i386.conf
Normal file
2338
projects/intel/linux/linux.i386.conf
Normal file
File diff suppressed because it is too large
Load Diff
15
projects/intel/options
Normal file
15
projects/intel/options
Normal file
@ -0,0 +1,15 @@
|
||||
# Mediacenter to use (moovida, entertainer)
|
||||
MEDIACENTER=moovida
|
||||
|
||||
GAMES=yes
|
||||
EMULATORS=yes
|
||||
|
||||
# X.org drivers to use (all/ati/geode/glint/i740/intel/mga/nv/openchrome/
|
||||
# radeonhd/s3/s3virge/savage/sis/tdfx/trident/vesa/vmware)
|
||||
# Space separated list is supported, e.g. XORG_DRIVERS="ati s3"
|
||||
XORG_DRIVERS="intel"
|
||||
DRIDRIVERS="i915,i965"
|
||||
|
||||
MESA=Mesa-master
|
||||
LIBDRM=libdrm-master
|
||||
|
@ -1,5 +1,5 @@
|
||||
# Mediacenter to use (elisa, entertainer)
|
||||
MEDIACENTER=elisa
|
||||
# Mediacenter to use (moovida, entertainer)
|
||||
MEDIACENTER=moovida
|
||||
|
||||
GAMES=yes
|
||||
EMULATORS=yes
|
||||
|
Loading…
x
Reference in New Issue
Block a user