Merge tag 'drm-misc-next-2019-01-23' of git://anongit.freedesktop.org/drm/drm-misc into drm-next

drm-misc-next for 5.1:

UAPI Changes:
 - Addition of the Allwinner tiled format modifier

Cross-subsystem Changes:

Core Changes:
 - dma-buf documentation improvements
 - Removal of now unused fbdev helpers
 - Addition of new drm fbdev helpers
 - Improvements to tinydrm
 - Addition of new drm_fourcc helpers
 - Impromevents to i2c-over-aux to handle I2C_M_STOP

Driver Changes:
 - Add support for the TI DS90C185 LVDS bridge
 - Improvements to the thc63lvdm83d bridge
 - Improvements to sun4i YUV and scaler support
 - Fix to the powerdown sequence of panel-innolux

Signed-off-by: Dave Airlie <airlied@redhat.com>

From: Maxime Ripard <maxime.ripard@bootlin.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190123110317.h4tovujaydo2bfz2@flea
This commit is contained in:
Dave Airlie
2019-01-24 19:52:46 +10:00
39 changed files with 964 additions and 666 deletions

View File

@@ -78,6 +78,9 @@ drm_atomic_helper_damage_iter_init(struct drm_atomic_helper_damage_iter *iter,
bool
drm_atomic_helper_damage_iter_next(struct drm_atomic_helper_damage_iter *iter,
struct drm_rect *rect);
bool drm_atomic_helper_damage_merged(const struct drm_plane_state *old_state,
struct drm_plane_state *state,
struct drm_rect *rect);
/**
* drm_helper_get_plane_damage_clips - Returns damage clips in &drm_rect.

View File

@@ -2,31 +2,9 @@
#ifndef __DRM_FB_CMA_HELPER_H__
#define __DRM_FB_CMA_HELPER_H__
struct drm_fbdev_cma;
struct drm_gem_cma_object;
struct drm_fb_helper_surface_size;
struct drm_framebuffer_funcs;
struct drm_fb_helper_funcs;
struct drm_framebuffer;
struct drm_fb_helper;
struct drm_device;
struct drm_file;
struct drm_mode_fb_cmd2;
struct drm_plane;
struct drm_plane_state;
int drm_fb_cma_fbdev_init(struct drm_device *dev, unsigned int preferred_bpp,
unsigned int max_conn_count);
void drm_fb_cma_fbdev_fini(struct drm_device *dev);
struct drm_fbdev_cma *drm_fbdev_cma_init(struct drm_device *dev,
unsigned int preferred_bpp, unsigned int max_conn_count);
void drm_fbdev_cma_fini(struct drm_fbdev_cma *fbdev_cma);
void drm_fbdev_cma_restore_mode(struct drm_fbdev_cma *fbdev_cma);
void drm_fbdev_cma_hotplug_event(struct drm_fbdev_cma *fbdev_cma);
struct drm_gem_cma_object *drm_fb_cma_get_gem_obj(struct drm_framebuffer *fb,
unsigned int plane);

View File

@@ -143,6 +143,123 @@ struct drm_format_name_buf {
char str[32];
};
/**
* drm_format_info_is_yuv_packed - check that the format info matches a YUV
* format with data laid in a single plane
* @info: format info
*
* Returns:
* A boolean indicating whether the format info matches a packed YUV format.
*/
static inline bool
drm_format_info_is_yuv_packed(const struct drm_format_info *info)
{
return info->is_yuv && info->num_planes == 1;
}
/**
* drm_format_info_is_yuv_semiplanar - check that the format info matches a YUV
* format with data laid in two planes (luminance and chrominance)
* @info: format info
*
* Returns:
* A boolean indicating whether the format info matches a semiplanar YUV format.
*/
static inline bool
drm_format_info_is_yuv_semiplanar(const struct drm_format_info *info)
{
return info->is_yuv && info->num_planes == 2;
}
/**
* drm_format_info_is_yuv_planar - check that the format info matches a YUV
* format with data laid in three planes (one for each YUV component)
* @info: format info
*
* Returns:
* A boolean indicating whether the format info matches a planar YUV format.
*/
static inline bool
drm_format_info_is_yuv_planar(const struct drm_format_info *info)
{
return info->is_yuv && info->num_planes == 3;
}
/**
* drm_format_info_is_yuv_sampling_410 - check that the format info matches a
* YUV format with 4:1:0 sub-sampling
* @info: format info
*
* Returns:
* A boolean indicating whether the format info matches a YUV format with 4:1:0
* sub-sampling.
*/
static inline bool
drm_format_info_is_yuv_sampling_410(const struct drm_format_info *info)
{
return info->is_yuv && info->hsub == 4 && info->vsub == 4;
}
/**
* drm_format_info_is_yuv_sampling_411 - check that the format info matches a
* YUV format with 4:1:1 sub-sampling
* @info: format info
*
* Returns:
* A boolean indicating whether the format info matches a YUV format with 4:1:1
* sub-sampling.
*/
static inline bool
drm_format_info_is_yuv_sampling_411(const struct drm_format_info *info)
{
return info->is_yuv && info->hsub == 4 && info->vsub == 1;
}
/**
* drm_format_info_is_yuv_sampling_420 - check that the format info matches a
* YUV format with 4:2:0 sub-sampling
* @info: format info
*
* Returns:
* A boolean indicating whether the format info matches a YUV format with 4:2:0
* sub-sampling.
*/
static inline bool
drm_format_info_is_yuv_sampling_420(const struct drm_format_info *info)
{
return info->is_yuv && info->hsub == 2 && info->vsub == 2;
}
/**
* drm_format_info_is_yuv_sampling_422 - check that the format info matches a
* YUV format with 4:2:2 sub-sampling
* @info: format info
*
* Returns:
* A boolean indicating whether the format info matches a YUV format with 4:2:2
* sub-sampling.
*/
static inline bool
drm_format_info_is_yuv_sampling_422(const struct drm_format_info *info)
{
return info->is_yuv && info->hsub == 2 && info->vsub == 1;
}
/**
* drm_format_info_is_yuv_sampling_444 - check that the format info matches a
* YUV format with 4:4:4 sub-sampling
* @info: format info
*
* Returns:
* A boolean indicating whether the format info matches a YUV format with 4:4:4
* sub-sampling.
*/
static inline bool
drm_format_info_is_yuv_sampling_444(const struct drm_format_info *info)
{
return info->is_yuv && info->hsub == 1 && info->vsub == 1;
}
const struct drm_format_info *__drm_format_info(u32 format);
const struct drm_format_info *drm_format_info(u32 format);
const struct drm_format_info *

View File

@@ -25,6 +25,9 @@ drm_gem_fb_create_with_funcs(struct drm_device *dev, struct drm_file *file,
struct drm_framebuffer *
drm_gem_fb_create(struct drm_device *dev, struct drm_file *file,
const struct drm_mode_fb_cmd2 *mode_cmd);
struct drm_framebuffer *
drm_gem_fb_create_with_dirty(struct drm_device *dev, struct drm_file *file,
const struct drm_mode_fb_cmd2 *mode_cmd);
int drm_gem_fb_prepare_fb(struct drm_plane *plane,
struct drm_plane_state *state);

View File

@@ -71,7 +71,7 @@
* FIXME: All users of drm_can_sleep should be removed (see todo.rst)
*
* Returns:
* True if kgdb is active or we are in an atomic context or irqs are disabled
* False if kgdb is active, we are in atomic context or irqs are disabled.
*/
static inline bool drm_can_sleep(void)
{

View File

@@ -14,6 +14,7 @@
#include <drm/tinydrm/tinydrm.h>
struct drm_rect;
struct spi_device;
struct gpio_desc;
struct regulator;
@@ -67,6 +68,8 @@ int mipi_dbi_init(struct device *dev, struct mipi_dbi *mipi,
const struct drm_simple_display_pipe_funcs *pipe_funcs,
struct drm_driver *driver,
const struct drm_display_mode *mode, unsigned int rotation);
void mipi_dbi_pipe_update(struct drm_simple_display_pipe *pipe,
struct drm_plane_state *old_state);
void mipi_dbi_enable_flush(struct mipi_dbi *mipi,
struct drm_crtc_state *crtc_state,
struct drm_plane_state *plan_state);
@@ -80,7 +83,7 @@ u32 mipi_dbi_spi_cmd_max_speed(struct spi_device *spi, size_t len);
int mipi_dbi_command_read(struct mipi_dbi *mipi, u8 cmd, u8 *val);
int mipi_dbi_command_buf(struct mipi_dbi *mipi, u8 cmd, u8 *data, size_t len);
int mipi_dbi_buf_copy(void *dst, struct drm_framebuffer *fb,
struct drm_clip_rect *clip, bool swap);
struct drm_rect *clip, bool swap);
/**
* mipi_dbi_command - MIPI DCS command with optional parameter(s)
* @mipi: MIPI structure

View File

@@ -11,8 +11,8 @@
#define __LINUX_TINYDRM_HELPERS_H
struct backlight_device;
struct tinydrm_device;
struct drm_clip_rect;
struct drm_framebuffer;
struct drm_rect;
struct spi_transfer;
struct spi_message;
struct spi_device;
@@ -33,23 +33,15 @@ static inline bool tinydrm_machine_little_endian(void)
#endif
}
bool tinydrm_merge_clips(struct drm_clip_rect *dst,
struct drm_clip_rect *src, unsigned int num_clips,
unsigned int flags, u32 max_width, u32 max_height);
int tinydrm_fb_dirty(struct drm_framebuffer *fb,
struct drm_file *file_priv,
unsigned int flags, unsigned int color,
struct drm_clip_rect *clips,
unsigned int num_clips);
void tinydrm_memcpy(void *dst, void *vaddr, struct drm_framebuffer *fb,
struct drm_clip_rect *clip);
struct drm_rect *clip);
void tinydrm_swab16(u16 *dst, void *vaddr, struct drm_framebuffer *fb,
struct drm_clip_rect *clip);
struct drm_rect *clip);
void tinydrm_xrgb8888_to_rgb565(u16 *dst, void *vaddr,
struct drm_framebuffer *fb,
struct drm_clip_rect *clip, bool swap);
struct drm_rect *clip, bool swap);
void tinydrm_xrgb8888_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb,
struct drm_clip_rect *clip);
struct drm_rect *clip);
size_t tinydrm_spi_max_transfer_size(struct spi_device *spi, size_t max_len);
bool tinydrm_spi_bpw_supported(struct spi_device *spi, u8 bpw);

View File

@@ -10,14 +10,9 @@
#ifndef __LINUX_TINYDRM_H
#define __LINUX_TINYDRM_H
#include <linux/mutex.h>
#include <drm/drm_simple_kms_helper.h>
struct drm_clip_rect;
struct drm_driver;
struct drm_file;
struct drm_framebuffer;
struct drm_framebuffer_funcs;
/**
* struct tinydrm_device - tinydrm device
@@ -32,24 +27,6 @@ struct tinydrm_device {
* @pipe: Display pipe structure
*/
struct drm_simple_display_pipe pipe;
/**
* @dirty_lock: Serializes framebuffer flushing
*/
struct mutex dirty_lock;
/**
* @fb_funcs: Framebuffer functions used when creating framebuffers
*/
const struct drm_framebuffer_funcs *fb_funcs;
/**
* @fb_dirty: Framebuffer dirty callback
*/
int (*fb_dirty)(struct drm_framebuffer *framebuffer,
struct drm_file *file_priv, unsigned flags,
unsigned color, struct drm_clip_rect *clips,
unsigned num_clips);
};
static inline struct tinydrm_device *
@@ -82,13 +59,10 @@ pipe_to_tinydrm(struct drm_simple_display_pipe *pipe)
.clock = 1 /* pass validation */
int devm_tinydrm_init(struct device *parent, struct tinydrm_device *tdev,
const struct drm_framebuffer_funcs *fb_funcs,
struct drm_driver *driver);
int devm_tinydrm_register(struct tinydrm_device *tdev);
void tinydrm_shutdown(struct tinydrm_device *tdev);
void tinydrm_display_pipe_update(struct drm_simple_display_pipe *pipe,
struct drm_plane_state *old_state);
int
tinydrm_display_pipe_init(struct tinydrm_device *tdev,
const struct drm_simple_display_pipe_funcs *funcs,