summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2013-09-18 13:04:59 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2013-09-18 13:18:12 +0200
commit963dfc529cd836beb8c19ae458a7d2cc0a465565 (patch)
tree66bb5e48482b80fe935e56780f3812fd092ab6b9
parent30b20bf2e7c1a52e467a70090cb5063df2f556ab (diff)
downloadrockbox-963dfc529cd836beb8c19ae458a7d2cc0a465565.tar.gz
rockbox-963dfc529cd836beb8c19ae458a7d2cc0a465565.zip
regtools/qeditor: enhance pinctrl analyser
Change-Id: I82c5a86ade4c804872ac7665bce583499467cae9
-rw-r--r--utils/regtools/qeditor/std_analysers.cpp60
1 files changed, 47 insertions, 13 deletions
diff --git a/utils/regtools/qeditor/std_analysers.cpp b/utils/regtools/qeditor/std_analysers.cpp
index 0cb7533459..ba33d723b9 100644
--- a/utils/regtools/qeditor/std_analysers.cpp
+++ b/utils/regtools/qeditor/std_analysers.cpp
@@ -741,12 +741,35 @@ void PinAnalyser::FillList()
741 for(int bank = 0; bank < 4; bank++) 741 for(int bank = 0; bank < 4; bank++)
742 { 742 {
743 QTableWidget *table = new QTableWidget; 743 QTableWidget *table = new QTableWidget;
744 table->setColumnCount(2); 744 table->setColumnCount(6);
745 table->setHorizontalHeaderItem(0, new QTableWidgetItem("Pin")); 745 table->setHorizontalHeaderItem(0, new QTableWidgetItem("Pin"));
746 table->setHorizontalHeaderItem(1, new QTableWidgetItem("Function")); 746 table->setHorizontalHeaderItem(1, new QTableWidgetItem("Function"));
747 table->setHorizontalHeaderItem(2, new QTableWidgetItem("Drive"));
748 table->setHorizontalHeaderItem(3, new QTableWidgetItem("Voltage"));
749 table->setHorizontalHeaderItem(4, new QTableWidgetItem("Value"));
750 table->setHorizontalHeaderItem(5, new QTableWidgetItem("Pull"));
747 table->verticalHeader()->setVisible(false); 751 table->verticalHeader()->setVisible(false);
748 table->horizontalHeader()->setStretchLastSection(true); 752 table->horizontalHeader()->setStretchLastSection(true);
749 m_panel->addItem(table, QString("Bank %1").arg(bank)); 753 m_panel->addItem(table, QString("Bank %1").arg(bank));
754 uint32_t muxsel[2], drive[4], pull, in, out, oe;
755 bool error = false;
756 for(int i = 0; i < 2; i++)
757 if(!helper.ReadRegister("PINCTRL", QString("MUXSEL%1").arg(bank * 2 + i), muxsel[i]))
758 error = true;
759 /* don't make an error for those since some do not exist */
760 for(int i = 0; i < 4; i++)
761 if(!helper.ReadRegister("PINCTRL", QString("DRIVE%1").arg(bank * 4 + i), drive[i]))
762 drive[i] = 0;
763 if(error)
764 continue;
765 if(!helper.ReadRegister("PINCTRL", QString("PULL%1").arg(bank), pull))
766 pull = 0;
767 if(!helper.ReadRegister("PINCTRL", QString("DIN%1").arg(bank), in))
768 in = 0;
769 if(!helper.ReadRegister("PINCTRL", QString("DOUT%1").arg(bank), out))
770 out = 0;
771 if(!helper.ReadRegister("PINCTRL", QString("DOE%1").arg(bank), oe))
772 oe = 0;
750 773
751 for(int pin = 0; pin < 32; pin++) 774 for(int pin = 0; pin < 32; pin++)
752 { 775 {
@@ -760,22 +783,33 @@ void PinAnalyser::FillList()
760 /* add line */ 783 /* add line */
761 int row = table->rowCount(); 784 int row = table->rowCount();
762 table->setRowCount(row + 1); 785 table->setRowCount(row + 1);
763 /* pin name */ 786 /* name */
764 table->setItem(row, 0, new QTableWidgetItem(QString("B%1P%2") 787 table->setItem(row, 0, new QTableWidgetItem(QString("B%1P%2")
765 .arg(bank).arg(pin, 2, 10, QChar('0')))); 788 .arg(bank).arg(pin, 2, 10, QChar('0'))));
766 table->item(row, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); 789 table->item(row, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
767 /* pin function */ 790 /* function */
768 int fn = -1; 791 int fn = (muxsel[pin / 16] >> ((pin % 16) * 2)) & 3;
769 if(helper.ReadRegister("PINCTRL", QString("MUXSEL%1").arg(bank * 2 + pin / 16), value)) 792 table->setItem(row, 1, new QTableWidgetItem(QString(map[bank].pins[pin].function[fn].name)));
770 fn = (value >> ((pin % 16) * 2)) & 3; 793 table->item(row, 1)->setBackground(QBrush(color_map[map[bank].pins[pin].function[fn].group]));
771 if(fn != -1)
772 {
773 table->setItem(row, 1, new QTableWidgetItem(QString(map[bank].pins[pin].function[fn].name)));
774 table->item(row, 1)->setBackground(QBrush(color_map[map[bank].pins[pin].function[fn].group]));
775 }
776 else
777 table->setItem(row, 1, new QTableWidgetItem(QString("<read error>")));
778 table->item(row, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); 794 table->item(row, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
795 /* drive */
796 int drv = (drive[pin / 8] >> ((pin % 8) * 4)) & 3;
797 const char *strength[4] = {"4 mA", "8 mA", "12 mA", "16 mA"};
798 table->setItem(row, 2, new QTableWidgetItem(QString(strength[drv])));
799 table->item(row, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
800 /* voltage */
801 int volt = (drive[pin / 8] >> (((pin % 8) * 4) + 2)) & 1;
802 if(m_io_backend->GetSocName() == "imx233")
803 volt = 1; /* cannot change voltage on imx233 */
804 const char *voltage[2] = {"1.8 V", "3.3 V"};
805 table->setItem(row, 3, new QTableWidgetItem(QString(voltage[volt])));
806 table->item(row, 3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
807 /* value */
808 table->setItem(row, 4, new QTableWidgetItem(QString("%1").arg((in >> pin) & 1)));
809 table->item(row, 4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
810 /* pull */
811 table->setItem(row, 5, new QTableWidgetItem(QString("%1").arg((pull >> pin) & 1)));
812 table->item(row, 5)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
779 } 813 }
780 } 814 }
781} 815}