Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/panel: ilitek-ili9881c: Add Bestar BSD1218-A101KL68 support

Add support for the Bestar BSD1218-A101KL68 panel.

The init table comes from the Firefly BSP ([1]).

[1] https://gitlab.com/firefly-linux/kernel/-/blob/rk3588/firefly/arch/arm64/boot/dts/rockchip/aio-3588l-mipi101-BSD1218-A101KL68.dtsi

Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://lore.kernel.org/r/20250707164906.1445288-7-heiko@sntech.de

+221
+221
drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
··· 1417 1417 ILI9881C_COMMAND_INSTR(0xD3, 0x39), 1418 1418 }; 1419 1419 1420 + static const struct ili9881c_instr bsd1218_a101kl68_init[] = { 1421 + ILI9881C_SWITCH_PAGE_INSTR(3), 1422 + ILI9881C_COMMAND_INSTR(0x01, 0x00), 1423 + ILI9881C_COMMAND_INSTR(0x02, 0x00), 1424 + ILI9881C_COMMAND_INSTR(0x03, 0x55), 1425 + ILI9881C_COMMAND_INSTR(0x04, 0x55), 1426 + ILI9881C_COMMAND_INSTR(0x05, 0x03), 1427 + ILI9881C_COMMAND_INSTR(0x06, 0x06), 1428 + ILI9881C_COMMAND_INSTR(0x07, 0x00), 1429 + ILI9881C_COMMAND_INSTR(0x08, 0x07), 1430 + ILI9881C_COMMAND_INSTR(0x09, 0x00), 1431 + ILI9881C_COMMAND_INSTR(0x0a, 0x00), 1432 + ILI9881C_COMMAND_INSTR(0x0b, 0x00), 1433 + ILI9881C_COMMAND_INSTR(0x0c, 0x00), 1434 + ILI9881C_COMMAND_INSTR(0x0d, 0x00), 1435 + ILI9881C_COMMAND_INSTR(0x0e, 0x00), 1436 + ILI9881C_COMMAND_INSTR(0x0f, 0x00), 1437 + ILI9881C_COMMAND_INSTR(0x10, 0x00), 1438 + ILI9881C_COMMAND_INSTR(0x11, 0x00), 1439 + ILI9881C_COMMAND_INSTR(0x12, 0x00), 1440 + ILI9881C_COMMAND_INSTR(0x13, 0x00), 1441 + ILI9881C_COMMAND_INSTR(0x14, 0x00), 1442 + ILI9881C_COMMAND_INSTR(0x15, 0x00), 1443 + ILI9881C_COMMAND_INSTR(0x16, 0x00), 1444 + ILI9881C_COMMAND_INSTR(0x17, 0x00), 1445 + ILI9881C_COMMAND_INSTR(0x18, 0x00), 1446 + ILI9881C_COMMAND_INSTR(0x19, 0x00), 1447 + ILI9881C_COMMAND_INSTR(0x1a, 0x00), 1448 + ILI9881C_COMMAND_INSTR(0x1b, 0x00), 1449 + ILI9881C_COMMAND_INSTR(0x1c, 0x00), 1450 + ILI9881C_COMMAND_INSTR(0x1d, 0x00), 1451 + ILI9881C_COMMAND_INSTR(0x1e, 0xc0), 1452 + ILI9881C_COMMAND_INSTR(0x1f, 0x80), 1453 + ILI9881C_COMMAND_INSTR(0x20, 0x04), 1454 + ILI9881C_COMMAND_INSTR(0x21, 0x03), 1455 + ILI9881C_COMMAND_INSTR(0x22, 0x00), 1456 + ILI9881C_COMMAND_INSTR(0x23, 0x00), 1457 + ILI9881C_COMMAND_INSTR(0x24, 0x00), 1458 + ILI9881C_COMMAND_INSTR(0x25, 0x00), 1459 + ILI9881C_COMMAND_INSTR(0x26, 0x00), 1460 + ILI9881C_COMMAND_INSTR(0x27, 0x00), 1461 + ILI9881C_COMMAND_INSTR(0x28, 0x33), 1462 + ILI9881C_COMMAND_INSTR(0x29, 0x33), 1463 + ILI9881C_COMMAND_INSTR(0x2a, 0x00), 1464 + ILI9881C_COMMAND_INSTR(0x2b, 0x00), 1465 + ILI9881C_COMMAND_INSTR(0x2c, 0x00), 1466 + ILI9881C_COMMAND_INSTR(0x2d, 0x00), 1467 + ILI9881C_COMMAND_INSTR(0x2e, 0x00), 1468 + ILI9881C_COMMAND_INSTR(0x2f, 0x00), 1469 + ILI9881C_COMMAND_INSTR(0x30, 0x00), 1470 + ILI9881C_COMMAND_INSTR(0x31, 0x00), 1471 + ILI9881C_COMMAND_INSTR(0x32, 0x00), 1472 + ILI9881C_COMMAND_INSTR(0x33, 0x00), 1473 + ILI9881C_COMMAND_INSTR(0x34, 0x04), 1474 + ILI9881C_COMMAND_INSTR(0x35, 0x00), 1475 + ILI9881C_COMMAND_INSTR(0x36, 0x00), 1476 + ILI9881C_COMMAND_INSTR(0x37, 0x00), 1477 + ILI9881C_COMMAND_INSTR(0x38, 0x3c), 1478 + ILI9881C_COMMAND_INSTR(0x39, 0x00), 1479 + ILI9881C_COMMAND_INSTR(0x3a, 0x00), 1480 + ILI9881C_COMMAND_INSTR(0x3b, 0x00), 1481 + ILI9881C_COMMAND_INSTR(0x3c, 0x00), 1482 + ILI9881C_COMMAND_INSTR(0x3d, 0x00), 1483 + ILI9881C_COMMAND_INSTR(0x3e, 0x00), 1484 + ILI9881C_COMMAND_INSTR(0x3f, 0x00), 1485 + ILI9881C_COMMAND_INSTR(0x40, 0x00), 1486 + ILI9881C_COMMAND_INSTR(0x41, 0x00), 1487 + ILI9881C_COMMAND_INSTR(0x42, 0x00), 1488 + ILI9881C_COMMAND_INSTR(0x43, 0x00), 1489 + ILI9881C_COMMAND_INSTR(0x44, 0x00), 1490 + ILI9881C_COMMAND_INSTR(0x50, 0x00), 1491 + ILI9881C_COMMAND_INSTR(0x51, 0x11), 1492 + ILI9881C_COMMAND_INSTR(0x52, 0x44), 1493 + ILI9881C_COMMAND_INSTR(0x53, 0x55), 1494 + ILI9881C_COMMAND_INSTR(0x54, 0x88), 1495 + ILI9881C_COMMAND_INSTR(0x55, 0xab), 1496 + ILI9881C_COMMAND_INSTR(0x56, 0x00), 1497 + ILI9881C_COMMAND_INSTR(0x57, 0x11), 1498 + ILI9881C_COMMAND_INSTR(0x58, 0x22), 1499 + ILI9881C_COMMAND_INSTR(0x59, 0x33), 1500 + ILI9881C_COMMAND_INSTR(0x5a, 0x44), 1501 + ILI9881C_COMMAND_INSTR(0x5b, 0x55), 1502 + ILI9881C_COMMAND_INSTR(0x5c, 0x66), 1503 + ILI9881C_COMMAND_INSTR(0x5d, 0x77), 1504 + ILI9881C_COMMAND_INSTR(0x5e, 0x00), 1505 + ILI9881C_COMMAND_INSTR(0x5f, 0x02), 1506 + ILI9881C_COMMAND_INSTR(0x60, 0x02), 1507 + ILI9881C_COMMAND_INSTR(0x61, 0x0a), 1508 + ILI9881C_COMMAND_INSTR(0x62, 0x09), 1509 + ILI9881C_COMMAND_INSTR(0x63, 0x08), 1510 + ILI9881C_COMMAND_INSTR(0x64, 0x13), 1511 + ILI9881C_COMMAND_INSTR(0x65, 0x12), 1512 + ILI9881C_COMMAND_INSTR(0x66, 0x11), 1513 + ILI9881C_COMMAND_INSTR(0x67, 0x10), 1514 + ILI9881C_COMMAND_INSTR(0x68, 0x0f), 1515 + ILI9881C_COMMAND_INSTR(0x69, 0x0e), 1516 + ILI9881C_COMMAND_INSTR(0x6a, 0x0d), 1517 + ILI9881C_COMMAND_INSTR(0x6b, 0x0c), 1518 + ILI9881C_COMMAND_INSTR(0x6c, 0x06), 1519 + ILI9881C_COMMAND_INSTR(0x6d, 0x07), 1520 + ILI9881C_COMMAND_INSTR(0x6e, 0x02), 1521 + ILI9881C_COMMAND_INSTR(0x6f, 0x02), 1522 + ILI9881C_COMMAND_INSTR(0x70, 0x02), 1523 + ILI9881C_COMMAND_INSTR(0x71, 0x02), 1524 + ILI9881C_COMMAND_INSTR(0x72, 0x02), 1525 + ILI9881C_COMMAND_INSTR(0x73, 0x02), 1526 + ILI9881C_COMMAND_INSTR(0x74, 0x02), 1527 + ILI9881C_COMMAND_INSTR(0x75, 0x02), 1528 + ILI9881C_COMMAND_INSTR(0x76, 0x02), 1529 + ILI9881C_COMMAND_INSTR(0x77, 0x0a), 1530 + ILI9881C_COMMAND_INSTR(0x78, 0x06), 1531 + ILI9881C_COMMAND_INSTR(0x79, 0x07), 1532 + ILI9881C_COMMAND_INSTR(0x7a, 0x10), 1533 + ILI9881C_COMMAND_INSTR(0x7b, 0x11), 1534 + ILI9881C_COMMAND_INSTR(0x7c, 0x12), 1535 + ILI9881C_COMMAND_INSTR(0x7d, 0x13), 1536 + ILI9881C_COMMAND_INSTR(0x7e, 0x0c), 1537 + ILI9881C_COMMAND_INSTR(0x7f, 0x0d), 1538 + ILI9881C_COMMAND_INSTR(0x80, 0x0e), 1539 + ILI9881C_COMMAND_INSTR(0x81, 0x0f), 1540 + ILI9881C_COMMAND_INSTR(0x82, 0x09), 1541 + ILI9881C_COMMAND_INSTR(0x83, 0x08), 1542 + ILI9881C_COMMAND_INSTR(0x84, 0x02), 1543 + ILI9881C_COMMAND_INSTR(0x85, 0x02), 1544 + ILI9881C_COMMAND_INSTR(0x86, 0x02), 1545 + ILI9881C_COMMAND_INSTR(0x87, 0x02), 1546 + ILI9881C_COMMAND_INSTR(0x88, 0x02), 1547 + ILI9881C_COMMAND_INSTR(0x89, 0x02), 1548 + ILI9881C_COMMAND_INSTR(0x8a, 0x02), 1549 + 1550 + ILI9881C_SWITCH_PAGE_INSTR(4), 1551 + ILI9881C_COMMAND_INSTR(0x6e, 0x2a), 1552 + ILI9881C_COMMAND_INSTR(0x6f, 0x37), 1553 + ILI9881C_COMMAND_INSTR(0x3a, 0x24), 1554 + ILI9881C_COMMAND_INSTR(0x8d, 0x19), 1555 + ILI9881C_COMMAND_INSTR(0x87, 0xba), 1556 + ILI9881C_COMMAND_INSTR(0xb2, 0xd1), 1557 + ILI9881C_COMMAND_INSTR(0x88, 0x0b), 1558 + ILI9881C_COMMAND_INSTR(0x38, 0x01), 1559 + ILI9881C_COMMAND_INSTR(0x39, 0x00), 1560 + ILI9881C_COMMAND_INSTR(0xb5, 0x02), 1561 + ILI9881C_COMMAND_INSTR(0x31, 0x25), 1562 + ILI9881C_COMMAND_INSTR(0x3b, 0x98), 1563 + 1564 + ILI9881C_SWITCH_PAGE_INSTR(1), 1565 + ILI9881C_COMMAND_INSTR(0x22, 0x0a), 1566 + ILI9881C_COMMAND_INSTR(0x31, 0x0c), 1567 + ILI9881C_COMMAND_INSTR(0x53, 0x40), 1568 + ILI9881C_COMMAND_INSTR(0x55, 0x45), 1569 + ILI9881C_COMMAND_INSTR(0x50, 0xb7), 1570 + ILI9881C_COMMAND_INSTR(0x51, 0xb2), 1571 + ILI9881C_COMMAND_INSTR(0x60, 0x07), 1572 + ILI9881C_COMMAND_INSTR(0xa0, 0x22), 1573 + ILI9881C_COMMAND_INSTR(0xa1, 0x3f), 1574 + ILI9881C_COMMAND_INSTR(0xa2, 0x4e), 1575 + ILI9881C_COMMAND_INSTR(0xa3, 0x17), 1576 + ILI9881C_COMMAND_INSTR(0xa4, 0x1a), 1577 + ILI9881C_COMMAND_INSTR(0xa5, 0x2d), 1578 + ILI9881C_COMMAND_INSTR(0xa6, 0x21), 1579 + ILI9881C_COMMAND_INSTR(0xa7, 0x22), 1580 + ILI9881C_COMMAND_INSTR(0xa8, 0xc4), 1581 + ILI9881C_COMMAND_INSTR(0xa9, 0x1b), 1582 + ILI9881C_COMMAND_INSTR(0xaa, 0x25), 1583 + ILI9881C_COMMAND_INSTR(0xab, 0xa7), 1584 + ILI9881C_COMMAND_INSTR(0xac, 0x1a), 1585 + ILI9881C_COMMAND_INSTR(0xad, 0x19), 1586 + ILI9881C_COMMAND_INSTR(0xae, 0x4b), 1587 + ILI9881C_COMMAND_INSTR(0xaf, 0x1f), 1588 + ILI9881C_COMMAND_INSTR(0xb0, 0x2a), 1589 + ILI9881C_COMMAND_INSTR(0xb1, 0x59), 1590 + ILI9881C_COMMAND_INSTR(0xb2, 0x64), 1591 + ILI9881C_COMMAND_INSTR(0xb3, 0x3f), 1592 + ILI9881C_COMMAND_INSTR(0xc0, 0x22), 1593 + ILI9881C_COMMAND_INSTR(0xc1, 0x48), 1594 + ILI9881C_COMMAND_INSTR(0xc2, 0x59), 1595 + ILI9881C_COMMAND_INSTR(0xc3, 0x15), 1596 + ILI9881C_COMMAND_INSTR(0xc4, 0x15), 1597 + ILI9881C_COMMAND_INSTR(0xc5, 0x28), 1598 + ILI9881C_COMMAND_INSTR(0xc6, 0x1c), 1599 + ILI9881C_COMMAND_INSTR(0xc7, 0x1e), 1600 + ILI9881C_COMMAND_INSTR(0xc8, 0xc4), 1601 + ILI9881C_COMMAND_INSTR(0xc9, 0x1c), 1602 + ILI9881C_COMMAND_INSTR(0xca, 0x2b), 1603 + ILI9881C_COMMAND_INSTR(0xcb, 0xa3), 1604 + ILI9881C_COMMAND_INSTR(0xcc, 0x1f), 1605 + ILI9881C_COMMAND_INSTR(0xcd, 0x1e), 1606 + ILI9881C_COMMAND_INSTR(0xce, 0x52), 1607 + ILI9881C_COMMAND_INSTR(0xcf, 0x24), 1608 + ILI9881C_COMMAND_INSTR(0xd0, 0x2a), 1609 + ILI9881C_COMMAND_INSTR(0xd1, 0x58), 1610 + ILI9881C_COMMAND_INSTR(0xd2, 0x68), 1611 + ILI9881C_COMMAND_INSTR(0xd3, 0x3f), 1612 + }; 1613 + 1420 1614 static inline struct ili9881c *panel_to_ili9881c(struct drm_panel *panel) 1421 1615 { 1422 1616 return container_of(panel, struct ili9881c, panel); ··· 1823 1629 .height_mm = 151, 1824 1630 }; 1825 1631 1632 + static const struct drm_display_mode bsd1218_a101kl68_default_mode = { 1633 + .clock = 70000, 1634 + 1635 + .hdisplay = 800, 1636 + .hsync_start = 800 + 40, 1637 + .hsync_end = 800 + 40 + 20, 1638 + .htotal = 800 + 40 + 20 + 20, 1639 + 1640 + .vdisplay = 1280, 1641 + .vsync_start = 1280 + 20, 1642 + .vsync_end = 1280 + 20 + 4, 1643 + .vtotal = 1280 + 20 + 4 + 20, 1644 + 1645 + .width_mm = 120, 1646 + .height_mm = 170, 1647 + }; 1648 + 1826 1649 static int ili9881c_get_modes(struct drm_panel *panel, 1827 1650 struct drm_connector *connector) 1828 1651 { ··· 2008 1797 .lanes = 2, 2009 1798 }; 2010 1799 1800 + static const struct ili9881c_desc bsd1218_a101kl68_desc = { 1801 + .init = bsd1218_a101kl68_init, 1802 + .init_length = ARRAY_SIZE(bsd1218_a101kl68_init), 1803 + .mode = &bsd1218_a101kl68_default_mode, 1804 + .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | 1805 + MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_NO_EOT_PACKET, 1806 + .lanes = 4, 1807 + }; 1808 + 2011 1809 static const struct of_device_id ili9881c_of_match[] = { 2012 1810 { .compatible = "bananapi,lhr050h41", .data = &lhr050h41_desc }, 1811 + { .compatible = "bestar,bsd1218-a101kl68", .data = &bsd1218_a101kl68_desc }, 2013 1812 { .compatible = "feixin,k101-im2byl02", .data = &k101_im2byl02_desc }, 2014 1813 { .compatible = "startek,kd050hdfia020", .data = &kd050hdfia020_desc }, 2015 1814 { .compatible = "tdo,tl050hdv35", .data = &tl050hdv35_desc },