Skip to content

Commit

Permalink
drm/ssd130x: Rename commands that are shared across chip families
Browse files Browse the repository at this point in the history
There are some commands that are shared between the SSD130x and SSD132x
controller families, define these as a common SSD13XX set of commands.

Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20231014071520.1342189-4-javierm@redhat.com
  • Loading branch information
Javier Martinez Canillas committed Oct 18, 2023
1 parent e6663dd commit 9081d21
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 25 deletions.
4 changes: 2 additions & 2 deletions drivers/gpu/drm/solomon/ssd130x-spi.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ static int ssd130x_spi_write(void *context, const void *data, size_t count)
struct spi_device *spi = t->spi;
const u8 *reg = data;

if (*reg == SSD130X_COMMAND)
if (*reg == SSD13XX_COMMAND)
gpiod_set_value_cansleep(t->dc, 0);

if (*reg == SSD130X_DATA)
if (*reg == SSD13XX_DATA)
gpiod_set_value_cansleep(t->dc, 1);

/* Remove control byte since is not used in a 4-wire SPI interface */
Expand Down
47 changes: 26 additions & 21 deletions drivers/gpu/drm/solomon/ssd130x.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,18 +44,24 @@

#define SSD130X_PAGE_HEIGHT 8

/* ssd13xx commands */
#define SSD13XX_CONTRAST 0x81
#define SSD13XX_SET_SEG_REMAP 0xa0
#define SSD13XX_SET_MULTIPLEX_RATIO 0xa8
#define SSD13XX_DISPLAY_OFF 0xae
#define SSD13XX_DISPLAY_ON 0xaf

#define SSD13XX_SET_SEG_REMAP_MASK GENMASK(0, 0)
#define SSD13XX_SET_SEG_REMAP_SET(val) FIELD_PREP(SSD13XX_SET_SEG_REMAP_MASK, (val))

/* ssd130x commands */
#define SSD130X_PAGE_COL_START_LOW 0x00
#define SSD130X_PAGE_COL_START_HIGH 0x10
#define SSD130X_SET_ADDRESS_MODE 0x20
#define SSD130X_SET_COL_RANGE 0x21
#define SSD130X_SET_PAGE_RANGE 0x22
#define SSD130X_CONTRAST 0x81
#define SSD130X_SET_LOOKUP_TABLE 0x91
#define SSD130X_CHARGE_PUMP 0x8d
#define SSD130X_SET_SEG_REMAP 0xa0
#define SSD130X_DISPLAY_OFF 0xae
#define SSD130X_SET_MULTIPLEX_RATIO 0xa8
#define SSD130X_DISPLAY_ON 0xaf
#define SSD130X_START_PAGE_ADDRESS 0xb0
#define SSD130X_SET_COM_SCAN_DIR 0xc0
#define SSD130X_SET_DISPLAY_OFFSET 0xd3
Expand All @@ -65,13 +71,12 @@
#define SSD130X_SET_COM_PINS_CONFIG 0xda
#define SSD130X_SET_VCOMH 0xdb

/* ssd130x commands accessors */
#define SSD130X_PAGE_COL_START_MASK GENMASK(3, 0)
#define SSD130X_PAGE_COL_START_HIGH_SET(val) FIELD_PREP(SSD130X_PAGE_COL_START_MASK, (val) >> 4)
#define SSD130X_PAGE_COL_START_LOW_SET(val) FIELD_PREP(SSD130X_PAGE_COL_START_MASK, (val))
#define SSD130X_START_PAGE_ADDRESS_MASK GENMASK(2, 0)
#define SSD130X_START_PAGE_ADDRESS_SET(val) FIELD_PREP(SSD130X_START_PAGE_ADDRESS_MASK, (val))
#define SSD130X_SET_SEG_REMAP_MASK GENMASK(0, 0)
#define SSD130X_SET_SEG_REMAP_SET(val) FIELD_PREP(SSD130X_SET_SEG_REMAP_MASK, (val))
#define SSD130X_SET_COM_SCAN_DIR_MASK GENMASK(3, 3)
#define SSD130X_SET_COM_SCAN_DIR_SET(val) FIELD_PREP(SSD130X_SET_COM_SCAN_DIR_MASK, (val))
#define SSD130X_SET_CLOCK_DIV_MASK GENMASK(3, 0)
Expand Down Expand Up @@ -171,20 +176,20 @@ static inline struct ssd130x_device *drm_to_ssd130x(struct drm_device *drm)
}

/*
* Helper to write data (SSD130X_DATA) to the device.
* Helper to write data (SSD13XX_DATA) to the device.
*/
static int ssd130x_write_data(struct ssd130x_device *ssd130x, u8 *values, int count)
{
return regmap_bulk_write(ssd130x->regmap, SSD130X_DATA, values, count);
return regmap_bulk_write(ssd130x->regmap, SSD13XX_DATA, values, count);
}

/*
* Helper to write command (SSD130X_COMMAND). The fist variadic argument
* Helper to write command (SSD13XX_COMMAND). The fist variadic argument
* is the command to write and the following are the command options.
*
* Note that the ssd130x protocol requires each command and option to be
* written as a SSD130X_COMMAND device register value. That is why a call
* to regmap_write(..., SSD130X_COMMAND, ...) is done for each argument.
* Note that the ssd13xx protocol requires each command and option to be
* written as a SSD13XX_COMMAND device register value. That is why a call
* to regmap_write(..., SSD13XX_COMMAND, ...) is done for each argument.
*/
static int ssd130x_write_cmd(struct ssd130x_device *ssd130x, int count,
/* u8 cmd, u8 option, ... */...)
Expand All @@ -197,7 +202,7 @@ static int ssd130x_write_cmd(struct ssd130x_device *ssd130x, int count,

do {
value = va_arg(ap, int);
ret = regmap_write(ssd130x->regmap, SSD130X_COMMAND, value);
ret = regmap_write(ssd130x->regmap, SSD13XX_COMMAND, value);
if (ret)
goto out_end;
} while (--count);
Expand Down Expand Up @@ -341,13 +346,13 @@ static int ssd130x_init(struct ssd130x_device *ssd130x)
int ret;

/* Set initial contrast */
ret = ssd130x_write_cmd(ssd130x, 2, SSD130X_CONTRAST, ssd130x->contrast);
ret = ssd130x_write_cmd(ssd130x, 2, SSD13XX_CONTRAST, ssd130x->contrast);
if (ret < 0)
return ret;

/* Set segment re-map */
seg_remap = (SSD130X_SET_SEG_REMAP |
SSD130X_SET_SEG_REMAP_SET(ssd130x->seg_remap));
seg_remap = (SSD13XX_SET_SEG_REMAP |
SSD13XX_SET_SEG_REMAP_SET(ssd130x->seg_remap));
ret = ssd130x_write_cmd(ssd130x, 1, seg_remap);
if (ret < 0)
return ret;
Expand All @@ -360,7 +365,7 @@ static int ssd130x_init(struct ssd130x_device *ssd130x)
return ret;

/* Set multiplex ratio value */
ret = ssd130x_write_cmd(ssd130x, 2, SSD130X_SET_MULTIPLEX_RATIO, ssd130x->height - 1);
ret = ssd130x_write_cmd(ssd130x, 2, SSD13XX_SET_MULTIPLEX_RATIO, ssd130x->height - 1);
if (ret < 0)
return ret;

Expand Down Expand Up @@ -915,7 +920,7 @@ static void ssd130x_encoder_atomic_enable(struct drm_encoder *encoder,
if (ret)
goto power_off;

ssd130x_write_cmd(ssd130x, 1, SSD130X_DISPLAY_ON);
ssd130x_write_cmd(ssd130x, 1, SSD13XX_DISPLAY_ON);

backlight_enable(ssd130x->bl_dev);

Expand All @@ -934,7 +939,7 @@ static void ssd130x_encoder_atomic_disable(struct drm_encoder *encoder,

backlight_disable(ssd130x->bl_dev);

ssd130x_write_cmd(ssd130x, 1, SSD130X_DISPLAY_OFF);
ssd130x_write_cmd(ssd130x, 1, SSD13XX_DISPLAY_OFF);

ssd130x_power_off(ssd130x);
}
Expand Down Expand Up @@ -1010,7 +1015,7 @@ static int ssd130x_update_bl(struct backlight_device *bdev)

ssd130x->contrast = brightness;

ret = ssd130x_write_cmd(ssd130x, 1, SSD130X_CONTRAST);
ret = ssd130x_write_cmd(ssd130x, 1, SSD13XX_CONTRAST);
if (ret < 0)
return ret;

Expand Down
4 changes: 2 additions & 2 deletions drivers/gpu/drm/solomon/ssd130x.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@

#include <linux/regmap.h>

#define SSD130X_DATA 0x40
#define SSD130X_COMMAND 0x80
#define SSD13XX_DATA 0x40
#define SSD13XX_COMMAND 0x80

enum ssd130x_family_ids {
SSD130X_FAMILY
Expand Down

0 comments on commit 9081d21

Please sign in to comment.