From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Lothar=20Wa=C3=9Fmann?= Subject: [PATCH 2/2] pwm: imx: support polarity inversion Date: Mon, 13 Jan 2014 11:29:48 +0100 Message-ID: <1389608988-10981-3-git-send-email-LW@KARO-electronics.de> References: <1389608988-10981-1-git-send-email-LW@KARO-electronics.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1389608988-10981-1-git-send-email-LW@KARO-electronics.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: linux-arm-kernel@lists.infradead.org, Shawn Guo , Sascha Hauer , Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , Russell King , Thierry Reding , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org Cc: =?UTF-8?q?Lothar=20Wa=C3=9Fmann?= List-Id: linux-pwm@vger.kernel.org VGhlIGkuTVggUFdNIGNvbnRyb2xsZXIgc3VwcG9ydHMgaW52ZXJ0aW5nIHRoZSBwb2xhcml0eSBv ZiB0aGUgUFdNCm91dHB1dC4gTWFrZSB0aGlzIGZlYXR1cmUgYXZhaWxhYmxlIGluIHRoZSBweG0t aW14IGRyaXZlci4KClNpZ25lZC1vZmYtYnk6IExvdGhhciBXYcOfbWFubiA8TFdAS0FSTy1lbGVj dHJvbmljcy5kZT4KLS0tCiBhcmNoL2FybS9ib290L2R0cy9pbXgyNS5kdHNpICAgICAgICAgICAg ICB8ICAgIDcgKysrKy0tLQogYXJjaC9hcm0vYm9vdC9kdHMvaW14MjcuZHRzaSAgICAgICAgICAg ICAgfCAgICAyICstCiBhcmNoL2FybS9ib290L2R0cy9pbXg1MC5kdHNpICAgICAgICAgICAgICB8 ICAgIDQgKystLQogYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEuZHRzaSAgICAgICAgICAgICAgfCAg ICA0ICsrLS0KIGFyY2gvYXJtL2Jvb3QvZHRzL2lteDUzLW01M2V2ay5kdHMgICAgICAgIHwgICAg MiArLQogYXJjaC9hcm0vYm9vdC9kdHMvaW14NTMtbWJhNTMuZHRzICAgICAgICAgfCAgICAyICst CiBhcmNoL2FybS9ib290L2R0cy9pbXg1My5kdHNpICAgICAgICAgICAgICB8ICAgIDQgKystLQog YXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1uaXRyb2dlbjZ4LmR0c2kgfCAgICA0ICsrLS0KIGFy Y2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVsaXRlLmR0c2kgIHwgICAgNCArKy0tCiBhcmNo L2FybS9ib290L2R0cy9pbXg2cWRsLXNhYnJlc2QuZHRzaSAgICB8ICAgIDIgKy0KIGFyY2gvYXJt L2Jvb3QvZHRzL2lteDZxZGwuZHRzaSAgICAgICAgICAgIHwgICAgOCArKysrLS0tLQogYXJjaC9h cm0vYm9vdC9kdHMvaW14NnNsLmR0c2kgICAgICAgICAgICAgfCAgICA4ICsrKystLS0tCiBkcml2 ZXJzL3B3bS9wd20taW14LmMgICAgICAgICAgICAgICAgICAgICB8ICAgMjkgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDEzIGZpbGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDI1 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI1LmR0c2kg Yi9hcmNoL2FybS9ib290L2R0cy9pbXgyNS5kdHNpCmluZGV4IDllOWUzYjguLmRjY2UwOGMgMTAw NjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9v dC9kdHMvaW14MjUuZHRzaQpAQCAtMzYwLDcgKzM2MCw3IEBACiAKIAkJCXB3bTI6IHB3bUA1M2Zh MDAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14MjUtcHdtIiwgImZzbCxpbXgyNy1wd20i OwotCQkJCSNwd20tY2VsbHMgPSA8Mj47CisJCQkJI3B3bS1jZWxscyA9IDwzPjsKIAkJCQlyZWcg PSA8MHg1M2ZhMDAwMCAweDQwMDA+OwogCQkJCWNsb2NrcyA9IDwmY2xrcyAxMDY+LCA8JmNsa3Mg MzY+OwogCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJwZXIiOwpAQCAtMzc5LDcgKzM3OSw3IEBA CiAKIAkJCXB3bTM6IHB3bUA1M2ZhODAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14MjUt cHdtIiwgImZzbCxpbXgyNy1wd20iOwotCQkJCSNwd20tY2VsbHMgPSA8Mj47CisJCQkJI3B3bS1j ZWxscyA9IDwzPjsKIAkJCQlyZWcgPSA8MHg1M2ZhODAwMCAweDQwMDA+OwogCQkJCWNsb2NrcyA9 IDwmY2xrcyAxMDc+LCA8JmNsa3MgMzY+OwogCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJwZXIi OwpAQCAtNDIxLDYgKzQyMSw3IEBACiAKIAkJCXB3bTQ6IHB3bUA1M2ZjODAwMCB7CiAJCQkJY29t cGF0aWJsZSA9ICJmc2wsaW14MjUtcHdtIiwgImZzbCxpbXgyNy1wd20iOworCQkJCSNwd20tY2Vs bHMgPSA8Mz47CiAJCQkJcmVnID0gPDB4NTNmYzgwMDAgMHg0MDAwPjsKIAkJCQljbG9ja3MgPSA8 JmNsa3MgMTA4PiwgPCZjbGtzIDM2PjsKIAkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAicGVyIjsK QEAgLTQ2Nyw3ICs0NjgsNyBAQAogCiAJCQlwd20xOiBwd21ANTNmZTAwMDAgewogCQkJCWNvbXBh dGlibGUgPSAiZnNsLGlteDI1LXB3bSIsICJmc2wsaW14MjctcHdtIjsKLQkJCQkjcHdtLWNlbGxz ID0gPDI+OworCQkJCSNwd20tY2VsbHMgPSA8Mz47CiAJCQkJcmVnID0gPDB4NTNmZTAwMDAgMHg0 MDAwPjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgMTA1PiwgPCZjbGtzIDM2PjsKIAkJCQljbG9jay1u YW1lcyA9ICJpcGciLCAicGVyIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI3 LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXgyNy5kdHNpCmluZGV4IDdlOTg5NjYuLmJlNGM5 YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI3LmR0c2kKKysrIGIvYXJjaC9h cm0vYm9vdC9kdHMvaW14MjcuZHRzaQpAQCAtMTI2LDcgKzEyNiw3IEBACiAJCQl9OwogCiAJCQlw d206IHB3bUAxMDAwNjAwMCB7Ci0JCQkJI3B3bS1jZWxscyA9IDwyPjsKKwkJCQkjcHdtLWNlbGxz ID0gPDM+OwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDI3LXB3bSI7CiAJCQkJcmVnID0gPDB4 MTAwMDYwMDAgMHgxMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDIzPjsKZGlmZiAtLWdpdCBhL2Fy Y2gvYXJtL2Jvb3QvZHRzL2lteDUwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1MC5kdHNp CmluZGV4IDAxYzA0OTkuLmUzNjQ3YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lt eDUwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTAuZHRzaQpAQCAtMjczLDcgKzI3 Myw3IEBACiAJCQl9OwogCiAJCQlwd20xOiBwd21ANTNmYjQwMDAgewotCQkJCSNwd20tY2VsbHMg PSA8Mj47CisJCQkJI3B3bS1jZWxscyA9IDwzPjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxpbXg1 MC1wd20iLCAiZnNsLGlteDI3LXB3bSI7CiAJCQkJcmVnID0gPDB4NTNmYjQwMDAgMHg0MDAwPjsK IAkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfUFdNMV9JUEdfR0FURT4sCkBAIC0yODMsNyAr MjgzLDcgQEAKIAkJCX07CiAKIAkJCXB3bTI6IHB3bUA1M2ZiODAwMCB7Ci0JCQkJI3B3bS1jZWxs cyA9IDwyPjsKKwkJCQkjcHdtLWNlbGxzID0gPDM+OwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlt eDUwLXB3bSIsICJmc2wsaW14MjctcHdtIjsKIAkJCQlyZWcgPSA8MHg1M2ZiODAwMCAweDQwMDA+ OwogCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg1X0NMS19QV00yX0lQR19HQVRFPiwKZGlmZiAtLWdp dCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUxLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1 MS5kdHNpCmluZGV4IDYxYTI1NTIuLmM3NTJjYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3Qv ZHRzL2lteDUxLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEuZHRzaQpAQCAtMzM5 LDcgKzMzOSw3IEBACiAJCQl9OwogCiAJCQlwd20xOiBwd21ANzNmYjQwMDAgewotCQkJCSNwd20t Y2VsbHMgPSA8Mj47CisJCQkJI3B3bS1jZWxscyA9IDwzPjsKIAkJCQljb21wYXRpYmxlID0gImZz bCxpbXg1MS1wd20iLCAiZnNsLGlteDI3LXB3bSI7CiAJCQkJcmVnID0gPDB4NzNmYjQwMDAgMHg0 MDAwPjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfUFdNMV9JUEdfR0FURT4sCkBAIC0z NDksNyArMzQ5LDcgQEAKIAkJCX07CiAKIAkJCXB3bTI6IHB3bUA3M2ZiODAwMCB7Ci0JCQkJI3B3 bS1jZWxscyA9IDwyPjsKKwkJCQkjcHdtLWNlbGxzID0gPDM+OwogCQkJCWNvbXBhdGlibGUgPSAi ZnNsLGlteDUxLXB3bSIsICJmc2wsaW14MjctcHdtIjsKIAkJCQlyZWcgPSA8MHg3M2ZiODAwMCAw eDQwMDA+OwogCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg1X0NMS19QV00yX0lQR19HQVRFPiwKZGlm ZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUzLW01M2V2ay5kdHMgYi9hcmNoL2FybS9i b290L2R0cy9pbXg1My1tNTNldmsuZHRzCmluZGV4IGM2MjM3NzQuLjY1Yjk5ODkgMTAwNjQ0Ci0t LSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUzLW01M2V2ay5kdHMKKysrIGIvYXJjaC9hcm0vYm9v dC9kdHMvaW14NTMtbTUzZXZrLmR0cwpAQCAtNDgsNyArNDgsNyBAQAogCiAJYmFja2xpZ2h0IHsK IAkJY29tcGF0aWJsZSA9ICJwd20tYmFja2xpZ2h0IjsKLQkJcHdtcyA9IDwmcHdtMSAwIDMwMDA+ OworCQlwd21zID0gPCZwd20xIDAgMzAwMCAwPjsKIAkJYnJpZ2h0bmVzcy1sZXZlbHMgPSA8MCA0 IDggMTYgMzIgNjQgMTI4IDI1NT47CiAJCWRlZmF1bHQtYnJpZ2h0bmVzcy1sZXZlbCA9IDw2PjsK IAkJcG93ZXItc3VwcGx5ID0gPCZyZWdfYmFja2xpZ2h0PjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJt L2Jvb3QvZHRzL2lteDUzLW1iYTUzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUzLW1iYTUz LmR0cwppbmRleCAwMzU4MzY2Li5iMDkzODJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0 cy9pbXg1My1tYmE1My5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTMtbWJhNTMuZHRz CkBAIC0xOSw3ICsxOSw3IEBACiAKIAliYWNrbGlnaHQgewogCQljb21wYXRpYmxlID0gInB3bS1i YWNrbGlnaHQiOwotCQlwd21zID0gPCZwd20yIDAgNTAwMDA+OworCQlwd21zID0gPCZwd20yIDAg NTAwMDAgMD47CiAJCWJyaWdodG5lc3MtbGV2ZWxzID0gPDAgMjQgMjggMzIgMzYgNDAgNDQgNDgg NTIgNTYgNjAgNjQgNjggNzIgNzYgODAgODQgODggOTIgOTYgMTAwPjsKIAkJZGVmYXVsdC1icmln aHRuZXNzLWxldmVsID0gPDEwPjsKIAkJZW5hYmxlLWdwaW9zID0gPCZncGlvNyA3IDA+OwpkaWZm IC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRz L2lteDUzLmR0c2kKaW5kZXggNjQwNzUyNi4uOTAxMTE4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0v Ym9vdC9kdHMvaW14NTMuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1My5kdHNpCkBA IC0zODAsNyArMzgwLDcgQEAKIAkJCX07CiAKIAkJCXB3bTE6IHB3bUA1M2ZiNDAwMCB7Ci0JCQkJ I3B3bS1jZWxscyA9IDwyPjsKKwkJCQkjcHdtLWNlbGxzID0gPDM+OwogCQkJCWNvbXBhdGlibGUg PSAiZnNsLGlteDUzLXB3bSIsICJmc2wsaW14MjctcHdtIjsKIAkJCQlyZWcgPSA8MHg1M2ZiNDAw MCAweDQwMDA+OwogCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg1X0NMS19QV00xX0lQR19HQVRFPiwK QEAgLTM5MCw3ICszOTAsNyBAQAogCQkJfTsKIAogCQkJcHdtMjogcHdtQDUzZmI4MDAwIHsKLQkJ CQkjcHdtLWNlbGxzID0gPDI+OworCQkJCSNwd20tY2VsbHMgPSA8Mz47CiAJCQkJY29tcGF0aWJs ZSA9ICJmc2wsaW14NTMtcHdtIiwgImZzbCxpbXgyNy1wd20iOwogCQkJCXJlZyA9IDwweDUzZmI4 MDAwIDB4NDAwMD47CiAJCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1BXTTJfSVBHX0dBVEU+ LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1uaXRyb2dlbjZ4LmR0c2kg Yi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLW5pdHJvZ2VuNnguZHRzaQppbmRleCBlODNmZmM3 Li45YzNlZjgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLW5pdHJvZ2Vu NnguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLW5pdHJvZ2VuNnguZHRzaQpA QCAtMTExLDcgKzExMSw3IEBACiAKIAliYWNrbGlnaHRfbGNkIHsKIAkJY29tcGF0aWJsZSA9ICJw d20tYmFja2xpZ2h0IjsKLQkJcHdtcyA9IDwmcHdtMSAwIDUwMDAwMDA+OworCQlwd21zID0gPCZw d20xIDAgNTAwMDAwMCAwPjsKIAkJYnJpZ2h0bmVzcy1sZXZlbHMgPSA8MCA0IDggMTYgMzIgNjQg MTI4IDI1NT47CiAJCWRlZmF1bHQtYnJpZ2h0bmVzcy1sZXZlbCA9IDw3PjsKIAkJcG93ZXItc3Vw cGx5ID0gPCZyZWdfM3Azdj47CkBAIC0xMjAsNyArMTIwLDcgQEAKIAogCWJhY2tsaWdodF9sdmRz IHsKIAkJY29tcGF0aWJsZSA9ICJwd20tYmFja2xpZ2h0IjsKLQkJcHdtcyA9IDwmcHdtNCAwIDUw MDAwMDA+OworCQlwd21zID0gPCZwd200IDAgNTAwMDAwMCAwPjsKIAkJYnJpZ2h0bmVzcy1sZXZl bHMgPSA8MCA0IDggMTYgMzIgNjQgMTI4IDI1NT47CiAJCWRlZmF1bHQtYnJpZ2h0bmVzcy1sZXZl bCA9IDw3PjsKIAkJcG93ZXItc3VwcGx5ID0gPCZyZWdfM3Azdj47CmRpZmYgLS1naXQgYS9hcmNo L2FybS9ib290L2R0cy9pbXg2cWRsLXNhYnJlbGl0ZS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMv aW14NnFkbC1zYWJyZWxpdGUuZHRzaQppbmRleCBlOGNiY2Q3Li44ODMzMzI5IDEwMDY0NAotLS0g YS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXNhYnJlbGl0ZS5kdHNpCisrKyBiL2FyY2gvYXJt L2Jvb3QvZHRzL2lteDZxZGwtc2FicmVsaXRlLmR0c2kKQEAgLTExMCw3ICsxMTAsNyBAQAogCiAJ YmFja2xpZ2h0X2xjZCB7CiAJCWNvbXBhdGlibGUgPSAicHdtLWJhY2tsaWdodCI7Ci0JCXB3bXMg PSA8JnB3bTEgMCA1MDAwMDAwPjsKKwkJcHdtcyA9IDwmcHdtMSAwIDUwMDAwMDAgMD47CiAJCWJy aWdodG5lc3MtbGV2ZWxzID0gPDAgNCA4IDE2IDMyIDY0IDEyOCAyNTU+OwogCQlkZWZhdWx0LWJy aWdodG5lc3MtbGV2ZWwgPSA8Nz47CiAJCXBvd2VyLXN1cHBseSA9IDwmcmVnXzNwM3Y+OwpAQCAt MTE5LDcgKzExOSw3IEBACiAKIAliYWNrbGlnaHRfbHZkcyB7CiAJCWNvbXBhdGlibGUgPSAicHdt LWJhY2tsaWdodCI7Ci0JCXB3bXMgPSA8JnB3bTQgMCA1MDAwMDAwPjsKKwkJcHdtcyA9IDwmcHdt NCAwIDUwMDAwMDAgMD47CiAJCWJyaWdodG5lc3MtbGV2ZWxzID0gPDAgNCA4IDE2IDMyIDY0IDEy OCAyNTU+OwogCQlkZWZhdWx0LWJyaWdodG5lc3MtbGV2ZWwgPSA8Nz47CiAJCXBvd2VyLXN1cHBs eSA9IDwmcmVnXzNwM3Y+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1z YWJyZXNkLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXNhYnJlc2QuZHRzaQppbmRl eCBjMDcyZDQ2Li5hZTQ4N2JlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFk bC1zYWJyZXNkLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1zYWJyZXNkLmR0 c2kKQEAgLTk5LDcgKzk5LDcgQEAKIAogCWJhY2tsaWdodCB7CiAJCWNvbXBhdGlibGUgPSAicHdt LWJhY2tsaWdodCI7Ci0JCXB3bXMgPSA8JnB3bTEgMCA1MDAwMDAwPjsKKwkJcHdtcyA9IDwmcHdt MSAwIDUwMDAwMDAgMD47CiAJCWJyaWdodG5lc3MtbGV2ZWxzID0gPDAgNCA4IDE2IDMyIDY0IDEy OCAyNTU+OwogCQlkZWZhdWx0LWJyaWdodG5lc3MtbGV2ZWwgPSA8Nz47CiAJCXN0YXR1cyA9ICJv a2F5IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwuZHRzaSBiL2FyY2gv YXJtL2Jvb3QvZHRzL2lteDZxZGwuZHRzaQppbmRleCBkYTBkODQzLi5lMTBjN2I3IDEwMDY0NAot LS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9k dHMvaW14NnFkbC5kdHNpCkBAIC0zMDYsNyArMzA2LDcgQEAKIAkJCX07CiAKIAkJCXB3bTE6IHB3 bUAwMjA4MDAwMCB7Ci0JCQkJI3B3bS1jZWxscyA9IDwyPjsKKwkJCQkjcHdtLWNlbGxzID0gPDM+ OwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDZxLXB3bSIsICJmc2wsaW14MjctcHdtIjsKIAkJ CQlyZWcgPSA8MHgwMjA4MDAwMCAweDQwMDA+OwogCQkJCWludGVycnVwdHMgPSA8MCA4MyBJUlFf VFlQRV9MRVZFTF9ISUdIPjsKQEAgLTMxNSw3ICszMTUsNyBAQAogCQkJfTsKIAogCQkJcHdtMjog cHdtQDAyMDg0MDAwIHsKLQkJCQkjcHdtLWNlbGxzID0gPDI+OworCQkJCSNwd20tY2VsbHMgPSA8 Mz47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14NnEtcHdtIiwgImZzbCxpbXgyNy1wd20iOwog CQkJCXJlZyA9IDwweDAyMDg0MDAwIDB4NDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwwIDg0IElS UV9UWVBFX0xFVkVMX0hJR0g+OwpAQCAtMzI0LDcgKzMyNCw3IEBACiAJCQl9OwogCiAJCQlwd20z OiBwd21AMDIwODgwMDAgewotCQkJCSNwd20tY2VsbHMgPSA8Mj47CisJCQkJI3B3bS1jZWxscyA9 IDwzPjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxpbXg2cS1wd20iLCAiZnNsLGlteDI3LXB3bSI7 CiAJCQkJcmVnID0gPDB4MDIwODgwMDAgMHg0MDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDAgODUg SVJRX1RZUEVfTEVWRUxfSElHSD47CkBAIC0zMzMsNyArMzMzLDcgQEAKIAkJCX07CiAKIAkJCXB3 bTQ6IHB3bUAwMjA4YzAwMCB7Ci0JCQkJI3B3bS1jZWxscyA9IDwyPjsKKwkJCQkjcHdtLWNlbGxz ID0gPDM+OwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDZxLXB3bSIsICJmc2wsaW14MjctcHdt IjsKIAkJCQlyZWcgPSA8MHgwMjA4YzAwMCAweDQwMDA+OwogCQkJCWludGVycnVwdHMgPSA8MCA4 NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lt eDZzbC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnNsLmR0c2kKaW5kZXggZmNlZmExYy4u OTg2MmVlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnNsLmR0c2kKKysrIGIv YXJjaC9hcm0vYm9vdC9kdHMvaW14NnNsLmR0c2kKQEAgLTI4OSw3ICsyODksNyBAQAogCQkJfTsK IAogCQkJcHdtMTogcHdtQDAyMDgwMDAwIHsKLQkJCQkjcHdtLWNlbGxzID0gPDI+OworCQkJCSNw d20tY2VsbHMgPSA8Mz47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14NnNsLXB3bSIsICJmc2ws aW14MjctcHdtIjsKIAkJCQlyZWcgPSA8MHgwMjA4MDAwMCAweDQwMDA+OwogCQkJCWludGVycnVw dHMgPSA8MCA4MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKQEAgLTI5OSw3ICsyOTksNyBAQAogCQkJ fTsKIAogCQkJcHdtMjogcHdtQDAyMDg0MDAwIHsKLQkJCQkjcHdtLWNlbGxzID0gPDI+OworCQkJ CSNwd20tY2VsbHMgPSA8Mz47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14NnNsLXB3bSIsICJm c2wsaW14MjctcHdtIjsKIAkJCQlyZWcgPSA8MHgwMjA4NDAwMCAweDQwMDA+OwogCQkJCWludGVy cnVwdHMgPSA8MCA4NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKQEAgLTMwOSw3ICszMDksNyBAQAog CQkJfTsKIAogCQkJcHdtMzogcHdtQDAyMDg4MDAwIHsKLQkJCQkjcHdtLWNlbGxzID0gPDI+Owor CQkJCSNwd20tY2VsbHMgPSA8Mz47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14NnNsLXB3bSIs ICJmc2wsaW14MjctcHdtIjsKIAkJCQlyZWcgPSA8MHgwMjA4ODAwMCAweDQwMDA+OwogCQkJCWlu dGVycnVwdHMgPSA8MCA4NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKQEAgLTMxOSw3ICszMTksNyBA QAogCQkJfTsKIAogCQkJcHdtNDogcHdtQDAyMDhjMDAwIHsKLQkJCQkjcHdtLWNlbGxzID0gPDI+ OworCQkJCSNwd20tY2VsbHMgPSA8Mz47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14NnNsLXB3 bSIsICJmc2wsaW14MjctcHdtIjsKIAkJCQlyZWcgPSA8MHgwMjA4YzAwMCAweDQwMDA+OwogCQkJ CWludGVycnVwdHMgPSA8MCA4NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvcHdtL3B3bS1pbXguYyBiL2RyaXZlcnMvcHdtL3B3bS1pbXguYwppbmRleCAzYjAwYTgy Li43NWEwZDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3B3bS9wd20taW14LmMKKysrIGIvZHJpdmVy cy9wd20vcHdtLWlteC5jCkBAIC0zNiw2ICszNiw3IEBACiAjZGVmaW5lIE1YM19QV01DUl9ET1pF RU4JCSgxIDw8IDI0KQogI2RlZmluZSBNWDNfUFdNQ1JfV0FJVEVOCQkoMSA8PCAyMykKICNkZWZp bmUgTVgzX1BXTUNSX0RCR0VOCQkJKDEgPDwgMjIpCisjZGVmaW5lIE1YM19QV01DUl9QT1VUQwkJ CSgxIDw8IDE4KQogI2RlZmluZSBNWDNfUFdNQ1JfQ0xLU1JDX0lQR19ISUdICSgyIDw8IDE2KQog I2RlZmluZSBNWDNfUFdNQ1JfQ0xLU1JDX0lQRwkJKDEgPDwgMTYpCiAjZGVmaW5lIE1YM19QV01D Ul9FTgkJCSgxIDw8IDApCkBAIC0xMzgsNiArMTM5LDkgQEAgc3RhdGljIGludCBpbXhfcHdtX2Nv bmZpZ192MihzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAsCiAJaWYgKHRlc3RfYml0KFBXTUZfRU5BQkxF RCwgJnB3bS0+ZmxhZ3MpKQogCQljciB8PSBNWDNfUFdNQ1JfRU47CiAKKwlpZiAocHdtLT5wb2xh cml0eSA9PSBQV01fUE9MQVJJVFlfSU5WRVJTRUQpCisJCWNyIHw9IE1YM19QV01DUl9QT1VUQzsK KwogCXdyaXRlbChjciwgaW14LT5tbWlvX2Jhc2UgKyBNWDNfUFdNQ1IpOwogCiAJcmV0dXJuIDA7 CkBAIC0xNTUsNiArMTU5LDExIEBAIHN0YXRpYyB2b2lkIGlteF9wd21fc2V0X2VuYWJsZV92Mihz dHJ1Y3QgcHdtX2NoaXAgKmNoaXAsIGJvb2wgZW5hYmxlKQogCWVsc2UKIAkJdmFsICY9IH5NWDNf UFdNQ1JfRU47CiAKKwlpZiAoY2hpcC0+cHdtc1swXS5wb2xhcml0eSA9PSBQV01fUE9MQVJJVFlf SU5WRVJTRUQpCisJCXZhbCB8PSBNWDNfUFdNQ1JfUE9VVEM7CisJZWxzZQorCQl2YWwgJj0gfk1Y M19QV01DUl9QT1VUQzsKKwogCXdyaXRlbCh2YWwsIGlteC0+bW1pb19iYXNlICsgTVgzX1BXTUNS KTsKIH0KIApAQCAtMTk4LDYgKzIwNywxNyBAQCBzdGF0aWMgdm9pZCBpbXhfcHdtX2Rpc2FibGUo c3RydWN0IHB3bV9jaGlwICpjaGlwLCBzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQogCWNsa19kaXNh YmxlX3VucHJlcGFyZShpbXgtPmNsa19wZXIpOwogfQogCitzdGF0aWMgaW50IGlteF9wd21fc2V0 X3BvbGFyaXR5KHN0cnVjdCBwd21fY2hpcCAqY2hpcCwgc3RydWN0IHB3bV9kZXZpY2UgKnB3bSwK KwkJCQllbnVtIHB3bV9wb2xhcml0eSBwb2xhcml0eSkKK3sKKwlzdHJ1Y3QgaW14X2NoaXAgKmlt eCA9IHRvX2lteF9jaGlwKGNoaXApOworCisJZGV2X2luZm8oaW14LT5jaGlwLmRldiwgIiVzOiBw b2xhcml0eSBzZXQgdG8gJXNcbiIsIF9fZnVuY19fLAorCQlwb2xhcml0eSA9PSBQV01fUE9MQVJJ VFlfSU5WRVJTRUQgPyAiaW52ZXJ0ZWQiIDogIm5vcm1hbCIpOworCisJcmV0dXJuIDA7Cit9CisK IHN0YXRpYyBzdHJ1Y3QgcHdtX29wcyBpbXhfcHdtX29wcyA9IHsKIAkuZW5hYmxlID0gaW14X3B3 bV9lbmFibGUsCiAJLmRpc2FibGUgPSBpbXhfcHdtX2Rpc2FibGUsCkBAIC0yMDksNiArMjI5LDcg QEAgc3RydWN0IGlteF9wd21fZGF0YSB7CiAJaW50ICgqY29uZmlnKShzdHJ1Y3QgcHdtX2NoaXAg KmNoaXAsCiAJCXN0cnVjdCBwd21fZGV2aWNlICpwd20sIGludCBkdXR5X25zLCBpbnQgcGVyaW9k X25zKTsKIAl2b2lkICgqc2V0X2VuYWJsZSkoc3RydWN0IHB3bV9jaGlwICpjaGlwLCBib29sIGVu YWJsZSk7CisJdW5zaWduZWQgb3V0cHV0X3BvbGFyaXR5OjE7CiB9OwogCiBzdGF0aWMgc3RydWN0 IGlteF9wd21fZGF0YSBpbXhfcHdtX2RhdGFfdjEgPSB7CkBAIC0yMTksNiArMjQwLDcgQEAgc3Rh dGljIHN0cnVjdCBpbXhfcHdtX2RhdGEgaW14X3B3bV9kYXRhX3YxID0gewogc3RhdGljIHN0cnVj dCBpbXhfcHdtX2RhdGEgaW14X3B3bV9kYXRhX3YyID0gewogCS5jb25maWcgPSBpbXhfcHdtX2Nv bmZpZ192MiwKIAkuc2V0X2VuYWJsZSA9IGlteF9wd21fc2V0X2VuYWJsZV92MiwKKwkub3V0cHV0 X3BvbGFyaXR5ID0gMSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlt eF9wd21fZHRfaWRzW10gPSB7CkBAIC0yNzEsNiArMjkzLDEzIEBAIHN0YXRpYyBpbnQgaW14X3B3 bV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQlyZXR1cm4gUFRSX0VSUihp bXgtPm1taW9fYmFzZSk7CiAKIAlkYXRhID0gb2ZfaWQtPmRhdGE7CisJaWYgKGRhdGEtPm91dHB1 dF9wb2xhcml0eSkgeworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiUFdNIHN1cHBvcnRzIGludmVy c2lvblxuIik7CisJCWlteF9wd21fb3BzLnNldF9wb2xhcml0eSA9IGlteF9wd21fc2V0X3BvbGFy aXR5OworCQlpbXgtPmNoaXAub2ZfeGxhdGUgPSBvZl9wd21feGxhdGVfd2l0aF9mbGFnczsKKwkJ aW14LT5jaGlwLm9mX3B3bV9uX2NlbGxzID0gMzsKKwl9CisKIAlpbXgtPmNvbmZpZyA9IGRhdGEt PmNvbmZpZzsKIAlpbXgtPnNldF9lbmFibGUgPSBkYXRhLT5zZXRfZW5hYmxlOwogCi0tIAoxLjcu Mi41CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt YXJtLWtlcm5lbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: LW@KARO-electronics.de (=?UTF-8?q?Lothar=20Wa=C3=9Fmann?=) Date: Mon, 13 Jan 2014 11:29:48 +0100 Subject: [PATCH 2/2] pwm: imx: support polarity inversion In-Reply-To: <1389608988-10981-1-git-send-email-LW@KARO-electronics.de> References: <1389608988-10981-1-git-send-email-LW@KARO-electronics.de> Message-ID: <1389608988-10981-3-git-send-email-LW@KARO-electronics.de> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org The i.MX PWM controller supports inverting the polarity of the PWM output. Make this feature available in the pxm-imx driver. Signed-off-by: Lothar Wa?mann --- arch/arm/boot/dts/imx25.dtsi | 7 ++++--- arch/arm/boot/dts/imx27.dtsi | 2 +- arch/arm/boot/dts/imx50.dtsi | 4 ++-- arch/arm/boot/dts/imx51.dtsi | 4 ++-- arch/arm/boot/dts/imx53-m53evk.dts | 2 +- arch/arm/boot/dts/imx53-mba53.dts | 2 +- arch/arm/boot/dts/imx53.dtsi | 4 ++-- arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi | 4 ++-- arch/arm/boot/dts/imx6qdl-sabrelite.dtsi | 4 ++-- arch/arm/boot/dts/imx6qdl-sabresd.dtsi | 2 +- arch/arm/boot/dts/imx6qdl.dtsi | 8 ++++---- arch/arm/boot/dts/imx6sl.dtsi | 8 ++++---- drivers/pwm/pwm-imx.c | 29 +++++++++++++++++++++++++++++ 13 files changed, 55 insertions(+), 25 deletions(-) diff --git a/arch/arm/boot/dts/imx25.dtsi b/arch/arm/boot/dts/imx25.dtsi index 9e9e3b8..dcce08c 100644 --- a/arch/arm/boot/dts/imx25.dtsi +++ b/arch/arm/boot/dts/imx25.dtsi @@ -360,7 +360,7 @@ pwm2: pwm at 53fa0000 { compatible = "fsl,imx25-pwm", "fsl,imx27-pwm"; - #pwm-cells = <2>; + #pwm-cells = <3>; reg = <0x53fa0000 0x4000>; clocks = <&clks 106>, <&clks 36>; clock-names = "ipg", "per"; @@ -379,7 +379,7 @@ pwm3: pwm at 53fa8000 { compatible = "fsl,imx25-pwm", "fsl,imx27-pwm"; - #pwm-cells = <2>; + #pwm-cells = <3>; reg = <0x53fa8000 0x4000>; clocks = <&clks 107>, <&clks 36>; clock-names = "ipg", "per"; @@ -421,6 +421,7 @@ pwm4: pwm at 53fc8000 { compatible = "fsl,imx25-pwm", "fsl,imx27-pwm"; + #pwm-cells = <3>; reg = <0x53fc8000 0x4000>; clocks = <&clks 108>, <&clks 36>; clock-names = "ipg", "per"; @@ -467,7 +468,7 @@ pwm1: pwm at 53fe0000 { compatible = "fsl,imx25-pwm", "fsl,imx27-pwm"; - #pwm-cells = <2>; + #pwm-cells = <3>; reg = <0x53fe0000 0x4000>; clocks = <&clks 105>, <&clks 36>; clock-names = "ipg", "per"; diff --git a/arch/arm/boot/dts/imx27.dtsi b/arch/arm/boot/dts/imx27.dtsi index 7e98966..be4c9bc 100644 --- a/arch/arm/boot/dts/imx27.dtsi +++ b/arch/arm/boot/dts/imx27.dtsi @@ -126,7 +126,7 @@ }; pwm: pwm at 10006000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx27-pwm"; reg = <0x10006000 0x1000>; interrupts = <23>; diff --git a/arch/arm/boot/dts/imx50.dtsi b/arch/arm/boot/dts/imx50.dtsi index 01c0499..e3647a8 100644 --- a/arch/arm/boot/dts/imx50.dtsi +++ b/arch/arm/boot/dts/imx50.dtsi @@ -273,7 +273,7 @@ }; pwm1: pwm at 53fb4000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx50-pwm", "fsl,imx27-pwm"; reg = <0x53fb4000 0x4000>; clocks = <&clks IMX5_CLK_PWM1_IPG_GATE>, @@ -283,7 +283,7 @@ }; pwm2: pwm at 53fb8000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx50-pwm", "fsl,imx27-pwm"; reg = <0x53fb8000 0x4000>; clocks = <&clks IMX5_CLK_PWM2_IPG_GATE>, diff --git a/arch/arm/boot/dts/imx51.dtsi b/arch/arm/boot/dts/imx51.dtsi index 61a2552..c752ca2 100644 --- a/arch/arm/boot/dts/imx51.dtsi +++ b/arch/arm/boot/dts/imx51.dtsi @@ -339,7 +339,7 @@ }; pwm1: pwm at 73fb4000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx51-pwm", "fsl,imx27-pwm"; reg = <0x73fb4000 0x4000>; clocks = <&clks IMX5_CLK_PWM1_IPG_GATE>, @@ -349,7 +349,7 @@ }; pwm2: pwm at 73fb8000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx51-pwm", "fsl,imx27-pwm"; reg = <0x73fb8000 0x4000>; clocks = <&clks IMX5_CLK_PWM2_IPG_GATE>, diff --git a/arch/arm/boot/dts/imx53-m53evk.dts b/arch/arm/boot/dts/imx53-m53evk.dts index c623774..65b9989 100644 --- a/arch/arm/boot/dts/imx53-m53evk.dts +++ b/arch/arm/boot/dts/imx53-m53evk.dts @@ -48,7 +48,7 @@ backlight { compatible = "pwm-backlight"; - pwms = <&pwm1 0 3000>; + pwms = <&pwm1 0 3000 0>; brightness-levels = <0 4 8 16 32 64 128 255>; default-brightness-level = <6>; power-supply = <®_backlight>; diff --git a/arch/arm/boot/dts/imx53-mba53.dts b/arch/arm/boot/dts/imx53-mba53.dts index 0358366..b09382a 100644 --- a/arch/arm/boot/dts/imx53-mba53.dts +++ b/arch/arm/boot/dts/imx53-mba53.dts @@ -19,7 +19,7 @@ backlight { compatible = "pwm-backlight"; - pwms = <&pwm2 0 50000>; + pwms = <&pwm2 0 50000 0>; brightness-levels = <0 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100>; default-brightness-level = <10>; enable-gpios = <&gpio7 7 0>; diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi index 6407526..9011181 100644 --- a/arch/arm/boot/dts/imx53.dtsi +++ b/arch/arm/boot/dts/imx53.dtsi @@ -380,7 +380,7 @@ }; pwm1: pwm at 53fb4000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx53-pwm", "fsl,imx27-pwm"; reg = <0x53fb4000 0x4000>; clocks = <&clks IMX5_CLK_PWM1_IPG_GATE>, @@ -390,7 +390,7 @@ }; pwm2: pwm at 53fb8000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx53-pwm", "fsl,imx27-pwm"; reg = <0x53fb8000 0x4000>; clocks = <&clks IMX5_CLK_PWM2_IPG_GATE>, diff --git a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi index e83ffc7..9c3ef80 100644 --- a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi +++ b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi @@ -111,7 +111,7 @@ backlight_lcd { compatible = "pwm-backlight"; - pwms = <&pwm1 0 5000000>; + pwms = <&pwm1 0 5000000 0>; brightness-levels = <0 4 8 16 32 64 128 255>; default-brightness-level = <7>; power-supply = <®_3p3v>; @@ -120,7 +120,7 @@ backlight_lvds { compatible = "pwm-backlight"; - pwms = <&pwm4 0 5000000>; + pwms = <&pwm4 0 5000000 0>; brightness-levels = <0 4 8 16 32 64 128 255>; default-brightness-level = <7>; power-supply = <®_3p3v>; diff --git a/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi b/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi index e8cbcd7..8833329 100644 --- a/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi +++ b/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi @@ -110,7 +110,7 @@ backlight_lcd { compatible = "pwm-backlight"; - pwms = <&pwm1 0 5000000>; + pwms = <&pwm1 0 5000000 0>; brightness-levels = <0 4 8 16 32 64 128 255>; default-brightness-level = <7>; power-supply = <®_3p3v>; @@ -119,7 +119,7 @@ backlight_lvds { compatible = "pwm-backlight"; - pwms = <&pwm4 0 5000000>; + pwms = <&pwm4 0 5000000 0>; brightness-levels = <0 4 8 16 32 64 128 255>; default-brightness-level = <7>; power-supply = <®_3p3v>; diff --git a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi index c072d46..ae487bee 100644 --- a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi +++ b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi @@ -99,7 +99,7 @@ backlight { compatible = "pwm-backlight"; - pwms = <&pwm1 0 5000000>; + pwms = <&pwm1 0 5000000 0>; brightness-levels = <0 4 8 16 32 64 128 255>; default-brightness-level = <7>; status = "okay"; diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi index da0d843..e10c7b7 100644 --- a/arch/arm/boot/dts/imx6qdl.dtsi +++ b/arch/arm/boot/dts/imx6qdl.dtsi @@ -306,7 +306,7 @@ }; pwm1: pwm at 02080000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm"; reg = <0x02080000 0x4000>; interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH>; @@ -315,7 +315,7 @@ }; pwm2: pwm at 02084000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm"; reg = <0x02084000 0x4000>; interrupts = <0 84 IRQ_TYPE_LEVEL_HIGH>; @@ -324,7 +324,7 @@ }; pwm3: pwm at 02088000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm"; reg = <0x02088000 0x4000>; interrupts = <0 85 IRQ_TYPE_LEVEL_HIGH>; @@ -333,7 +333,7 @@ }; pwm4: pwm at 0208c000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm"; reg = <0x0208c000 0x4000>; interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>; diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi index fcefa1c..9862ee2 100644 --- a/arch/arm/boot/dts/imx6sl.dtsi +++ b/arch/arm/boot/dts/imx6sl.dtsi @@ -289,7 +289,7 @@ }; pwm1: pwm at 02080000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm"; reg = <0x02080000 0x4000>; interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH>; @@ -299,7 +299,7 @@ }; pwm2: pwm at 02084000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm"; reg = <0x02084000 0x4000>; interrupts = <0 84 IRQ_TYPE_LEVEL_HIGH>; @@ -309,7 +309,7 @@ }; pwm3: pwm at 02088000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm"; reg = <0x02088000 0x4000>; interrupts = <0 85 IRQ_TYPE_LEVEL_HIGH>; @@ -319,7 +319,7 @@ }; pwm4: pwm at 0208c000 { - #pwm-cells = <2>; + #pwm-cells = <3>; compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm"; reg = <0x0208c000 0x4000>; interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>; diff --git a/drivers/pwm/pwm-imx.c b/drivers/pwm/pwm-imx.c index 3b00a82..75a0d14 100644 --- a/drivers/pwm/pwm-imx.c +++ b/drivers/pwm/pwm-imx.c @@ -36,6 +36,7 @@ #define MX3_PWMCR_DOZEEN (1 << 24) #define MX3_PWMCR_WAITEN (1 << 23) #define MX3_PWMCR_DBGEN (1 << 22) +#define MX3_PWMCR_POUTC (1 << 18) #define MX3_PWMCR_CLKSRC_IPG_HIGH (2 << 16) #define MX3_PWMCR_CLKSRC_IPG (1 << 16) #define MX3_PWMCR_EN (1 << 0) @@ -138,6 +139,9 @@ static int imx_pwm_config_v2(struct pwm_chip *chip, if (test_bit(PWMF_ENABLED, &pwm->flags)) cr |= MX3_PWMCR_EN; + if (pwm->polarity == PWM_POLARITY_INVERSED) + cr |= MX3_PWMCR_POUTC; + writel(cr, imx->mmio_base + MX3_PWMCR); return 0; @@ -155,6 +159,11 @@ static void imx_pwm_set_enable_v2(struct pwm_chip *chip, bool enable) else val &= ~MX3_PWMCR_EN; + if (chip->pwms[0].polarity == PWM_POLARITY_INVERSED) + val |= MX3_PWMCR_POUTC; + else + val &= ~MX3_PWMCR_POUTC; + writel(val, imx->mmio_base + MX3_PWMCR); } @@ -198,6 +207,17 @@ static void imx_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm) clk_disable_unprepare(imx->clk_per); } +static int imx_pwm_set_polarity(struct pwm_chip *chip, struct pwm_device *pwm, + enum pwm_polarity polarity) +{ + struct imx_chip *imx = to_imx_chip(chip); + + dev_info(imx->chip.dev, "%s: polarity set to %s\n", __func__, + polarity == PWM_POLARITY_INVERSED ? "inverted" : "normal"); + + return 0; +} + static struct pwm_ops imx_pwm_ops = { .enable = imx_pwm_enable, .disable = imx_pwm_disable, @@ -209,6 +229,7 @@ struct imx_pwm_data { int (*config)(struct pwm_chip *chip, struct pwm_device *pwm, int duty_ns, int period_ns); void (*set_enable)(struct pwm_chip *chip, bool enable); + unsigned output_polarity:1; }; static struct imx_pwm_data imx_pwm_data_v1 = { @@ -219,6 +240,7 @@ static struct imx_pwm_data imx_pwm_data_v1 = { static struct imx_pwm_data imx_pwm_data_v2 = { .config = imx_pwm_config_v2, .set_enable = imx_pwm_set_enable_v2, + .output_polarity = 1, }; static const struct of_device_id imx_pwm_dt_ids[] = { @@ -271,6 +293,13 @@ static int imx_pwm_probe(struct platform_device *pdev) return PTR_ERR(imx->mmio_base); data = of_id->data; + if (data->output_polarity) { + dev_info(&pdev->dev, "PWM supports inversion\n"); + imx_pwm_ops.set_polarity = imx_pwm_set_polarity; + imx->chip.of_xlate = of_pwm_xlate_with_flags; + imx->chip.of_pwm_n_cells = 3; + } + imx->config = data->config; imx->set_enable = data->set_enable; -- 1.7.2.5