mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-23 15:11:16 +00:00
Merge branch 'exynos-drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos into drm-fixes
Inki writes: "As I posted before, we have added a new git repository for Exynos drm to MAINTAINERS file so change it to new one like below, from git://git.infradead.org/users/kmpark/linux-samsung to git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos And this pull request includes the following: - fix display on issue when user requested dpms mode changing. - add git repository for Exynos drm to MAINTAINERS file. - add support for ARCH_MULTIPLATFORM. - and code clean." * 'exynos-drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos: drm: exynos: removed warning due to missing typecast for mixer driver data drm/exynos: add support for ARCH_MULTIPLATFORM MAINTAINERS: Add git repository for Exynos DRM drm/exynos: fix display on issue
This commit is contained in:
commit
a2e4919a7e
5 changed files with 21 additions and 18 deletions
|
@ -2507,6 +2507,7 @@ M: Joonyoung Shim <jy0922.shim@samsung.com>
|
||||||
M: Seung-Woo Kim <sw0312.kim@samsung.com>
|
M: Seung-Woo Kim <sw0312.kim@samsung.com>
|
||||||
M: Kyungmin Park <kyungmin.park@samsung.com>
|
M: Kyungmin Park <kyungmin.park@samsung.com>
|
||||||
L: dri-devel@lists.freedesktop.org
|
L: dri-devel@lists.freedesktop.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/gpu/drm/exynos
|
F: drivers/gpu/drm/exynos
|
||||||
F: include/drm/exynos*
|
F: include/drm/exynos*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
config DRM_EXYNOS
|
config DRM_EXYNOS
|
||||||
tristate "DRM Support for Samsung SoC EXYNOS Series"
|
tristate "DRM Support for Samsung SoC EXYNOS Series"
|
||||||
depends on DRM && PLAT_SAMSUNG
|
depends on DRM && (PLAT_SAMSUNG || ARCH_MULTIPLATFORM)
|
||||||
select DRM_KMS_HELPER
|
select DRM_KMS_HELPER
|
||||||
select FB_CFB_FILLRECT
|
select FB_CFB_FILLRECT
|
||||||
select FB_CFB_COPYAREA
|
select FB_CFB_COPYAREA
|
||||||
|
|
|
@ -374,6 +374,7 @@ struct drm_connector *exynos_drm_connector_create(struct drm_device *dev,
|
||||||
exynos_connector->encoder_id = encoder->base.id;
|
exynos_connector->encoder_id = encoder->base.id;
|
||||||
exynos_connector->manager = manager;
|
exynos_connector->manager = manager;
|
||||||
exynos_connector->dpms = DRM_MODE_DPMS_OFF;
|
exynos_connector->dpms = DRM_MODE_DPMS_OFF;
|
||||||
|
connector->dpms = DRM_MODE_DPMS_OFF;
|
||||||
connector->encoder = encoder;
|
connector->encoder = encoder;
|
||||||
|
|
||||||
err = drm_mode_connector_attach_encoder(connector, encoder);
|
err = drm_mode_connector_attach_encoder(connector, encoder);
|
||||||
|
|
|
@ -43,12 +43,14 @@
|
||||||
* @manager: specific encoder has its own manager to control a hardware
|
* @manager: specific encoder has its own manager to control a hardware
|
||||||
* appropriately and we can access a hardware drawing on this manager.
|
* appropriately and we can access a hardware drawing on this manager.
|
||||||
* @dpms: store the encoder dpms value.
|
* @dpms: store the encoder dpms value.
|
||||||
|
* @updated: indicate whether overlay data updating is needed or not.
|
||||||
*/
|
*/
|
||||||
struct exynos_drm_encoder {
|
struct exynos_drm_encoder {
|
||||||
struct drm_crtc *old_crtc;
|
struct drm_crtc *old_crtc;
|
||||||
struct drm_encoder drm_encoder;
|
struct drm_encoder drm_encoder;
|
||||||
struct exynos_drm_manager *manager;
|
struct exynos_drm_manager *manager;
|
||||||
int dpms;
|
int dpms;
|
||||||
|
bool updated;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void exynos_drm_connector_power(struct drm_encoder *encoder, int mode)
|
static void exynos_drm_connector_power(struct drm_encoder *encoder, int mode)
|
||||||
|
@ -85,7 +87,9 @@ static void exynos_drm_encoder_dpms(struct drm_encoder *encoder, int mode)
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case DRM_MODE_DPMS_ON:
|
case DRM_MODE_DPMS_ON:
|
||||||
if (manager_ops && manager_ops->apply)
|
if (manager_ops && manager_ops->apply)
|
||||||
|
if (!exynos_encoder->updated)
|
||||||
manager_ops->apply(manager->dev);
|
manager_ops->apply(manager->dev);
|
||||||
|
|
||||||
exynos_drm_connector_power(encoder, mode);
|
exynos_drm_connector_power(encoder, mode);
|
||||||
exynos_encoder->dpms = mode;
|
exynos_encoder->dpms = mode;
|
||||||
break;
|
break;
|
||||||
|
@ -94,6 +98,7 @@ static void exynos_drm_encoder_dpms(struct drm_encoder *encoder, int mode)
|
||||||
case DRM_MODE_DPMS_OFF:
|
case DRM_MODE_DPMS_OFF:
|
||||||
exynos_drm_connector_power(encoder, mode);
|
exynos_drm_connector_power(encoder, mode);
|
||||||
exynos_encoder->dpms = mode;
|
exynos_encoder->dpms = mode;
|
||||||
|
exynos_encoder->updated = false;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DRM_ERROR("unspecified mode %d\n", mode);
|
DRM_ERROR("unspecified mode %d\n", mode);
|
||||||
|
@ -205,13 +210,22 @@ static void exynos_drm_encoder_prepare(struct drm_encoder *encoder)
|
||||||
|
|
||||||
static void exynos_drm_encoder_commit(struct drm_encoder *encoder)
|
static void exynos_drm_encoder_commit(struct drm_encoder *encoder)
|
||||||
{
|
{
|
||||||
struct exynos_drm_manager *manager = exynos_drm_get_manager(encoder);
|
struct exynos_drm_encoder *exynos_encoder = to_exynos_encoder(encoder);
|
||||||
|
struct exynos_drm_manager *manager = exynos_encoder->manager;
|
||||||
struct exynos_drm_manager_ops *manager_ops = manager->ops;
|
struct exynos_drm_manager_ops *manager_ops = manager->ops;
|
||||||
|
|
||||||
DRM_DEBUG_KMS("%s\n", __FILE__);
|
DRM_DEBUG_KMS("%s\n", __FILE__);
|
||||||
|
|
||||||
if (manager_ops && manager_ops->commit)
|
if (manager_ops && manager_ops->commit)
|
||||||
manager_ops->commit(manager->dev);
|
manager_ops->commit(manager->dev);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* this will avoid one issue that overlay data is updated to
|
||||||
|
* real hardware two times.
|
||||||
|
* And this variable will be used to check if the data was
|
||||||
|
* already updated or not by exynos_drm_encoder_dpms function.
|
||||||
|
*/
|
||||||
|
exynos_encoder->updated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void exynos_drm_encoder_disable(struct drm_encoder *encoder)
|
static void exynos_drm_encoder_disable(struct drm_encoder *encoder)
|
||||||
|
@ -400,19 +414,6 @@ void exynos_drm_encoder_crtc_dpms(struct drm_encoder *encoder, void *data)
|
||||||
if (manager_ops && manager_ops->dpms)
|
if (manager_ops && manager_ops->dpms)
|
||||||
manager_ops->dpms(manager->dev, mode);
|
manager_ops->dpms(manager->dev, mode);
|
||||||
|
|
||||||
/*
|
|
||||||
* set current mode to new one so that data aren't updated into
|
|
||||||
* registers by drm_helper_connector_dpms two times.
|
|
||||||
*
|
|
||||||
* in case that drm_crtc_helper_set_mode() is called,
|
|
||||||
* overlay_ops->commit() and manager_ops->commit() callbacks
|
|
||||||
* can be called two times, first at drm_crtc_helper_set_mode()
|
|
||||||
* and second at drm_helper_connector_dpms().
|
|
||||||
* so with this setting, when drm_helper_connector_dpms() is called
|
|
||||||
* encoder->funcs->dpms() will be ignored.
|
|
||||||
*/
|
|
||||||
exynos_encoder->dpms = mode;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* if this condition is ok then it means that the crtc is already
|
* if this condition is ok then it means that the crtc is already
|
||||||
* detached from encoder and last function for detaching is properly
|
* detached from encoder and last function for detaching is properly
|
||||||
|
|
|
@ -1142,7 +1142,7 @@ static int __devinit mixer_probe(struct platform_device *pdev)
|
||||||
const struct of_device_id *match;
|
const struct of_device_id *match;
|
||||||
match = of_match_node(of_match_ptr(mixer_match_types),
|
match = of_match_node(of_match_ptr(mixer_match_types),
|
||||||
pdev->dev.of_node);
|
pdev->dev.of_node);
|
||||||
drv = match->data;
|
drv = (struct mixer_drv_data *)match->data;
|
||||||
} else {
|
} else {
|
||||||
drv = (struct mixer_drv_data *)
|
drv = (struct mixer_drv_data *)
|
||||||
platform_get_device_id(pdev)->driver_data;
|
platform_get_device_id(pdev)->driver_data;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue