diff for duplicates of <32552643.33371353923376540.JavaMail.weblogic@epv6ml07> diff --git a/a/1.txt b/N1/1.txt index 7d4a52f..edbc720 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,133 +1,247 @@ -T24gU2F0dXJkYXksIE5vdmVtYmVyIDI0LCAyMDEyIDE6MzUgQU0sIExhdXJlbnQgUGluY2hhcnQg -d3JvdGUNCj4gDQo+IFNpZ25lZC1vZmYtYnk6IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGlu -Y2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4NCg0KQ0MnZWQgQW5kcmV3IE1vcnRvbg0KDQpJdCBsb29r -cyBnb29kLiBBbHNvLCBJIHRlc3RlZCB0aGlzIHBhdGNoIHdpdGggU01ESzQyMTAgYm9hcmQuDQpB -Y2tlZC1ieTogSmluZ29vIEhhbiA8amcxLmhhbkBzYW1zdW5nLmNvbT4NCg0KQmVzdCByZWdhcmRz -LA0KSmluZ29vIEhhbg0KDQo+IC0tLQ0KPiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZp -ZyAgICAgICAgICB8ICAgIDcgKysNCj4gIGRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxl -ICAgICAgICAgfCAgICAxICsNCj4gIGRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2dwaW9fYmFja2xp -Z2h0LmMgfCAgMTU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgaW5jbHVkZS92 -aWRlby9ncGlvX2JhY2tsaWdodC5oICAgICAgICAgICB8ICAgMjEgKysrKw0KPiAgNCBmaWxlcyBj -aGFuZ2VkLCAxODcgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkNCj4gIGNyZWF0ZSBtb2Rl -IDEwMDY0NCBkcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ncGlvX2JhY2tsaWdodC5jDQo+ICBjcmVh -dGUgbW9kZSAxMDA2NDQgaW5jbHVkZS92aWRlby9ncGlvX2JhY2tsaWdodC5oDQo+IA0KPiBkaWZm -IC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8v -YmFja2xpZ2h0L0tjb25maWcNCj4gaW5kZXggNzY1YTk0NS4uMjU5NDQyZCAxMDA2NDQNCj4gLS0t -IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZw0KPiArKysgYi9kcml2ZXJzL3ZpZGVv -L2JhY2tsaWdodC9LY29uZmlnDQo+IEBAIC0zOTAsNiArMzkwLDEzIEBAIGNvbmZpZyBCQUNLTElH -SFRfVFBTNjUyMTcNCj4gIAkgIElmIHlvdSBoYXZlIGEgVGV4YXMgSW5zdHJ1bWVudHMgVFBTNjUy -MTcgc2F5IFkgdG8gZW5hYmxlIHRoZQ0KPiAgCSAgYmFja2xpZ2h0IGRyaXZlci4NCj4gDQo+ICtj -b25maWcgQkFDS0xJR0hUX0dQSU8NCj4gKwl0cmlzdGF0ZSAiR2VuZXJpYyBHUElPIGJhc2VkIEJh -Y2tsaWdodCBEcml2ZXIiDQo+ICsJZGVwZW5kcyBvbiBHRU5FUklDX0dQSU8NCj4gKwloZWxwDQo+ -ICsJICBJZiB5b3UgaGF2ZSBhIExDRCBiYWNrbGlnaHQgYWRqdXN0YWJsZSBieSBHUElPLCBzYXkg -WSB0byBlbmFibGUNCj4gKwkgIHRoaXMgZHJpdmVyLg0KPiArDQo+ICBlbmRpZiAjIEJBQ0tMSUdI -VF9DTEFTU19ERVZJQ0UNCj4gDQo+ICBlbmRpZiAjIEJBQ0tMSUdIVF9MQ0RfU1VQUE9SVA0KPiBk -aWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUgYi9kcml2ZXJzL3Zp -ZGVvL2JhY2tsaWdodC9NYWtlZmlsZQ0KPiBpbmRleCBlN2NlNzI5Li5lYzkxYzRhIDEwMDY0NA0K -PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQ0KPiArKysgYi9kcml2ZXJz -L3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQ0KPiBAQCAtNDUsMyArNDUsNCBAQCBvYmotJChDT05G -SUdfQkFDS0xJR0hUX1BDRjUwNjMzKQkrPSBwY2Y1MDYzMy1iYWNrbGlnaHQubw0KPiAgb2JqLSQo -Q09ORklHX0JBQ0tMSUdIVF9BQVQyODcwKSArPSBhYXQyODcwX2JsLm8NCj4gIG9iai0kKENPTkZJ -R19CQUNLTElHSFRfT1QyMDApICs9IG90MjAwX2JsLm8NCj4gIG9iai0kKENPTkZJR19CQUNLTElH -SFRfVFBTNjUyMTcpICs9IHRwczY1MjE3X2JsLm8NCj4gK29iai0kKENPTkZJR19CQUNLTElHSFRf -R1BJTykJKz0gZ3Bpb19iYWNrbGlnaHQubw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9i -YWNrbGlnaHQvZ3Bpb19iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2dwaW9f -YmFja2xpZ2h0LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uNWE4 -Y2QzNA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2dw -aW9fYmFja2xpZ2h0LmMNCj4gQEAgLTAsMCArMSwxNTggQEANCj4gKy8qDQo+ICsgKiBncGlvX2Jh -Y2tsaWdodC5jIC0gU2ltcGxlIEdQSU8tY29udHJvbGxlZCBiYWNrbGlnaHQNCj4gKyAqDQo+ICsg -KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg -YW5kL29yIG1vZGlmeQ0KPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh -bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMNCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl -ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9i -YWNrbGlnaHQuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gKyNpbmNsdWRlIDxsaW51 -eC9mYi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9p -bml0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+ICsjaW5jbHVkZSA8bGludXgv -bW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ICsjaW5j -bHVkZSA8bGludXgvc2xhYi5oPg0KPiArI2luY2x1ZGUgPHZpZGVvL2dwaW9fYmFja2xpZ2h0Lmg+ -DQo+ICsNCj4gK3N0cnVjdCBncGlvX2JhY2tsaWdodCB7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2 -Ow0KPiArCXN0cnVjdCBkZXZpY2UgKmZiZGV2Ow0KPiArDQo+ICsJaW50IGdwaW87DQo+ICsJaW50 -IGFjdGl2ZTsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgZ3Bpb19iYWNrbGlnaHRfdXBkYXRl -X3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpDQo+ICt7DQo+ICsJc3RydWN0IGdw -aW9fYmFja2xpZ2h0ICpnYmwgPSBibF9nZXRfZGF0YShibCk7DQo+ICsJaW50IGJyaWdodG5lc3Mg -PSBibC0+cHJvcHMuYnJpZ2h0bmVzczsNCj4gKw0KPiArCWlmIChibC0+cHJvcHMucG93ZXIgIT0g -RkJfQkxBTktfVU5CTEFOSyB8fA0KPiArCSAgICBibC0+cHJvcHMuZmJfYmxhbmsgIT0gRkJfQkxB -TktfVU5CTEFOSyB8fA0KPiArCSAgICBibC0+cHJvcHMuc3RhdGUgJiAoQkxfQ09SRV9TVVNQRU5E -RUQgfCBCTF9DT1JFX0ZCQkxBTkspKQ0KPiArCQlicmlnaHRuZXNzID0gMDsNCj4gKw0KPiArCWdw -aW9fc2V0X3ZhbHVlKGdibC0+Z3BpbywgYnJpZ2h0bmVzcyA/IGdibC0+YWN0aXZlIDogIWdibC0+ -YWN0aXZlKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGdw -aW9fYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkN -Cj4gK3sNCj4gKwlyZXR1cm4gYmwtPnByb3BzLmJyaWdodG5lc3M7DQo+ICt9DQo+ICsNCj4gK3N0 -YXRpYyBpbnQgZ3Bpb19iYWNrbGlnaHRfY2hlY2tfZmIoc3RydWN0IGJhY2tsaWdodF9kZXZpY2Ug -KmJsLA0KPiArCQkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQ0KPiArew0KPiArCXN0cnVjdCBn -cGlvX2JhY2tsaWdodCAqZ2JsID0gYmxfZ2V0X2RhdGEoYmwpOw0KPiArDQo+ICsJcmV0dXJuIGdi -bC0+ZmJkZXYgPT0gaW5mby0+ZGV2Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 -IGJhY2tsaWdodF9vcHMgZ3Bpb19iYWNrbGlnaHRfb3BzID0gew0KPiArCS51cGRhdGVfc3RhdHVz -CT0gZ3Bpb19iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywNCj4gKwkuZ2V0X2JyaWdodG5lc3MJPSBn -cGlvX2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywNCj4gKwkuY2hlY2tfZmIJPSBncGlvX2JhY2ts -aWdodF9jaGVja19mYiwNCj4gK307DQo+ICsNCj4gKyNpZmRlZiBDT05GSUdfUE0NCj4gK3N0YXRp -YyBpbnQgZ3Bpb19iYWNrbGlnaHRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ICt7DQo+ -ICsJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ -ICsJc3RydWN0IGdwaW9fYmFja2xpZ2h0ICpnYmwgPSBibF9nZXRfZGF0YShibCk7DQo+ICsNCj4g -KwlncGlvX3NldF92YWx1ZShnYmwtPmdwaW8sICFnYmwtPmFjdGl2ZSk7DQo+ICsNCj4gKwlyZXR1 -cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBncGlvX2JhY2tsaWdodF9yZXN1bWUoc3Ry -dWN0IGRldmljZSAqZGV2KQ0KPiArew0KPiArCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCA9 -IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArDQo+ICsJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMo -YmwpOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgU0lNUExFX0RFVl9QTV9P -UFMoZ3Bpb19iYWNrbGlnaHRfcG1fb3BzLCBncGlvX2JhY2tsaWdodF9zdXNwZW5kLA0KPiArCQkJ -IGdwaW9fYmFja2xpZ2h0X3Jlc3VtZSk7DQo+ICsNCj4gKyNlbmRpZg0KPiArDQo+ICtzdGF0aWMg -aW50IF9fZGV2aW5pdCBncGlvX2JhY2tsaWdodF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl -ICpwZGV2KQ0KPiArew0KPiArCXN0cnVjdCBncGlvX2JhY2tsaWdodF9wbGF0Zm9ybV9kYXRhICpw -ZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOw0KPiArCXN0cnVjdCBiYWNrbGlnaHRfcHJv -cGVydGllcyBwcm9wczsNCj4gKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmw7DQo+ICsJc3Ry -dWN0IGdwaW9fYmFja2xpZ2h0ICpnYmw7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWdibCA9IGRl -dm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmdibCksIEdGUF9LRVJORUwpOw0KPiArCWlm -IChnYmwgPT0gTlVMTCkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwlnYmwtPmRldiA9 -ICZwZGV2LT5kZXY7DQo+ICsNCj4gKwlpZiAoIXBkYXRhKSB7DQo+ICsJCWRldl9lcnIoJnBkZXYt -PmRldiwgImZhaWxlZCB0byBmaW5kIHBsYXRmb3JtIGRhdGFcbiIpOw0KPiArCQlyZXR1cm4gLUVO -T0RFVjsNCj4gKwl9DQo+ICsNCj4gKwlnYmwtPmZiZGV2ID0gcGRhdGEtPmZiZGV2Ow0KPiArCWdi -bC0+Z3BpbyA9IHBkYXRhLT5ncGlvOw0KPiArCWdibC0+YWN0aXZlID0gcGRhdGEtPmFjdGl2ZV9s -b3cgPyAwIDogMTsNCj4gKw0KPiArCXJldCA9IGRldm1fZ3Bpb19yZXF1ZXN0X29uZShnYmwtPmRl -diwgZ2JsLT5ncGlvLCBHUElPRl9ESVJfT1VULA0KPiArCQkJCSAgICBwZGF0YS0+bmFtZSk7DQo+ -ICsJaWYgKHJldCA8IDApIHsNCj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHJl -cXVlc3QgR1BJT1xuIik7DQo+ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJbWVtc2V0 -KCZwcm9wcywgMCwgc2l6ZW9mKHByb3BzKSk7DQo+ICsJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9S -QVc7DQo+ICsJcHJvcHMubWF4X2JyaWdodG5lc3MgPSAxOw0KPiArCWJsID0gYmFja2xpZ2h0X2Rl -dmljZV9yZWdpc3RlcihkZXZfbmFtZSgmcGRldi0+ZGV2KSwgJnBkZXYtPmRldiwgZ2JsLA0KPiAr -CQkJCSAgICAgICAmZ3Bpb19iYWNrbGlnaHRfb3BzLCAmcHJvcHMpOw0KPiArCWlmIChJU19FUlIo -YmwpKSB7DQo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYWNr -bGlnaHRcbiIpOw0KPiArCQlyZXR1cm4gUFRSX0VSUihibCk7DQo+ICsJfQ0KPiArDQo+ICsJYmwt -PnByb3BzLmJyaWdodG5lc3MgPSBwZGF0YS0+ZGVmX3ZhbHVlOw0KPiArCWJhY2tsaWdodF91cGRh -dGVfc3RhdHVzKGJsKTsNCj4gKw0KPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGJsKTsN -Cj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBfX2RldmV4aXQgZ3Bpb19i -YWNrbGlnaHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICsJ -c3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7 -DQo+ICsNCj4gKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmwpOw0KPiArCXJldHVybiAw -Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBncGlvX2JhY2ts -aWdodF9kcml2ZXIgPSB7DQo+ICsJLmRyaXZlcgkJPSB7DQo+ICsJCS5uYW1lCQk9ICJncGlvLWJh -Y2tsaWdodCIsDQo+ICsJCS5vd25lcgkJPSBUSElTX01PRFVMRSwNCj4gKyNpZmRlZiBDT05GSUdf -UE0NCj4gKwkJLnBtCQk9ICZncGlvX2JhY2tsaWdodF9wbV9vcHMsDQo+ICsjZW5kaWYNCj4gKwl9 -LA0KPiArCS5wcm9iZQkJPSBncGlvX2JhY2tsaWdodF9wcm9iZSwNCj4gKwkucmVtb3ZlCQk9IF9f -ZGV2ZXhpdF9wKGdwaW9fYmFja2xpZ2h0X3JlbW92ZSksDQo+ICt9Ow0KPiArDQo+ICttb2R1bGVf -cGxhdGZvcm1fZHJpdmVyKGdwaW9fYmFja2xpZ2h0X2RyaXZlcik7DQo+ICsNCj4gK01PRFVMRV9B -VVRIT1IoIkxhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNv -bT4iKTsNCj4gK01PRFVMRV9ERVNDUklQVElPTigiR1BJTy1iYXNlZCBCYWNrbGlnaHQgRHJpdmVy -Iik7DQo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7DQo+ICtNT0RVTEVfQUxJQVMoInBsYXRmb3Jt -OmdwaW8tYmFja2xpZ2h0Iik7DQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL2dwaW9fYmFj -a2xpZ2h0LmggYi9pbmNsdWRlL3ZpZGVvL2dwaW9fYmFja2xpZ2h0LmgNCj4gbmV3IGZpbGUgbW9k -ZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uNWFlMGQ5Yw0KPiAtLS0gL2Rldi9udWxsDQo+ICsr -KyBiL2luY2x1ZGUvdmlkZW8vZ3Bpb19iYWNrbGlnaHQuaA0KPiBAQCAtMCwwICsxLDIxIEBADQo+ -ICsvKg0KPiArICogZ3Bpb19iYWNrbGlnaHQuaCAtIFNpbXBsZSBHUElPLWNvbnRyb2xsZWQgYmFj -a2xpZ2h0DQo+ICsgKg0KPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj -YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJt -cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzDQo+ICsgKiBw -dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCj4gKyAqLw0KPiArI2lm -bmRlZiBfX0dQSU9fQkFDS0xJR0hUX0hfXw0KPiArI2RlZmluZSBfX0dQSU9fQkFDS0xJR0hUX0hf -Xw0KPiArDQo+ICtzdHJ1Y3QgZGV2aWNlOw0KPiArDQo+ICtzdHJ1Y3QgZ3Bpb19iYWNrbGlnaHRf -cGxhdGZvcm1fZGF0YSB7DQo+ICsJc3RydWN0IGRldmljZSAqZmJkZXY7DQo+ICsJaW50IGdwaW87 -DQo+ICsJaW50IGRlZl92YWx1ZTsNCj4gKwlib29sIGFjdGl2ZV9sb3c7DQo+ICsJY29uc3QgY2hh -ciAqbmFtZTsNCj4gK307DQo+ICsNCj4gKyNlbmRpZg0KPiAtLQ0KPiAxLjcuOC42DQo+IA0KPiAt -LQ0KPiBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJz -Y3JpYmUgbGludXgtZmJkZXYiIGluDQo+IHRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRv -bW9Admdlci5rZXJuZWwub3JnDQo+IE1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2Vy -Lmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbA0K +On Saturday, November 24, 2012 1:35 AM, Laurent Pinchart wrote +> +> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> + +CC'ed Andrew Morton + +It looks good. Also, I tested this patch with SMDK4210 board. +Acked-by: Jingoo Han <jg1.han@samsung.com> + +Best regards, +Jingoo Han + +> --- +> drivers/video/backlight/Kconfig | 7 ++ +> drivers/video/backlight/Makefile | 1 + +> drivers/video/backlight/gpio_backlight.c | 158 ++++++++++++++++++++++++++++++ +> include/video/gpio_backlight.h | 21 ++++ +> 4 files changed, 187 insertions(+), 0 deletions(-) +> create mode 100644 drivers/video/backlight/gpio_backlight.c +> create mode 100644 include/video/gpio_backlight.h +> +> diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig +> index 765a945..259442d 100644 +> --- a/drivers/video/backlight/Kconfig +> +++ b/drivers/video/backlight/Kconfig +> @@ -390,6 +390,13 @@ config BACKLIGHT_TPS65217 +> If you have a Texas Instruments TPS65217 say Y to enable the +> backlight driver. +> +> +config BACKLIGHT_GPIO +> + tristate "Generic GPIO based Backlight Driver" +> + depends on GENERIC_GPIO +> + help +> + If you have a LCD backlight adjustable by GPIO, say Y to enable +> + this driver. +> + +> endif # BACKLIGHT_CLASS_DEVICE +> +> endif # BACKLIGHT_LCD_SUPPORT +> diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile +> index e7ce729..ec91c4a 100644 +> --- a/drivers/video/backlight/Makefile +> +++ b/drivers/video/backlight/Makefile +> @@ -45,3 +45,4 @@ obj-$(CONFIG_BACKLIGHT_PCF50633) += pcf50633-backlight.o +> obj-$(CONFIG_BACKLIGHT_AAT2870) += aat2870_bl.o +> obj-$(CONFIG_BACKLIGHT_OT200) += ot200_bl.o +> obj-$(CONFIG_BACKLIGHT_TPS65217) += tps65217_bl.o +> +obj-$(CONFIG_BACKLIGHT_GPIO) += gpio_backlight.o +> diff --git a/drivers/video/backlight/gpio_backlight.c b/drivers/video/backlight/gpio_backlight.c +> new file mode 100644 +> index 0000000..5a8cd34 +> --- /dev/null +> +++ b/drivers/video/backlight/gpio_backlight.c +> @@ -0,0 +1,158 @@ +> +/* +> + * gpio_backlight.c - Simple GPIO-controlled backlight +> + * +> + * This program is free software; you can redistribute it and/or modify +> + * it under the terms of the GNU General Public License version 2 as +> + * published by the Free Software Foundation. +> + */ +> + +> +#include <linux/backlight.h> +> +#include <linux/err.h> +> +#include <linux/fb.h> +> +#include <linux/gpio.h> +> +#include <linux/init.h> +> +#include <linux/kernel.h> +> +#include <linux/module.h> +> +#include <linux/platform_device.h> +> +#include <linux/slab.h> +> +#include <video/gpio_backlight.h> +> + +> +struct gpio_backlight { +> + struct device *dev; +> + struct device *fbdev; +> + +> + int gpio; +> + int active; +> +}; +> + +> +static int gpio_backlight_update_status(struct backlight_device *bl) +> +{ +> + struct gpio_backlight *gbl = bl_get_data(bl); +> + int brightness = bl->props.brightness; +> + +> + if (bl->props.power != FB_BLANK_UNBLANK || +> + bl->props.fb_blank != FB_BLANK_UNBLANK || +> + bl->props.state & (BL_CORE_SUSPENDED | BL_CORE_FBBLANK)) +> + brightness = 0; +> + +> + gpio_set_value(gbl->gpio, brightness ? gbl->active : !gbl->active); +> + +> + return 0; +> +} +> + +> +static int gpio_backlight_get_brightness(struct backlight_device *bl) +> +{ +> + return bl->props.brightness; +> +} +> + +> +static int gpio_backlight_check_fb(struct backlight_device *bl, +> + struct fb_info *info) +> +{ +> + struct gpio_backlight *gbl = bl_get_data(bl); +> + +> + return gbl->fbdev == info->dev; +> +} +> + +> +static const struct backlight_ops gpio_backlight_ops = { +> + .update_status = gpio_backlight_update_status, +> + .get_brightness = gpio_backlight_get_brightness, +> + .check_fb = gpio_backlight_check_fb, +> +}; +> + +> +#ifdef CONFIG_PM +> +static int gpio_backlight_suspend(struct device *dev) +> +{ +> + struct backlight_device *bl = dev_get_drvdata(dev); +> + struct gpio_backlight *gbl = bl_get_data(bl); +> + +> + gpio_set_value(gbl->gpio, !gbl->active); +> + +> + return 0; +> +} +> + +> +static int gpio_backlight_resume(struct device *dev) +> +{ +> + struct backlight_device *bl = dev_get_drvdata(dev); +> + +> + backlight_update_status(bl); +> + return 0; +> +} +> + +> +static SIMPLE_DEV_PM_OPS(gpio_backlight_pm_ops, gpio_backlight_suspend, +> + gpio_backlight_resume); +> + +> +#endif +> + +> +static int __devinit gpio_backlight_probe(struct platform_device *pdev) +> +{ +> + struct gpio_backlight_platform_data *pdata = pdev->dev.platform_data; +> + struct backlight_properties props; +> + struct backlight_device *bl; +> + struct gpio_backlight *gbl; +> + int ret; +> + +> + gbl = devm_kzalloc(&pdev->dev, sizeof(*gbl), GFP_KERNEL); +> + if (gbl == NULL) +> + return -ENOMEM; +> + +> + gbl->dev = &pdev->dev; +> + +> + if (!pdata) { +> + dev_err(&pdev->dev, "failed to find platform data\n"); +> + return -ENODEV; +> + } +> + +> + gbl->fbdev = pdata->fbdev; +> + gbl->gpio = pdata->gpio; +> + gbl->active = pdata->active_low ? 0 : 1; +> + +> + ret = devm_gpio_request_one(gbl->dev, gbl->gpio, GPIOF_DIR_OUT, +> + pdata->name); +> + if (ret < 0) { +> + dev_err(&pdev->dev, "unable to request GPIO\n"); +> + return ret; +> + } +> + +> + memset(&props, 0, sizeof(props)); +> + props.type = BACKLIGHT_RAW; +> + props.max_brightness = 1; +> + bl = backlight_device_register(dev_name(&pdev->dev), &pdev->dev, gbl, +> + &gpio_backlight_ops, &props); +> + if (IS_ERR(bl)) { +> + dev_err(&pdev->dev, "failed to register backlight\n"); +> + return PTR_ERR(bl); +> + } +> + +> + bl->props.brightness = pdata->def_value; +> + backlight_update_status(bl); +> + +> + platform_set_drvdata(pdev, bl); +> + return 0; +> +} +> + +> +static int __devexit gpio_backlight_remove(struct platform_device *pdev) +> +{ +> + struct backlight_device *bl = platform_get_drvdata(pdev); +> + +> + backlight_device_unregister(bl); +> + return 0; +> +} +> + +> +static struct platform_driver gpio_backlight_driver = { +> + .driver = { +> + .name = "gpio-backlight", +> + .owner = THIS_MODULE, +> +#ifdef CONFIG_PM +> + .pm = &gpio_backlight_pm_ops, +> +#endif +> + }, +> + .probe = gpio_backlight_probe, +> + .remove = __devexit_p(gpio_backlight_remove), +> +}; +> + +> +module_platform_driver(gpio_backlight_driver); +> + +> +MODULE_AUTHOR("Laurent Pinchart <laurent.pinchart@ideasonboard.com>"); +> +MODULE_DESCRIPTION("GPIO-based Backlight Driver"); +> +MODULE_LICENSE("GPL"); +> +MODULE_ALIAS("platform:gpio-backlight"); +> diff --git a/include/video/gpio_backlight.h b/include/video/gpio_backlight.h +> new file mode 100644 +> index 0000000..5ae0d9c +> --- /dev/null +> +++ b/include/video/gpio_backlight.h +> @@ -0,0 +1,21 @@ +> +/* +> + * gpio_backlight.h - Simple GPIO-controlled backlight +> + * +> + * This program is free software; you can redistribute it and/or modify +> + * it under the terms of the GNU General Public License version 2 as +> + * published by the Free Software Foundation. +> + */ +> +#ifndef __GPIO_BACKLIGHT_H__ +> +#define __GPIO_BACKLIGHT_H__ +> + +> +struct device; +> + +> +struct gpio_backlight_platform_data { +> + struct device *fbdev; +> + int gpio; +> + int def_value; +> + bool active_low; +> + const char *name; +> +}; +> + +> +#endif +> -- +> 1.7.8.6 +> +> -- +> To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in +> the body of a message to majordomo@vger.kernel.org +> More majordomo info at http://vger.kernel.org/majordomo-info.html +ÿôèº{.nÇ+·®+%Ëÿ±éݶ\x17¥wÿº{.nÇ+·¥{±þG«éÿ{ayº\x1dÊÚë,j\a¢f£¢·hïêÿêçz_è®\x03(éÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?¨èÚ&£ø§~á¶iOæ¬z·vØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?I¥ diff --git a/a/content_digest b/N1/content_digest index 9025dca..1ce4f87 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,7 +1,6 @@ - "ref\01353688515-30458-2-git-send-email-laurent.pinchart+renesas@ideasonboard.com\0" "From\0Jingoo Han <jg1.han@samsung.com>\0" "Subject\0Re: [PATCH 1/5] backlight: Add GPIO-based backlight driver\0" - "Date\0Mon, 26 Nov 2012 09:49:38 +0000\0" + "Date\0Mon, 26 Nov 2012 09:49:37 +0000 (GMT)\0" "To\0Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>\0" "Cc\0akpm@linux-foundation.org <akpm@linux-foundation.org>" linux-kernel@vger.kernel.org <linux-kernel@vger.kernel.org> @@ -14,138 +13,252 @@ " Jingoo Han <jg1.han@samsung.com>\0" "\00:1\0" "b\0" - "T24gU2F0dXJkYXksIE5vdmVtYmVyIDI0LCAyMDEyIDE6MzUgQU0sIExhdXJlbnQgUGluY2hhcnQg\n" - "d3JvdGUNCj4gDQo+IFNpZ25lZC1vZmYtYnk6IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGlu\n" - "Y2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4NCg0KQ0MnZWQgQW5kcmV3IE1vcnRvbg0KDQpJdCBsb29r\n" - "cyBnb29kLiBBbHNvLCBJIHRlc3RlZCB0aGlzIHBhdGNoIHdpdGggU01ESzQyMTAgYm9hcmQuDQpB\n" - "Y2tlZC1ieTogSmluZ29vIEhhbiA8amcxLmhhbkBzYW1zdW5nLmNvbT4NCg0KQmVzdCByZWdhcmRz\n" - "LA0KSmluZ29vIEhhbg0KDQo+IC0tLQ0KPiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZp\n" - "ZyAgICAgICAgICB8ICAgIDcgKysNCj4gIGRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxl\n" - "ICAgICAgICAgfCAgICAxICsNCj4gIGRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2dwaW9fYmFja2xp\n" - "Z2h0LmMgfCAgMTU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgaW5jbHVkZS92\n" - "aWRlby9ncGlvX2JhY2tsaWdodC5oICAgICAgICAgICB8ICAgMjEgKysrKw0KPiAgNCBmaWxlcyBj\n" - "aGFuZ2VkLCAxODcgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkNCj4gIGNyZWF0ZSBtb2Rl\n" - "IDEwMDY0NCBkcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ncGlvX2JhY2tsaWdodC5jDQo+ICBjcmVh\n" - "dGUgbW9kZSAxMDA2NDQgaW5jbHVkZS92aWRlby9ncGlvX2JhY2tsaWdodC5oDQo+IA0KPiBkaWZm\n" - "IC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8v\n" - "YmFja2xpZ2h0L0tjb25maWcNCj4gaW5kZXggNzY1YTk0NS4uMjU5NDQyZCAxMDA2NDQNCj4gLS0t\n" - "IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZw0KPiArKysgYi9kcml2ZXJzL3ZpZGVv\n" - "L2JhY2tsaWdodC9LY29uZmlnDQo+IEBAIC0zOTAsNiArMzkwLDEzIEBAIGNvbmZpZyBCQUNLTElH\n" - "SFRfVFBTNjUyMTcNCj4gIAkgIElmIHlvdSBoYXZlIGEgVGV4YXMgSW5zdHJ1bWVudHMgVFBTNjUy\n" - "MTcgc2F5IFkgdG8gZW5hYmxlIHRoZQ0KPiAgCSAgYmFja2xpZ2h0IGRyaXZlci4NCj4gDQo+ICtj\n" - "b25maWcgQkFDS0xJR0hUX0dQSU8NCj4gKwl0cmlzdGF0ZSAiR2VuZXJpYyBHUElPIGJhc2VkIEJh\n" - "Y2tsaWdodCBEcml2ZXIiDQo+ICsJZGVwZW5kcyBvbiBHRU5FUklDX0dQSU8NCj4gKwloZWxwDQo+\n" - "ICsJICBJZiB5b3UgaGF2ZSBhIExDRCBiYWNrbGlnaHQgYWRqdXN0YWJsZSBieSBHUElPLCBzYXkg\n" - "WSB0byBlbmFibGUNCj4gKwkgIHRoaXMgZHJpdmVyLg0KPiArDQo+ICBlbmRpZiAjIEJBQ0tMSUdI\n" - "VF9DTEFTU19ERVZJQ0UNCj4gDQo+ICBlbmRpZiAjIEJBQ0tMSUdIVF9MQ0RfU1VQUE9SVA0KPiBk\n" - "aWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUgYi9kcml2ZXJzL3Zp\n" - "ZGVvL2JhY2tsaWdodC9NYWtlZmlsZQ0KPiBpbmRleCBlN2NlNzI5Li5lYzkxYzRhIDEwMDY0NA0K\n" - "PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQ0KPiArKysgYi9kcml2ZXJz\n" - "L3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQ0KPiBAQCAtNDUsMyArNDUsNCBAQCBvYmotJChDT05G\n" - "SUdfQkFDS0xJR0hUX1BDRjUwNjMzKQkrPSBwY2Y1MDYzMy1iYWNrbGlnaHQubw0KPiAgb2JqLSQo\n" - "Q09ORklHX0JBQ0tMSUdIVF9BQVQyODcwKSArPSBhYXQyODcwX2JsLm8NCj4gIG9iai0kKENPTkZJ\n" - "R19CQUNLTElHSFRfT1QyMDApICs9IG90MjAwX2JsLm8NCj4gIG9iai0kKENPTkZJR19CQUNLTElH\n" - "SFRfVFBTNjUyMTcpICs9IHRwczY1MjE3X2JsLm8NCj4gK29iai0kKENPTkZJR19CQUNLTElHSFRf\n" - "R1BJTykJKz0gZ3Bpb19iYWNrbGlnaHQubw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9i\n" - "YWNrbGlnaHQvZ3Bpb19iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2dwaW9f\n" - "YmFja2xpZ2h0LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uNWE4\n" - "Y2QzNA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2dw\n" - "aW9fYmFja2xpZ2h0LmMNCj4gQEAgLTAsMCArMSwxNTggQEANCj4gKy8qDQo+ICsgKiBncGlvX2Jh\n" - "Y2tsaWdodC5jIC0gU2ltcGxlIEdQSU8tY29udHJvbGxlZCBiYWNrbGlnaHQNCj4gKyAqDQo+ICsg\n" - "KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg\n" - "YW5kL29yIG1vZGlmeQ0KPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh\n" - "bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMNCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl\n" - "ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9i\n" - "YWNrbGlnaHQuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gKyNpbmNsdWRlIDxsaW51\n" - "eC9mYi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9p\n" - "bml0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+ICsjaW5jbHVkZSA8bGludXgv\n" - "bW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ICsjaW5j\n" - "bHVkZSA8bGludXgvc2xhYi5oPg0KPiArI2luY2x1ZGUgPHZpZGVvL2dwaW9fYmFja2xpZ2h0Lmg+\n" - "DQo+ICsNCj4gK3N0cnVjdCBncGlvX2JhY2tsaWdodCB7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2\n" - "Ow0KPiArCXN0cnVjdCBkZXZpY2UgKmZiZGV2Ow0KPiArDQo+ICsJaW50IGdwaW87DQo+ICsJaW50\n" - "IGFjdGl2ZTsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgZ3Bpb19iYWNrbGlnaHRfdXBkYXRl\n" - "X3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpDQo+ICt7DQo+ICsJc3RydWN0IGdw\n" - "aW9fYmFja2xpZ2h0ICpnYmwgPSBibF9nZXRfZGF0YShibCk7DQo+ICsJaW50IGJyaWdodG5lc3Mg\n" - "PSBibC0+cHJvcHMuYnJpZ2h0bmVzczsNCj4gKw0KPiArCWlmIChibC0+cHJvcHMucG93ZXIgIT0g\n" - "RkJfQkxBTktfVU5CTEFOSyB8fA0KPiArCSAgICBibC0+cHJvcHMuZmJfYmxhbmsgIT0gRkJfQkxB\n" - "TktfVU5CTEFOSyB8fA0KPiArCSAgICBibC0+cHJvcHMuc3RhdGUgJiAoQkxfQ09SRV9TVVNQRU5E\n" - "RUQgfCBCTF9DT1JFX0ZCQkxBTkspKQ0KPiArCQlicmlnaHRuZXNzID0gMDsNCj4gKw0KPiArCWdw\n" - "aW9fc2V0X3ZhbHVlKGdibC0+Z3BpbywgYnJpZ2h0bmVzcyA/IGdibC0+YWN0aXZlIDogIWdibC0+\n" - "YWN0aXZlKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGdw\n" - "aW9fYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkN\n" - "Cj4gK3sNCj4gKwlyZXR1cm4gYmwtPnByb3BzLmJyaWdodG5lc3M7DQo+ICt9DQo+ICsNCj4gK3N0\n" - "YXRpYyBpbnQgZ3Bpb19iYWNrbGlnaHRfY2hlY2tfZmIoc3RydWN0IGJhY2tsaWdodF9kZXZpY2Ug\n" - "KmJsLA0KPiArCQkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQ0KPiArew0KPiArCXN0cnVjdCBn\n" - "cGlvX2JhY2tsaWdodCAqZ2JsID0gYmxfZ2V0X2RhdGEoYmwpOw0KPiArDQo+ICsJcmV0dXJuIGdi\n" - "bC0+ZmJkZXYgPT0gaW5mby0+ZGV2Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0\n" - "IGJhY2tsaWdodF9vcHMgZ3Bpb19iYWNrbGlnaHRfb3BzID0gew0KPiArCS51cGRhdGVfc3RhdHVz\n" - "CT0gZ3Bpb19iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywNCj4gKwkuZ2V0X2JyaWdodG5lc3MJPSBn\n" - "cGlvX2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywNCj4gKwkuY2hlY2tfZmIJPSBncGlvX2JhY2ts\n" - "aWdodF9jaGVja19mYiwNCj4gK307DQo+ICsNCj4gKyNpZmRlZiBDT05GSUdfUE0NCj4gK3N0YXRp\n" - "YyBpbnQgZ3Bpb19iYWNrbGlnaHRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ICt7DQo+\n" - "ICsJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+\n" - "ICsJc3RydWN0IGdwaW9fYmFja2xpZ2h0ICpnYmwgPSBibF9nZXRfZGF0YShibCk7DQo+ICsNCj4g\n" - "KwlncGlvX3NldF92YWx1ZShnYmwtPmdwaW8sICFnYmwtPmFjdGl2ZSk7DQo+ICsNCj4gKwlyZXR1\n" - "cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBncGlvX2JhY2tsaWdodF9yZXN1bWUoc3Ry\n" - "dWN0IGRldmljZSAqZGV2KQ0KPiArew0KPiArCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCA9\n" - "IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArDQo+ICsJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMo\n" - "YmwpOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgU0lNUExFX0RFVl9QTV9P\n" - "UFMoZ3Bpb19iYWNrbGlnaHRfcG1fb3BzLCBncGlvX2JhY2tsaWdodF9zdXNwZW5kLA0KPiArCQkJ\n" - "IGdwaW9fYmFja2xpZ2h0X3Jlc3VtZSk7DQo+ICsNCj4gKyNlbmRpZg0KPiArDQo+ICtzdGF0aWMg\n" - "aW50IF9fZGV2aW5pdCBncGlvX2JhY2tsaWdodF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl\n" - "ICpwZGV2KQ0KPiArew0KPiArCXN0cnVjdCBncGlvX2JhY2tsaWdodF9wbGF0Zm9ybV9kYXRhICpw\n" - "ZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOw0KPiArCXN0cnVjdCBiYWNrbGlnaHRfcHJv\n" - "cGVydGllcyBwcm9wczsNCj4gKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmw7DQo+ICsJc3Ry\n" - "dWN0IGdwaW9fYmFja2xpZ2h0ICpnYmw7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWdibCA9IGRl\n" - "dm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmdibCksIEdGUF9LRVJORUwpOw0KPiArCWlm\n" - "IChnYmwgPT0gTlVMTCkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwlnYmwtPmRldiA9\n" - "ICZwZGV2LT5kZXY7DQo+ICsNCj4gKwlpZiAoIXBkYXRhKSB7DQo+ICsJCWRldl9lcnIoJnBkZXYt\n" - "PmRldiwgImZhaWxlZCB0byBmaW5kIHBsYXRmb3JtIGRhdGFcbiIpOw0KPiArCQlyZXR1cm4gLUVO\n" - "T0RFVjsNCj4gKwl9DQo+ICsNCj4gKwlnYmwtPmZiZGV2ID0gcGRhdGEtPmZiZGV2Ow0KPiArCWdi\n" - "bC0+Z3BpbyA9IHBkYXRhLT5ncGlvOw0KPiArCWdibC0+YWN0aXZlID0gcGRhdGEtPmFjdGl2ZV9s\n" - "b3cgPyAwIDogMTsNCj4gKw0KPiArCXJldCA9IGRldm1fZ3Bpb19yZXF1ZXN0X29uZShnYmwtPmRl\n" - "diwgZ2JsLT5ncGlvLCBHUElPRl9ESVJfT1VULA0KPiArCQkJCSAgICBwZGF0YS0+bmFtZSk7DQo+\n" - "ICsJaWYgKHJldCA8IDApIHsNCj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHJl\n" - "cXVlc3QgR1BJT1xuIik7DQo+ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJbWVtc2V0\n" - "KCZwcm9wcywgMCwgc2l6ZW9mKHByb3BzKSk7DQo+ICsJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9S\n" - "QVc7DQo+ICsJcHJvcHMubWF4X2JyaWdodG5lc3MgPSAxOw0KPiArCWJsID0gYmFja2xpZ2h0X2Rl\n" - "dmljZV9yZWdpc3RlcihkZXZfbmFtZSgmcGRldi0+ZGV2KSwgJnBkZXYtPmRldiwgZ2JsLA0KPiAr\n" - "CQkJCSAgICAgICAmZ3Bpb19iYWNrbGlnaHRfb3BzLCAmcHJvcHMpOw0KPiArCWlmIChJU19FUlIo\n" - "YmwpKSB7DQo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYWNr\n" - "bGlnaHRcbiIpOw0KPiArCQlyZXR1cm4gUFRSX0VSUihibCk7DQo+ICsJfQ0KPiArDQo+ICsJYmwt\n" - "PnByb3BzLmJyaWdodG5lc3MgPSBwZGF0YS0+ZGVmX3ZhbHVlOw0KPiArCWJhY2tsaWdodF91cGRh\n" - "dGVfc3RhdHVzKGJsKTsNCj4gKw0KPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGJsKTsN\n" - "Cj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBfX2RldmV4aXQgZ3Bpb19i\n" - "YWNrbGlnaHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICsJ\n" - "c3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7\n" - "DQo+ICsNCj4gKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmwpOw0KPiArCXJldHVybiAw\n" - "Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBncGlvX2JhY2ts\n" - "aWdodF9kcml2ZXIgPSB7DQo+ICsJLmRyaXZlcgkJPSB7DQo+ICsJCS5uYW1lCQk9ICJncGlvLWJh\n" - "Y2tsaWdodCIsDQo+ICsJCS5vd25lcgkJPSBUSElTX01PRFVMRSwNCj4gKyNpZmRlZiBDT05GSUdf\n" - "UE0NCj4gKwkJLnBtCQk9ICZncGlvX2JhY2tsaWdodF9wbV9vcHMsDQo+ICsjZW5kaWYNCj4gKwl9\n" - "LA0KPiArCS5wcm9iZQkJPSBncGlvX2JhY2tsaWdodF9wcm9iZSwNCj4gKwkucmVtb3ZlCQk9IF9f\n" - "ZGV2ZXhpdF9wKGdwaW9fYmFja2xpZ2h0X3JlbW92ZSksDQo+ICt9Ow0KPiArDQo+ICttb2R1bGVf\n" - "cGxhdGZvcm1fZHJpdmVyKGdwaW9fYmFja2xpZ2h0X2RyaXZlcik7DQo+ICsNCj4gK01PRFVMRV9B\n" - "VVRIT1IoIkxhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNv\n" - "bT4iKTsNCj4gK01PRFVMRV9ERVNDUklQVElPTigiR1BJTy1iYXNlZCBCYWNrbGlnaHQgRHJpdmVy\n" - "Iik7DQo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7DQo+ICtNT0RVTEVfQUxJQVMoInBsYXRmb3Jt\n" - "OmdwaW8tYmFja2xpZ2h0Iik7DQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL2dwaW9fYmFj\n" - "a2xpZ2h0LmggYi9pbmNsdWRlL3ZpZGVvL2dwaW9fYmFja2xpZ2h0LmgNCj4gbmV3IGZpbGUgbW9k\n" - "ZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uNWFlMGQ5Yw0KPiAtLS0gL2Rldi9udWxsDQo+ICsr\n" - "KyBiL2luY2x1ZGUvdmlkZW8vZ3Bpb19iYWNrbGlnaHQuaA0KPiBAQCAtMCwwICsxLDIxIEBADQo+\n" - "ICsvKg0KPiArICogZ3Bpb19iYWNrbGlnaHQuaCAtIFNpbXBsZSBHUElPLWNvbnRyb2xsZWQgYmFj\n" - "a2xpZ2h0DQo+ICsgKg0KPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj\n" - "YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJt\n" - "cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzDQo+ICsgKiBw\n" - "dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCj4gKyAqLw0KPiArI2lm\n" - "bmRlZiBfX0dQSU9fQkFDS0xJR0hUX0hfXw0KPiArI2RlZmluZSBfX0dQSU9fQkFDS0xJR0hUX0hf\n" - "Xw0KPiArDQo+ICtzdHJ1Y3QgZGV2aWNlOw0KPiArDQo+ICtzdHJ1Y3QgZ3Bpb19iYWNrbGlnaHRf\n" - "cGxhdGZvcm1fZGF0YSB7DQo+ICsJc3RydWN0IGRldmljZSAqZmJkZXY7DQo+ICsJaW50IGdwaW87\n" - "DQo+ICsJaW50IGRlZl92YWx1ZTsNCj4gKwlib29sIGFjdGl2ZV9sb3c7DQo+ICsJY29uc3QgY2hh\n" - "ciAqbmFtZTsNCj4gK307DQo+ICsNCj4gKyNlbmRpZg0KPiAtLQ0KPiAxLjcuOC42DQo+IA0KPiAt\n" - "LQ0KPiBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJz\n" - "Y3JpYmUgbGludXgtZmJkZXYiIGluDQo+IHRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRv\n" - "bW9Admdlci5rZXJuZWwub3JnDQo+IE1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2Vy\n" - Lmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbA0K + "On Saturday, November 24, 2012 1:35 AM, Laurent Pinchart wrote\n" + "> \n" + "> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n" + "\n" + "CC'ed Andrew Morton\n" + "\n" + "It looks good. Also, I tested this patch with SMDK4210 board.\n" + "Acked-by: Jingoo Han <jg1.han@samsung.com>\n" + "\n" + "Best regards,\n" + "Jingoo Han\n" + "\n" + "> ---\n" + "> drivers/video/backlight/Kconfig | 7 ++\n" + "> drivers/video/backlight/Makefile | 1 +\n" + "> drivers/video/backlight/gpio_backlight.c | 158 ++++++++++++++++++++++++++++++\n" + "> include/video/gpio_backlight.h | 21 ++++\n" + "> 4 files changed, 187 insertions(+), 0 deletions(-)\n" + "> create mode 100644 drivers/video/backlight/gpio_backlight.c\n" + "> create mode 100644 include/video/gpio_backlight.h\n" + "> \n" + "> diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig\n" + "> index 765a945..259442d 100644\n" + "> --- a/drivers/video/backlight/Kconfig\n" + "> +++ b/drivers/video/backlight/Kconfig\n" + "> @@ -390,6 +390,13 @@ config BACKLIGHT_TPS65217\n" + "> \t If you have a Texas Instruments TPS65217 say Y to enable the\n" + "> \t backlight driver.\n" + "> \n" + "> +config BACKLIGHT_GPIO\n" + "> +\ttristate \"Generic GPIO based Backlight Driver\"\n" + "> +\tdepends on GENERIC_GPIO\n" + "> +\thelp\n" + "> +\t If you have a LCD backlight adjustable by GPIO, say Y to enable\n" + "> +\t this driver.\n" + "> +\n" + "> endif # BACKLIGHT_CLASS_DEVICE\n" + "> \n" + "> endif # BACKLIGHT_LCD_SUPPORT\n" + "> diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile\n" + "> index e7ce729..ec91c4a 100644\n" + "> --- a/drivers/video/backlight/Makefile\n" + "> +++ b/drivers/video/backlight/Makefile\n" + "> @@ -45,3 +45,4 @@ obj-$(CONFIG_BACKLIGHT_PCF50633)\t+= pcf50633-backlight.o\n" + "> obj-$(CONFIG_BACKLIGHT_AAT2870) += aat2870_bl.o\n" + "> obj-$(CONFIG_BACKLIGHT_OT200) += ot200_bl.o\n" + "> obj-$(CONFIG_BACKLIGHT_TPS65217) += tps65217_bl.o\n" + "> +obj-$(CONFIG_BACKLIGHT_GPIO)\t+= gpio_backlight.o\n" + "> diff --git a/drivers/video/backlight/gpio_backlight.c b/drivers/video/backlight/gpio_backlight.c\n" + "> new file mode 100644\n" + "> index 0000000..5a8cd34\n" + "> --- /dev/null\n" + "> +++ b/drivers/video/backlight/gpio_backlight.c\n" + "> @@ -0,0 +1,158 @@\n" + "> +/*\n" + "> + * gpio_backlight.c - Simple GPIO-controlled backlight\n" + "> + *\n" + "> + * This program is free software; you can redistribute it and/or modify\n" + "> + * it under the terms of the GNU General Public License version 2 as\n" + "> + * published by the Free Software Foundation.\n" + "> + */\n" + "> +\n" + "> +#include <linux/backlight.h>\n" + "> +#include <linux/err.h>\n" + "> +#include <linux/fb.h>\n" + "> +#include <linux/gpio.h>\n" + "> +#include <linux/init.h>\n" + "> +#include <linux/kernel.h>\n" + "> +#include <linux/module.h>\n" + "> +#include <linux/platform_device.h>\n" + "> +#include <linux/slab.h>\n" + "> +#include <video/gpio_backlight.h>\n" + "> +\n" + "> +struct gpio_backlight {\n" + "> +\tstruct device *dev;\n" + "> +\tstruct device *fbdev;\n" + "> +\n" + "> +\tint gpio;\n" + "> +\tint active;\n" + "> +};\n" + "> +\n" + "> +static int gpio_backlight_update_status(struct backlight_device *bl)\n" + "> +{\n" + "> +\tstruct gpio_backlight *gbl = bl_get_data(bl);\n" + "> +\tint brightness = bl->props.brightness;\n" + "> +\n" + "> +\tif (bl->props.power != FB_BLANK_UNBLANK ||\n" + "> +\t bl->props.fb_blank != FB_BLANK_UNBLANK ||\n" + "> +\t bl->props.state & (BL_CORE_SUSPENDED | BL_CORE_FBBLANK))\n" + "> +\t\tbrightness = 0;\n" + "> +\n" + "> +\tgpio_set_value(gbl->gpio, brightness ? gbl->active : !gbl->active);\n" + "> +\n" + "> +\treturn 0;\n" + "> +}\n" + "> +\n" + "> +static int gpio_backlight_get_brightness(struct backlight_device *bl)\n" + "> +{\n" + "> +\treturn bl->props.brightness;\n" + "> +}\n" + "> +\n" + "> +static int gpio_backlight_check_fb(struct backlight_device *bl,\n" + "> +\t\t\t\t struct fb_info *info)\n" + "> +{\n" + "> +\tstruct gpio_backlight *gbl = bl_get_data(bl);\n" + "> +\n" + "> +\treturn gbl->fbdev == info->dev;\n" + "> +}\n" + "> +\n" + "> +static const struct backlight_ops gpio_backlight_ops = {\n" + "> +\t.update_status\t= gpio_backlight_update_status,\n" + "> +\t.get_brightness\t= gpio_backlight_get_brightness,\n" + "> +\t.check_fb\t= gpio_backlight_check_fb,\n" + "> +};\n" + "> +\n" + "> +#ifdef CONFIG_PM\n" + "> +static int gpio_backlight_suspend(struct device *dev)\n" + "> +{\n" + "> +\tstruct backlight_device *bl = dev_get_drvdata(dev);\n" + "> +\tstruct gpio_backlight *gbl = bl_get_data(bl);\n" + "> +\n" + "> +\tgpio_set_value(gbl->gpio, !gbl->active);\n" + "> +\n" + "> +\treturn 0;\n" + "> +}\n" + "> +\n" + "> +static int gpio_backlight_resume(struct device *dev)\n" + "> +{\n" + "> +\tstruct backlight_device *bl = dev_get_drvdata(dev);\n" + "> +\n" + "> +\tbacklight_update_status(bl);\n" + "> +\treturn 0;\n" + "> +}\n" + "> +\n" + "> +static SIMPLE_DEV_PM_OPS(gpio_backlight_pm_ops, gpio_backlight_suspend,\n" + "> +\t\t\t gpio_backlight_resume);\n" + "> +\n" + "> +#endif\n" + "> +\n" + "> +static int __devinit gpio_backlight_probe(struct platform_device *pdev)\n" + "> +{\n" + "> +\tstruct gpio_backlight_platform_data *pdata = pdev->dev.platform_data;\n" + "> +\tstruct backlight_properties props;\n" + "> +\tstruct backlight_device *bl;\n" + "> +\tstruct gpio_backlight *gbl;\n" + "> +\tint ret;\n" + "> +\n" + "> +\tgbl = devm_kzalloc(&pdev->dev, sizeof(*gbl), GFP_KERNEL);\n" + "> +\tif (gbl == NULL)\n" + "> +\t\treturn -ENOMEM;\n" + "> +\n" + "> +\tgbl->dev = &pdev->dev;\n" + "> +\n" + "> +\tif (!pdata) {\n" + "> +\t\tdev_err(&pdev->dev, \"failed to find platform data\\n\");\n" + "> +\t\treturn -ENODEV;\n" + "> +\t}\n" + "> +\n" + "> +\tgbl->fbdev = pdata->fbdev;\n" + "> +\tgbl->gpio = pdata->gpio;\n" + "> +\tgbl->active = pdata->active_low ? 0 : 1;\n" + "> +\n" + "> +\tret = devm_gpio_request_one(gbl->dev, gbl->gpio, GPIOF_DIR_OUT,\n" + "> +\t\t\t\t pdata->name);\n" + "> +\tif (ret < 0) {\n" + "> +\t\tdev_err(&pdev->dev, \"unable to request GPIO\\n\");\n" + "> +\t\treturn ret;\n" + "> +\t}\n" + "> +\n" + "> +\tmemset(&props, 0, sizeof(props));\n" + "> +\tprops.type = BACKLIGHT_RAW;\n" + "> +\tprops.max_brightness = 1;\n" + "> +\tbl = backlight_device_register(dev_name(&pdev->dev), &pdev->dev, gbl,\n" + "> +\t\t\t\t &gpio_backlight_ops, &props);\n" + "> +\tif (IS_ERR(bl)) {\n" + "> +\t\tdev_err(&pdev->dev, \"failed to register backlight\\n\");\n" + "> +\t\treturn PTR_ERR(bl);\n" + "> +\t}\n" + "> +\n" + "> +\tbl->props.brightness = pdata->def_value;\n" + "> +\tbacklight_update_status(bl);\n" + "> +\n" + "> +\tplatform_set_drvdata(pdev, bl);\n" + "> +\treturn 0;\n" + "> +}\n" + "> +\n" + "> +static int __devexit gpio_backlight_remove(struct platform_device *pdev)\n" + "> +{\n" + "> +\tstruct backlight_device *bl = platform_get_drvdata(pdev);\n" + "> +\n" + "> +\tbacklight_device_unregister(bl);\n" + "> +\treturn 0;\n" + "> +}\n" + "> +\n" + "> +static struct platform_driver gpio_backlight_driver = {\n" + "> +\t.driver\t\t= {\n" + "> +\t\t.name\t\t= \"gpio-backlight\",\n" + "> +\t\t.owner\t\t= THIS_MODULE,\n" + "> +#ifdef CONFIG_PM\n" + "> +\t\t.pm\t\t= &gpio_backlight_pm_ops,\n" + "> +#endif\n" + "> +\t},\n" + "> +\t.probe\t\t= gpio_backlight_probe,\n" + "> +\t.remove\t\t= __devexit_p(gpio_backlight_remove),\n" + "> +};\n" + "> +\n" + "> +module_platform_driver(gpio_backlight_driver);\n" + "> +\n" + "> +MODULE_AUTHOR(\"Laurent Pinchart <laurent.pinchart@ideasonboard.com>\");\n" + "> +MODULE_DESCRIPTION(\"GPIO-based Backlight Driver\");\n" + "> +MODULE_LICENSE(\"GPL\");\n" + "> +MODULE_ALIAS(\"platform:gpio-backlight\");\n" + "> diff --git a/include/video/gpio_backlight.h b/include/video/gpio_backlight.h\n" + "> new file mode 100644\n" + "> index 0000000..5ae0d9c\n" + "> --- /dev/null\n" + "> +++ b/include/video/gpio_backlight.h\n" + "> @@ -0,0 +1,21 @@\n" + "> +/*\n" + "> + * gpio_backlight.h - Simple GPIO-controlled backlight\n" + "> + *\n" + "> + * This program is free software; you can redistribute it and/or modify\n" + "> + * it under the terms of the GNU General Public License version 2 as\n" + "> + * published by the Free Software Foundation.\n" + "> + */\n" + "> +#ifndef __GPIO_BACKLIGHT_H__\n" + "> +#define __GPIO_BACKLIGHT_H__\n" + "> +\n" + "> +struct device;\n" + "> +\n" + "> +struct gpio_backlight_platform_data {\n" + "> +\tstruct device *fbdev;\n" + "> +\tint gpio;\n" + "> +\tint def_value;\n" + "> +\tbool active_low;\n" + "> +\tconst char *name;\n" + "> +};\n" + "> +\n" + "> +#endif\n" + "> --\n" + "> 1.7.8.6\n" + "> \n" + "> --\n" + "> To unsubscribe from this list: send the line \"unsubscribe linux-fbdev\" in\n" + "> the body of a message to majordomo@vger.kernel.org\n" + "> More majordomo info at http://vger.kernel.org/majordomo-info.html\n" + "\303\277\303\264\303\250\302\272{.n\303\207+\302\211\302\267\302\237\302\256\302\211\302\255\302\206+%\302\212\303\213\303\277\302\261\303\251\303\235\302\266\027\302\245\302\212w\303\277\302\272{.n\303\207+\302\211\302\267\302\245\302\212{\302\261\303\276G\302\253\302\235\303\251\303\277\302\212{ay\302\272\035\303\212\302\207\303\232\302\231\303\253,j\a\302\255\302\242f\302\243\302\242\302\267h\302\232\302\217\303\257\302\201\303\252\303\277\302\221\303\252\303\247z_\303\250\302\256\003(\302\255\303\251\302\232\302\216\302\212\303\235\302\242j\"\302\235\303\272\032\302\266\033m\302\247\303\277\303\277\302\276\a\302\253\303\276G\302\253\302\235\303\251\303\277\302\242\302\270?\302\231\302\250\303\250\302\255\303\232&\302\243\303\270\302\247~\302\217\303\241\302\266iO\302\225\303\246\302\254z\302\267\302\232v\303\230^\024\004\032\302\266\033m\302\247\303\277\303\277\303\203\f\303\277\302\266\303\254\303\277\302\242\302\270?\302\226I\302\245" -bc5e51bbc0bf96f5ae3af5257038cb57404251bedf009cddc3d263531a20fd67 +aa1163fdda15d88712fb732c79342cb575a9239be1198e62d6346f49af519864
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.