Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 154161
b: refs/heads/master
c: 86e437f
h: refs/heads/master
i:
  154159: 646b20e
v: v3
  • Loading branch information
Zhao Yakui authored and Len Brown committed Jun 24, 2009
1 parent 35b3ab1 commit b1ca0d4
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 152a4e630f7ffdd7ff64427c4ba488dc0bce76af
refs/heads/master: 86e437f077c68112edcb6854ec036ed7e3f9a7f3
49 changes: 35 additions & 14 deletions trunk/drivers/acpi/video.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ MODULE_LICENSE("GPL");
static int brightness_switch_enabled = 1;
module_param(brightness_switch_enabled, bool, 0644);

static int register_count = 0;
static int acpi_video_bus_add(struct acpi_device *device);
static int acpi_video_bus_remove(struct acpi_device *device, int type);
static int acpi_video_resume(struct acpi_device *device);
Expand Down Expand Up @@ -586,14 +587,6 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5315"),
},
},
{
.callback = video_set_bqc_offset,
.ident = "Acer Aspire 7720",
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 7720"),
},
},
{}
};

Expand Down Expand Up @@ -2326,6 +2319,13 @@ static int __init intel_opregion_present(void)
int acpi_video_register(void)
{
int result = 0;
if (register_count) {
/*
* if the function of acpi_video_register is already called,
* don't register the acpi_vide_bus again and return no error.
*/
return 0;
}

acpi_video_dir = proc_mkdir(ACPI_VIDEO_CLASS, acpi_root_dir);
if (!acpi_video_dir)
Expand All @@ -2337,10 +2337,35 @@ int acpi_video_register(void)
return -ENODEV;
}

/*
* When the acpi_video_bus is loaded successfully, increase
* the counter reference.
*/
register_count = 1;

return 0;
}
EXPORT_SYMBOL(acpi_video_register);

void acpi_video_unregister(void)
{
if (!register_count) {
/*
* If the acpi video bus is already unloaded, don't
* unload it again and return directly.
*/
return;
}
acpi_bus_unregister_driver(&acpi_video_bus);

remove_proc_entry(ACPI_VIDEO_CLASS, acpi_root_dir);

register_count = 0;

return;
}
EXPORT_SYMBOL(acpi_video_unregister);

/*
* This is kind of nasty. Hardware using Intel chipsets may require
* the video opregion code to be run first in order to initialise
Expand All @@ -2358,16 +2383,12 @@ static int __init acpi_video_init(void)
return acpi_video_register();
}

void acpi_video_exit(void)
static void __exit acpi_video_exit(void)
{

acpi_bus_unregister_driver(&acpi_video_bus);

remove_proc_entry(ACPI_VIDEO_CLASS, acpi_root_dir);
acpi_video_unregister();

return;
}
EXPORT_SYMBOL(acpi_video_exit);

module_init(acpi_video_init);
module_exit(acpi_video_exit);
2 changes: 1 addition & 1 deletion trunk/drivers/gpu/drm/i915/i915_opregion.c
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@ void intel_opregion_free(struct drm_device *dev, int suspend)
return;

if (!suspend)
acpi_video_exit();
acpi_video_unregister();

opregion->acpi->drdy = 0;

Expand Down
4 changes: 2 additions & 2 deletions trunk/include/acpi/video.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@

#if (defined CONFIG_ACPI_VIDEO || defined CONFIG_ACPI_VIDEO_MODULE)
extern int acpi_video_register(void);
extern int acpi_video_exit(void);
extern void acpi_video_unregister(void);
#else
static inline int acpi_video_register(void) { return 0; }
static inline void acpi_video_exit(void) { return; }
static inline void acpi_video_unregister(void) { return; }
#endif

#endif
Expand Down

0 comments on commit b1ca0d4

Please sign in to comment.