drm/msm: mdp4_format -> mdp_format
This can be shared between mdp4 and mdp5. Both use the same set of parameters to describe the format to the hw. Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
facb4f4e7f
commit
10a02eb646
|
@ -12,9 +12,9 @@ msm-y := \
|
||||||
hdmi/hdmi_i2c.o \
|
hdmi/hdmi_i2c.o \
|
||||||
hdmi/hdmi_phy_8960.o \
|
hdmi/hdmi_phy_8960.o \
|
||||||
hdmi/hdmi_phy_8x60.o \
|
hdmi/hdmi_phy_8x60.o \
|
||||||
|
mdp/mdp_format.o \
|
||||||
mdp/mdp4/mdp4_crtc.o \
|
mdp/mdp4/mdp4_crtc.o \
|
||||||
mdp/mdp4/mdp4_dtv_encoder.o \
|
mdp/mdp4/mdp4_dtv_encoder.o \
|
||||||
mdp/mdp4/mdp4_format.o \
|
|
||||||
mdp/mdp4/mdp4_irq.o \
|
mdp/mdp4/mdp4_irq.o \
|
||||||
mdp/mdp4/mdp4_kms.o \
|
mdp/mdp4/mdp4_kms.o \
|
||||||
mdp/mdp4/mdp4_plane.o \
|
mdp/mdp4/mdp4_plane.o \
|
||||||
|
|
|
@ -262,8 +262,8 @@ static void blend_setup(struct drm_crtc *crtc)
|
||||||
enum mdp4_pipe pipe_id = mdp4_plane_pipe(plane);
|
enum mdp4_pipe pipe_id = mdp4_plane_pipe(plane);
|
||||||
int idx = idxs[pipe_id];
|
int idx = idxs[pipe_id];
|
||||||
if (idx > 0) {
|
if (idx > 0) {
|
||||||
const struct mdp4_format *format =
|
const struct mdp_format *format =
|
||||||
to_mdp4_format(msm_framebuffer_format(plane->fb));
|
to_mdp_format(msm_framebuffer_format(plane->fb));
|
||||||
alpha[idx-1] = format->alpha_enable;
|
alpha[idx-1] = format->alpha_enable;
|
||||||
}
|
}
|
||||||
mixer_cfg |= mixercfg(mdp4_crtc->mixer, pipe_id, stages[idx]);
|
mixer_cfg |= mixercfg(mdp4_crtc->mixer, pipe_id, stages[idx]);
|
||||||
|
|
|
@ -155,7 +155,7 @@ static const struct msm_kms_funcs kms_funcs = {
|
||||||
.irq = mdp4_irq,
|
.irq = mdp4_irq,
|
||||||
.enable_vblank = mdp4_enable_vblank,
|
.enable_vblank = mdp4_enable_vblank,
|
||||||
.disable_vblank = mdp4_disable_vblank,
|
.disable_vblank = mdp4_disable_vblank,
|
||||||
.get_format = mdp4_get_format,
|
.get_format = mdp_get_format,
|
||||||
.round_pixclk = mdp4_round_pixclk,
|
.round_pixclk = mdp4_round_pixclk,
|
||||||
.preclose = mdp4_preclose,
|
.preclose = mdp4_preclose,
|
||||||
.destroy = mdp4_destroy,
|
.destroy = mdp4_destroy,
|
||||||
|
|
|
@ -18,12 +18,8 @@
|
||||||
#ifndef __MDP4_KMS_H__
|
#ifndef __MDP4_KMS_H__
|
||||||
#define __MDP4_KMS_H__
|
#define __MDP4_KMS_H__
|
||||||
|
|
||||||
#include <linux/clk.h>
|
|
||||||
#include <linux/platform_device.h>
|
|
||||||
#include <linux/regulator/consumer.h>
|
|
||||||
|
|
||||||
#include "msm_drv.h"
|
#include "msm_drv.h"
|
||||||
#include "mdp/mdp_common.xml.h"
|
#include "mdp/mdp_kms.h"
|
||||||
#include "mdp4.xml.h"
|
#include "mdp4.xml.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,16 +70,6 @@ struct mdp4_platform_config {
|
||||||
uint32_t max_clk;
|
uint32_t max_clk;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mdp4_format {
|
|
||||||
struct msm_format base;
|
|
||||||
enum mdp_bpc bpc_r, bpc_g, bpc_b;
|
|
||||||
enum mdp_bpc_alpha bpc_a;
|
|
||||||
uint8_t unpack[4];
|
|
||||||
bool alpha_enable, unpack_tight;
|
|
||||||
uint8_t cpp, unpack_count;
|
|
||||||
};
|
|
||||||
#define to_mdp4_format(x) container_of(x, struct mdp4_format, base)
|
|
||||||
|
|
||||||
static inline void mdp4_write(struct mdp4_kms *mdp4_kms, u32 reg, u32 data)
|
static inline void mdp4_write(struct mdp4_kms *mdp4_kms, u32 reg, u32 data)
|
||||||
{
|
{
|
||||||
msm_writel(data, mdp4_kms->mmio + reg);
|
msm_writel(data, mdp4_kms->mmio + reg);
|
||||||
|
@ -189,9 +175,15 @@ void mdp4_irq_unregister(struct mdp4_kms *mdp4_kms, struct mdp4_irq *irq);
|
||||||
int mdp4_enable_vblank(struct msm_kms *kms, struct drm_crtc *crtc);
|
int mdp4_enable_vblank(struct msm_kms *kms, struct drm_crtc *crtc);
|
||||||
void mdp4_disable_vblank(struct msm_kms *kms, struct drm_crtc *crtc);
|
void mdp4_disable_vblank(struct msm_kms *kms, struct drm_crtc *crtc);
|
||||||
|
|
||||||
uint32_t mdp4_get_formats(enum mdp4_pipe pipe_id, uint32_t *formats,
|
static inline
|
||||||
uint32_t max_formats);
|
uint32_t mdp4_get_formats(enum mdp4_pipe pipe_id, uint32_t *pixel_formats,
|
||||||
const struct msm_format *mdp4_get_format(struct msm_kms *kms, uint32_t format);
|
uint32_t max_formats)
|
||||||
|
{
|
||||||
|
/* TODO when we have YUV, we need to filter supported formats
|
||||||
|
* based on pipe_id..
|
||||||
|
*/
|
||||||
|
return mdp_get_formats(pixel_formats, max_formats);
|
||||||
|
}
|
||||||
|
|
||||||
void mdp4_plane_install_properties(struct drm_plane *plane,
|
void mdp4_plane_install_properties(struct drm_plane *plane,
|
||||||
struct drm_mode_object *obj);
|
struct drm_mode_object *obj);
|
||||||
|
|
|
@ -132,7 +132,7 @@ int mdp4_plane_mode_set(struct drm_plane *plane,
|
||||||
struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane);
|
struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane);
|
||||||
struct mdp4_kms *mdp4_kms = get_kms(plane);
|
struct mdp4_kms *mdp4_kms = get_kms(plane);
|
||||||
enum mdp4_pipe pipe = mdp4_plane->pipe;
|
enum mdp4_pipe pipe = mdp4_plane->pipe;
|
||||||
const struct mdp4_format *format;
|
const struct mdp_format *format;
|
||||||
uint32_t op_mode = 0;
|
uint32_t op_mode = 0;
|
||||||
uint32_t phasex_step = MDP4_VG_PHASE_STEP_DEFAULT;
|
uint32_t phasex_step = MDP4_VG_PHASE_STEP_DEFAULT;
|
||||||
uint32_t phasey_step = MDP4_VG_PHASE_STEP_DEFAULT;
|
uint32_t phasey_step = MDP4_VG_PHASE_STEP_DEFAULT;
|
||||||
|
@ -175,7 +175,7 @@ int mdp4_plane_mode_set(struct drm_plane *plane,
|
||||||
|
|
||||||
mdp4_plane_set_scanout(plane, fb);
|
mdp4_plane_set_scanout(plane, fb);
|
||||||
|
|
||||||
format = to_mdp4_format(msm_framebuffer_format(fb));
|
format = to_mdp_format(msm_framebuffer_format(fb));
|
||||||
|
|
||||||
mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRC_FORMAT(pipe),
|
mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRC_FORMAT(pipe),
|
||||||
MDP4_PIPE_SRC_FORMAT_A_BPC(format->bpc_a) |
|
MDP4_PIPE_SRC_FORMAT_A_BPC(format->bpc_a) |
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include "msm_drv.h"
|
#include "msm_drv.h"
|
||||||
#include "mdp4_kms.h"
|
#include "mdp_kms.h"
|
||||||
|
|
||||||
#define FMT(name, a, r, g, b, e0, e1, e2, e3, alpha, tight, c, cnt) { \
|
#define FMT(name, a, r, g, b, e0, e1, e2, e3, alpha, tight, c, cnt) { \
|
||||||
.base = { .pixel_format = DRM_FORMAT_ ## name }, \
|
.base = { .pixel_format = DRM_FORMAT_ ## name }, \
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
|
|
||||||
#define BPC0A 0
|
#define BPC0A 0
|
||||||
|
|
||||||
static const struct mdp4_format formats[] = {
|
static const struct mdp_format formats[] = {
|
||||||
/* name a r g b e0 e1 e2 e3 alpha tight cpp cnt */
|
/* name a r g b e0 e1 e2 e3 alpha tight cpp cnt */
|
||||||
FMT(ARGB8888, 8, 8, 8, 8, 1, 0, 2, 3, true, true, 4, 4),
|
FMT(ARGB8888, 8, 8, 8, 8, 1, 0, 2, 3, true, true, 4, 4),
|
||||||
FMT(XRGB8888, 8, 8, 8, 8, 1, 0, 2, 3, false, true, 4, 4),
|
FMT(XRGB8888, 8, 8, 8, 8, 1, 0, 2, 3, false, true, 4, 4),
|
||||||
|
@ -44,12 +44,11 @@ static const struct mdp4_format formats[] = {
|
||||||
FMT(BGR565, 0, 5, 6, 5, 2, 0, 1, 0, false, true, 2, 3),
|
FMT(BGR565, 0, 5, 6, 5, 2, 0, 1, 0, false, true, 2, 3),
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32_t mdp4_get_formats(enum mdp4_pipe pipe_id, uint32_t *pixel_formats,
|
uint32_t mdp_get_formats(uint32_t *pixel_formats, uint32_t max_formats)
|
||||||
uint32_t max_formats)
|
|
||||||
{
|
{
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
for (i = 0; i < ARRAY_SIZE(formats); i++) {
|
for (i = 0; i < ARRAY_SIZE(formats); i++) {
|
||||||
const struct mdp4_format *f = &formats[i];
|
const struct mdp_format *f = &formats[i];
|
||||||
|
|
||||||
if (i == max_formats)
|
if (i == max_formats)
|
||||||
break;
|
break;
|
||||||
|
@ -60,11 +59,11 @@ uint32_t mdp4_get_formats(enum mdp4_pipe pipe_id, uint32_t *pixel_formats,
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct msm_format *mdp4_get_format(struct msm_kms *kms, uint32_t format)
|
const struct msm_format *mdp_get_format(struct msm_kms *kms, uint32_t format)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < ARRAY_SIZE(formats); i++) {
|
for (i = 0; i < ARRAY_SIZE(formats); i++) {
|
||||||
const struct mdp4_format *f = &formats[i];
|
const struct mdp_format *f = &formats[i];
|
||||||
if (f->base.pixel_format == format)
|
if (f->base.pixel_format == format)
|
||||||
return &f->base;
|
return &f->base;
|
||||||
}
|
}
|
42
drivers/gpu/drm/msm/mdp/mdp_kms.h
Normal file
42
drivers/gpu/drm/msm/mdp/mdp_kms.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2013 Red Hat
|
||||||
|
* Author: Rob Clark <robdclark@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 as published by
|
||||||
|
* the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __MDP_KMS_H__
|
||||||
|
#define __MDP_KMS_H__
|
||||||
|
|
||||||
|
#include <linux/clk.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/regulator/consumer.h>
|
||||||
|
|
||||||
|
#include "msm_drv.h"
|
||||||
|
#include "mdp_common.xml.h"
|
||||||
|
|
||||||
|
struct mdp_format {
|
||||||
|
struct msm_format base;
|
||||||
|
enum mdp_bpc bpc_r, bpc_g, bpc_b;
|
||||||
|
enum mdp_bpc_alpha bpc_a;
|
||||||
|
uint8_t unpack[4];
|
||||||
|
bool alpha_enable, unpack_tight;
|
||||||
|
uint8_t cpp, unpack_count;
|
||||||
|
};
|
||||||
|
#define to_mdp_format(x) container_of(x, struct mdp_format, base)
|
||||||
|
|
||||||
|
|
||||||
|
uint32_t mdp_get_formats(uint32_t *formats, uint32_t max_formats);
|
||||||
|
const struct msm_format *mdp_get_format(struct msm_kms *kms, uint32_t format);
|
||||||
|
|
||||||
|
#endif /* __MDP_KMS_H__ */
|
Loading…
Reference in a new issue